ManyToManyField上的可选附加数据

时间:2011-05-14 17:29:58

标签: django django-admin many-to-many

我在Django中有一个ManyToManyField,我想保存关系的其他信息。我正在做的是

class Speaker(models.Model):
    name = models.CharField(max_length=50)
    title = models.CharField(max_length=100, blank=True)
    description = models.TextField(blank=True)

class Event(models.Model):
    title = models.CharField(max_length=120)
    speakers = models.ManyToManyField(Speaker, blank=True, null=True, through='Role')

class Role(models.Model):
    speaker = models.ForeignKey(Speaker)
    event = models.ForeignKey(Event)
    role = models.CharField(max_length=50, blank=True)

根据documentation,这可以防止Django做一些自动操作。特别令人讨厌的是,在管理员中创建活动时,扬声器列表不可用。

我意识到一般来说Django不知道在Role.role字段中放什么。但这是可选的(blank=True)。我希望那个

  • Django认识到Role只有可选字段,让我像往常一样使用多对多关系(创建默认空字段),或者
  • Django admin允许我将Speakers添加到新创建的事件中,并且对于每个这样的Speaker,它会询问其他信息(Role.role的值)。

第二种可能性比第一种更有用,也更普遍。仍然Django管理员没有这两个:而是扬声器字段从事件中删除。

  

有没有办法让Django管理员按上述方式行事?

1 个答案:

答案 0 :(得分:0)

解决方案在于this answer。简而言之,应该使用InlineModelAdmin,如文档here所示。这完全实现了我描述的第二种行为。