gpt4 book ai didi

django - 如何通过 Django 中的 prefetch_related 过滤具有更多条件的反向外键

转载 作者:行者123 更新时间:2023-12-04 14:46:11 24 4
gpt4 key购买 nike

我创建了两个模型

class GroupModel(models.Model):
group_name = models.CharField(max_length=2, null=False, default="A")

class MemberModel(models.Model):
name = models.CharField(max_length=8, null=False, default="")
group = models.ForeignKey(
to=GroupModel,
on_delete=models.CASCADE,
related_name="members",
db_column="member",
)
isActive = models.BooleanField(null=False, default=False)
country = models.CharField(max_length=8, null=False, default="CN")

我跑
queryset = GroupModel.objects.prefetch_related(
Prefetch("members", MemberModel.objects.filter(isActive=False))
).distinct()
我得到了该字段的所有组 isAcitveFlase在成员模型中。
现在,我想获取字段 isActive 的所有组是 FalsecountryCN在成员模型中。
我跑
queryset = GroupModel.objects.prefetch_related(
Prefetch("members", MemberModel.objects.filter(isActive=False, country="CN"))
).distinct()
但我得到的结果是
[{'group_name': 'GROUP_A', 'id': 1, 'members': []},
{'group_name': 'GROUP_B', 'id': 2, 'members': []},
{'group_name': 'GROUP_C',
'id': 3,
'members': [{'country': 'CN', 'isActive': False, 'name': 'ENWK'},
{'country': 'CN', 'isActive': False, 'name': 'LKMP'}]}]
我想得到
[{'group_name': 'GROUP_C',
'id': 3,
'members': [{'country': 'CN', 'isActive': False, 'name': 'ENWK'},
{'country': 'CN', 'isActive': False, 'name': 'LKMP'}]}]
我能做什么?

最佳答案

您应该过滤 GroupModel同样,所以:

queryset = GroupModel.objects.prefetch_related(
Prefetch("members", MemberModel.objects.filter(isActive=False, country='CN'))
).filter(
members__isActive=False, members__country='CN'
).distinct()

关于django - 如何通过 Django 中的 prefetch_related 过滤具有更多条件的反向外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70000069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com