我的数据库结构如下所示:
Person
name
Group
name
PersonGroup
id
person_id
group_id
InvitedPersonGroup
person_group_id
invited_reason
Person和Group通过PersonGroup有多对多的关系,但有时这种关系将是唯一的,因为那些人有一个邀请,关系应该是通过InvitedPersonGroup。
如何动态使用through
?
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person,
through='PersonGroup or InvitedPersonGroup')
def __unicode__(self):
return self.name
答案 0 :(得分:1)
对于您的使用案例,可以将invited_reason
与null
保持一致,以保持模型简单。
对于非常复杂的实际情况,请记住,即使没有'通过'也可以手动创建多对多关系而无需使用" ManyToManyField"字段,包含实体之间的许多类型的关系:
class Person(models.Model):
pass
class Group(models.Model):
pass
class Membership(models.Model): # "PersonGroup"
person = models.ForeignKey(Person, related_name='memberships')
group = models.ForeignKey(Group, related_name='memberships')
# other fields...
class Meta:
unique_together = (
('person', 'group'), # optional
)
class Invitation(models.Model): # "InvitedPersonGroup"
person = models.ForeignKey(Person, related_name='invitations')
group = models.ForeignKey(Group, related_name='invitations')
# other fields...
class Meta:
unique_together = (
('person', 'group'), # optional
)
这意味着可以根据需要定制任何关系。