Django按多个过滤对象,只返回匹配的多个关系

2024-04-28 21:52:27 发布

您现在位置:Python中文网/ 问答频道 /正文

class Category(models.Model):
    ....

class User(models.Model):
    .....
    category = models.ForeignKey(
        Category, on_delete=models.SET_NULL, null=True)
    
    group = models.ManyToManyField(
        Group, through="UserGroup")
    

class Group(models.Model:
    ....


class UserGroup(models.Model):
    ......
    user = models.ForeignKey(
        User, on_delete=models.CASCADE)
    Group = models.ForeignKey(
        Group, on_delete=models.CASCADE)
    .....

我希望能够返回包含具有特定类别的用户的组 我可以用

queryset = Group.objects.all()
category = Category.objects.get(pk=category_id)
queryset = queryset.filter(user__category_id=category_id)

但是,即使User.category不等于给定的category_id,这仍然会返回与该组关联的所有用户。如何将那些与该组相关的用户排除在外,从而只返回具有正确类别的用户

所以如果有 用户1&;user2的category_id为1,user3的category_id为2,则返回的组中只有user1&;来自序列化程序的user2数据


1条回答
网友
1楼 · 发布于 2024-04-28 21:52:27

啊,使用预回迁相关&;Prefetch()将很好地处理此问题

queryset = Group.objects.all()
users = User.objects.filter(category_id=category_id)
queryset.filter(user__category_id=category_id).prefetch_related(Prefetch('user_set', queryset=users))

相关问题 更多 >