我有一个类似于以下(简化)的模型:
models.py
class Sample(models.Model):
name=models.CharField(max_length=200)
class Action(models.Model):
samples=models.ManyToManyField(Sample)
title=models.CharField(max_length=200)
description=models.TextField()
现在,如果Action.samples
是ForeignKey
而不是ManyToManyField
,那么当我在Action
中将TabularInline
显示为Sample
时在Django Admin中,我会得到许多行,每行包含一个很好的表单来编辑或添加另一个Action
。然而;当我使用以下内容将上面显示为内联时:
class ActionInline(admin.TabularInline):
model=Action.samples.through
我得到一个列出所有可用操作的选择框,而不是一个漂亮的表单来创建新的Action
。
我的问题是:如何将ManyToMany关系显示为内联表单以输入所描述的信息?
原则上应该是可能的,因为从Sample
的观点来看,两种情况都是相同的;无论关系是Sample
还是Action
,每个ForeignKey
都有一个ManyToManyRelation
列表。也;通过Sample
管理页面,我绝不想从现有的Action
中进行选择,只需创建新的或编辑旧的。{/ p>
答案 0 :(得分:0)
我明白了你的观点,但想想你可能需要使用自定义模型(表格)的情况。在这种情况下,管理员内联表单将包含该中间模型的字段,因为您要求管理员为其创建表单的模型。
e.g。
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
管理员应显示Memebership模型的表单,因为该模型与可编辑实例相关。 在您的情况下,直通模型只包含2个外键(1个用于Action模型,1个用于Sample),这就是为什么只显示操作列表的原因。
如果django admin支持嵌套内联(there is an open ticket有关此内容),您可以按照要求执行操作。