Django admin ManyToMany 内联“没有外键"错误 [英] Django admin ManyToMany inline "has no ForeignKey to" error
问题描述
我正在将 Django 管理员设置为以下模型:
I'm setting up the Django admin to the following models:
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
时,页面显示错误,提示
没有外键.这在我添加内联之前没有发生.有什么问题?如何正确添加 Tag
作为内联?
When trying to view the admin page to add a Quote
, the page shows an error saying <class 'quotes.models.Tag'> has no ForeignKey to <class 'quotes.models.Quote'>
. This didn't happen before I added an inline. What's the problem? How do I correctly add a Tag
as an inline?
(我花了 20 分钟寻找答案;我发现了类似的问题,但他们的答案都不适合我.)
推荐答案
管理文档 有一个部分专门用于内联多对多关系.您应该使用 Quote.tags.through
作为 TagInline
的模型,而不是 Tag
本身.
Admin documentation has a section dedicated to inlining with many-to-many relationships. You should use Quote.tags.through
as a model for TagInline
, instead of Tag
itself.
这篇关于Django admin ManyToMany 内联“没有外键"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!