Django多对多关系

编程入门 行业动态 更新时间:2024-10-27 19:27:52
本文介绍了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多对多关系

本文发布于:2023-10-23 13:30:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1520955.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:关系   Django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!