【问题标题】:Django's ManyToMany Relationship with Additional FieldsDjango 与附加字段的多对多关系
【发布时间】:2011-05-25 11:57:57
【问题描述】:

我想在自动创建的 ManyToMany 连接表中存储一些附加信息。我将如何在 Django 中做到这一点?

就我而言,我有两个表:“Employees”和“Projects”。我要存储的是每个员工在每个项目中每小时工作的收入,因为这些值不一样。那么,我该怎么做呢?

我想到的是,代替方法“ManyToManyField”,显式创建第三个类/表来存储这些新信息并使用“ForeignKey”方法设置其与“Employees”和“Projects”的关系。我很确定它会起作用,但这是最好的方法吗?

【问题讨论】:

  • @ravz 为什么不应该把那个作为这个的骗子关闭呢?
  • @TylerH 这是一篇较旧的帖子。然而,这两个问题都有答案,我建议合并这些。

标签: database django model many-to-many


【解决方案1】:

这是您想要实现的目标的示例:

http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

万一链接断开:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)

【讨论】:

  • 如何访问模板中的 date_joined?Group.date_joined 不起作用。
  • 组加入日期不起作用,因为组本身不加入任何东西。相反,您可以获得它的成员并获得他们的加入时间。对于 group.members.all() 中的成员:
  • 上述方法如何使用 group.members.add()?
  • @Dejell 提到的链接中的代码示例可能会对您有所帮助。
  • 您可以使用 _set 访问粘合模型对象。例如 group.membership_set.all() 。请注意,您始终将整个模型名称小写以查找此属性,然后添加 _set。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 2021-10-14
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
相关资源
最近更新 更多