用于递归多对多的 Django Admin 内联
Posted
技术标签:
【中文标题】用于递归多对多的 Django Admin 内联【英文标题】:Django Admin inline for recursive ManyToMany 【发布时间】: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 模型 【参考方案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_以上是关于用于递归多对多的 Django Admin 内联的主要内容,如果未能解决你的问题,请参考以下文章