Django admin ManyToMany 内联“没有外键"错误 [英] Django admin ManyToMany inline "has no ForeignKey to" error

查看:35
本文介绍了Django admin ManyToMany 内联“没有外键"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆