如何使用Django创建三连接表 [英] How to create a triple-join table with Django

查看:159
本文介绍了如何使用Django创建三连接表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



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




  • 用户,角色和事件是模型。

  • 用户有很多角色,角色许多用户。 (ManyToMany)

  • 事件有很多用户和用户许多事件。 (ManyToMany)

  • 但对于任何给定的事件,任何用户可能只有一个角色。



如何在模型中表示?

解决方案

zacherates 写道:


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


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



示例:

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

类事件(models.Model):
name = models.CharField(max_length = 128)
members = models.ManyToManyField(User,through ='Role')

def __unicode __(self):
return self.name

class角色(models.Model):
person = models.ForeignKey(User)
group = models.ForeignKey(Event)
date_joined = models.DateField()
invite_reason = models.CharField(max_length = 64)


Using Django's built in models, how would one create a triple-join between three models.

For example:

  • Users, Roles, and Events are the models.
  • Users have many Roles, and Roles many Users. (ManyToMany)
  • Events have many Users, and Users many Events. (ManyToMany)
  • But for any given Event, any User may have only one Role.

How can this be represented in the model?

解决方案

zacherates writes:

I'd model Role as an association class between Users and Roles (...)

I'd also reccomed this solution, but you can also make use of some syntactical sugar provided by Django: ManyToMany relation with extra fields.

Example:

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)

这篇关于如何使用Django创建三连接表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆