【问题标题】:Optional additional data on ManyToManyFieldManyToManyField 上的可选附加数据
【发布时间】: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


    【解决方案1】:

    解决方案在于this answer。简而言之,应该使用InlineModelAdmin,如here 所记录的那样。这正好实现了我描述的第二种行为。

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 2020-11-27
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2011-06-01
      • 2012-02-03
      相关资源
      最近更新 更多