from django.db import models
class Person(models.Model):
name = models.CharField(max_length=200)
groups = models.ManyToManyField('Group', through='GroupMember', related_name='people')
class Meta:
ordering = ['name']
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=200)
class Meta:
ordering = ['name']
def __unicode__(self):
return self.name
class GroupMember(models.Model):
person = models.ForeignKey(Person, related_name='membership')
group = models.ForeignKey(Group, related_name='membership')
type = models.CharField(max_length=100)
def __unicode__(self):
return "%s is in group %s (as %s)" % (self.person, self.group, self.type)
1 回答
我认为您需要多对多模型中的
"through"
属性:这是我从这个链接得到的一个简单例子:
https://gist.github.com/jacobian/827937
你可以在这里找到更多相关信息:
https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ManyToManyField.through
在这种情况下,该示例的人员具有多对多的组 . 但是我们需要在关系上添加一些额外的字段,因此我们创建了一个名为Group Member的直通模型 . 请注意,中间模型GroupMember具有Person和Group的外键,以及您可能需要的其他一些字段 .
当您编写这样的模型时,Django的ORM会处理约束 .