【发布时间】:2011-08-25 14:31:57
【问题描述】:
我在 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 执行一些自动操作。特别烦人的是,在后台创建 Event 时,Speaker 列表不可用。
我意识到通常 Django 不知道在 Role.role 字段中输入什么。但这是可选的 (blank=True)。我会期待的
- 要么 Django 识别出 Role 只有可选字段,并让我像往常一样使用多对多关系(创建具有空默认值的字段),要么
- Django 管理员允许我将演讲者添加到新创建的事件中,并且对于每个这样的演讲者,它都会要求提供附加信息(
Role.role的值)。
第二种可能比第一种更有用,也更通用。 Django 管理员仍然没有执行这两个操作:而是从事件中删除了扬声器字段。
有没有办法让 Django 管理员的行为如上所述?
【问题讨论】:
标签: django django-admin many-to-many