在 Django 中,如何生成包含反向多对多关系结果的查询集?

问题描述 投票:0回答:1

我有以下模型布局

class Group(models.Model):
    group_name = models.CharField(max_length=100, default="New Group")
    group_created_date = models.DateField(default=date.today) 

class GroupMember(models.Model):
    groups_joined = models.ManyToManyField(Group)
    email = models.EmailField(max_length=100) 
    name = models.CharField(max_length=100)

我正在尝试在基于类的视图中返回给定组的所有组成员的查询集。 到目前为止我的尝试:

    def get_queryset(self):    
        groupid = self.kwargs['groupid']
        qs = Group.objects.filter(groupmember__groups_joined__id=groupid).order_by('-id')
        return qs

但是,这会产生错误。

Related Field got invalid lookup: groups_joined

groups_joined
是与
Group
表有关系的列,我似乎使用双下划线以正确的方式访问它。

我只想返回

groups_joined
中具有与当前组匹配且 ID 匹配
groupid
的条目的组成员。

格式化查询以实现此目的的正确方法是什么?

django many-to-many django-queryset django-orm manytomanyfield
1个回答
0
投票
from django.db import models

class Group(models.Model):
    group_name = models.CharField(max_length=100, default="New Group")
    group_created_date = models.DateField(auto_now=True)

class GroupMember(models.Model):
    groups_joined = models.ManyToManyField(
         Group, related_name='members'
         )
    email = models.EmailField(max_length=100)
    name = models.CharField(max_length=100)

我对你们的模型做了一些调整。添加了 related_name 属性,用于定义从相关模型回到定义该关系的模型的反向关系的名称。

这是您访问群组成员的方式。

my_group = Group.objects.get(pk=your_group_id)
group_members = my_group.members.all()
© www.soinside.com 2019 - 2024. All rights reserved.