本文介绍了Django多对多关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个用户模型和一个组模型。
I have a user model and a group model.
from django.contrib.auth.models import AbstractUser
class Group(models.Model):
name = models.CharField(max_length=200)
class User(AbstractUser):
name = models.CharField(max_length=200)
group = models.ManyToManyField('Group')
我有用户可以是管理员或仅是组成员的方案。网上论坛可以有很多管理员,也可以有很多成员。
如何在Django中定义这样的关系并查询诸如组管理员,组成员,用户为管理员的组,用户为管理员的组之类的内容成员
I have a scenario in which a user can be an admin or just a member of a group. A group can have many admins as well as it can have many members.How can I define such a relation in Django and query things like "Admins of a group", "members of group", "groups where a user is an admin", "groups where a user is a member"
推荐答案
您应使用 ManyToMany 中介模型,并通过 '参数。
You should use ManyToMany intermediary model using 'through' argument.
class Group(models.Model):
name = models.CharField(max_length=200)
members = models.ManyToManyField(User, through='GroupMembership', related_name='groups')
class GroupMembership(models.Model):
ROLE_CHOICE = (
('1', 'Admin'),
('2', 'Member'),
)
user = models.ForeignKey(User, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
role = models.CharField(choices=ROLE_CHOICE, default='2', max_length=1)
组中的所有成员
group.members.all()
组的所有管理员
group.members.filter(groupmembership__role=1)
所有以'john'为管理员的组
All groups where 'john' is admin
Group.objects.filter(members__name='john', groupmembership__role=1)
用户为admin的组
user.groups.filter(groupmembership__role=1)
这篇关于Django多对多关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!