【问题标题】:Django Admin inline for recursive ManyToMany用于递归多对多的 Django Admin 内联
【发布时间】:2011-12-31 22:23:34
【问题描述】:

我有以下模型,它与自身具有多对多关系

class Ticket(models.Model):

    STATUS = (
        (0, "Open"),
        (1, "Closed"),
    )
    status = models.SmallIntegerField(default=0,choices=STATUS)
    title = models.CharField(max_length=100)
    replies = models.ManyToManyField('self')
    description = models.TextField()

我正在尝试使用以下代码在管理员中将此模型显示为内联

class TicketReply(admin.TabularInline):
    model = Ticket.replies.through

但是我一直收到这个错误

<class 'tsn.ticket.models.Ticket_replies'> has more than 1 ForeignKey to <class 'tsn.ticket.models.Ticket'>

所以我做错了,还是不支持?

【问题讨论】:

  • fk_name 和 related_name 是您应该检查的设置:docs.djangoproject.com/en/dev/ref/contrib/admin/…
  • 我一直收到同样的错误,即使在添加了相关名称设置之后,并且在添加 fk_name 时它说“TicketReply.fk_name”指的是模型“Ticket_replies”中缺少的字段“回复”,我不'不认为这是支持的,因为查看源代码,在验证内联 django 时需要一个外键
  • 你也应该发布 Ticket_replies 模型

标签: python django django-admin django-orm


【解决方案1】:

可能为时已晚,但我尝试回答这个问题。 Ticket.replies.through 是一个管理多对多关系的表,它有字段 from_ticket 和 to_ticket(FK to model Ticket),您可以将此字段设置为 TabularInline 的选项 fk_name。

class TicketReply(admin.TabularInline):
    model = Ticket.replies.through
    fk_name = 'from_ticket'

【讨论】:

  • fk_name 是递归定义的魔力!谢谢!
  • 我知道这已经很老了,但仍然很遥远。如何使内联的字段在与其自身的多对多关系中可编辑?
  • 感谢您的回答。在我看到这个之前,我面临着同样的问题。该文档让我失望,因为它指出为递归关系的直通表生成的字段名称是 to__id 和 from__id 但直到我看到你的答案才起作用t 为“fk_name”指定任何“_id”后缀
猜你喜欢
  • 2013-03-17
  • 2012-06-09
  • 2013-11-17
  • 2015-02-08
  • 2011-08-27
  • 1970-01-01
  • 2015-04-25
  • 2010-12-20
  • 2011-02-23
相关资源
最近更新 更多