如何使用Django创建三重连接表

phl*_*opy 9 python django model-view-controller model

使用Django的内置模型,如何在三个模型之间创建三重连接.

例如:

  • 用户,角色和事件是模型.
  • 用户有很多角色,而且角色很多用户.(多对多)
  • 事件有很多用户,而用户有很多事件.(多对多)
  • 但对于任何给定的事件,任何用户可能只有一个角色.

如何在模型中表示?

zub*_*ber 8

zacherates写道:

我将角色建模为用户和角色之间的关联类(...)

我也推荐这个解决方案,但你也可以使用Django提供的一些语法糖:ManyToMany与额外字段的关系.

例:

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

class Event(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(User, through='Role')

    def __unicode__(self):
        return self.name

class Role(models.Model):
    person = models.ForeignKey(User)
    group = models.ForeignKey(Event)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Run Code Online (Sandbox Code Playgroud)