如何使用Django创建三连接表 [英] How to create a triple-join table with Django
本文介绍了如何使用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屋!
查看全文