【问题标题】:Django admin ManyToMany inline "has no ForeignKey to" errorDjango admin ManyToMany inline“没有ForeignKey to”错误
【发布时间】:2011-09-22 17:26:43
【问题描述】:

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

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

【问题讨论】:

标签: django django-models


【解决方案1】:

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

【讨论】:

  • 如果我有一个包含多个manytomany field 的模态,这意味着每个模态都需要一个Inline 并且它们是不同的?
  • @Rmatt 用于反向多对多关系model = Tag.quote_set.related.through
  • 是否有一种技巧可以使直通模型显示为原始 id 字段,而不是在数据库中列出非常可能的行?
  • 这就是我开始喜欢 Django 的原因
  • 在这种情况下如何使用 filter_horizo​​ntal? .through 没有模型字段。所以我得到属性错误:(
猜你喜欢
  • 2021-09-18
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2014-06-11
  • 2016-04-29
  • 2020-05-07
相关资源
最近更新 更多