Django管理员ManyToMany内联“没有ForeignKey to”错误


89

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

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

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

使用以下代码:

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'>。在添加内联之前,这没有发生。有什么问题?如何正确将aTag作为内联添加?

(我花了20分钟的时间来寻找答案;我发现了类似的问题,但他们的答案都对我没有用。)


Answers:


150

管理员文档中有专门用于内嵌多对多关系的部分。您应该将其Quote.tags.through用作的模型TagInline,而不是Tag本身。


如果我有一个包含多个的模态manytomany field,那意味着每个模态都需要一个,Inline并且它们是不同的吗?
Sinux

4
@Rmatt对于逆转多对多关系 model = Tag.quote_set.related.through
Manh Tai)

有没有技巧可以使贯穿模型显示为原始id字段,而不是在数据库中列出非常可能的行?
mlissner'2

这就是为什么我开始喜欢的Django
丹尼尔W.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.