ChatGPT解决这个技术问题 Extra ChatGPT

Django admin ManyToMany inline“没有ForeignKey to”错误

我正在将 Django 管理员设置为以下模型:

class Tag(models.Model):                                                 
    name = models.CharField(max_length=100)                                 

class Quote(models.Model):                                                  
    author = models.CharField(max_length=100)                               
    quote = models.CharField(max_length=1000)                               
    tags = models.ManyToManyField(Tag)

使用以下代码:

class TagInline(admin.TabularInline):                                                                                               
    model = Tag                                                             
                                                                            
class QuoteAdmin(admin.ModelAdmin):                                         
    list_display = ('author', 'quote')                                      
    inlines = (TagInline,)                                                  
                                                                            
class TagAdmin(admin.ModelAdmin):                                           
    pass                                                                    
                                                                            
admin.site.register(Quote, QuoteAdmin)                                      
admin.site.register(Tag, TagAdmin)

尝试查看管理页面以添加 Quote 时,页面显示错误提示 <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>。这在我添加内联之前没有发生。有什么问题?如何正确添加 Tag 作为内联?

(我花了整整 20 分钟寻找答案;我发现了类似的问题,但没有一个对我有用。)


C
Cat Plus Plus

Admin documentation 有一个部分专门用于内联多对多关系。您应该使用 Quote.tags.through 作为 TagInline 的模型,而不是 Tag 本身。


如果我有一个包含许多 manytomany field 的模式,这意味着每个模式都需要一个 Inline 并且它们是不同的?
@Rmatt 对于反向多对多关系model = Tag.quote_set.related.through
是否有使直通模型显示为原始 id 字段而不是在数据库中列出非常可能的行的技巧?
这就是我开始喜欢 Django 的原因
在这种情况下如何使用 filter_horizontal ? .through 没有模型字段。所以我得到属性错误:(

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅