Django与其他领域的ManyToMany关系

时间:2010-12-14 19:15:58

标签: database django model many-to-many

我想在其中存储一些额外的信息,自动创建,ManyToMany join-table。我怎么在Django那样做?

在我的情况下,我有两个表:“员工”和“项目”。我想要存储的是每个员工每个项目每小时工作收到多少,因为这些值不相同。那么,我该怎么做呢?

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

1 个答案:

答案 0 :(得分:85)

以下是您要实现的目标示例:

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)