2010-03-23 71 views
4

我有类似以下(简化)模型:现在显示models.ManyToManyField为内联,以相同的形式models.ForeignKey直列

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,当我在Sample在Django管理显示Action作为TabularInline,我会得到一个数列,每个都包含一个很好的形式进行编辑或添加其他Action。然而;当我使用显示上述作为内联以下:

class ActionInline(admin.TabularInline): 
    model=Action.samples.through 

我得到一个选择框列出所有可用的行动,而不是一个漂亮的形式来创建一个新Action

我的问题是:我如何显示ManyToMany关系作为一个内联的表格输入信息描述?

原则上它应该是可能的,因为从Sample的角度来看,情况在两种情况下是相同的;无论关系是ForeignKey还是ManyToManyRelation,每个Sample都有一个Action的列表。也;通过Sample管理页面,我从不想从现有的Action中选择,只创建新的或编辑旧的。

回答

0

我明白了你的观点,但想到的情况下,你可能需要通过模型(表格)使用自定义。在这种情况下,管理内嵌表单将包含该中间模型的字段,因为这是您要求管理员为其创建表单的模型。

例如

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管理员支持嵌套内联(there is an open ticket),你可以做你所要求的。