在 Django 中使用查询集过滤 ManyToMany over ManyToMany

Filter ManyToMany over ManyToMany using queryset in django

我有一些 Django 查询集的问题,我自己无法解决。 我想过滤掉用户不应该看到的任务。问题是用户组和类别都是ManyToManyField,我不知道如何比较它们。

我的模特:

from django.contrib.auth.models import Group

class Task(models.Model):
    # ... 
    categories = models.ManyToManyField(Category, blank=True)
    # ...

class Category(models.Model):
    # ...
    organizers_group = models.ForeignKey(Group, null=True)
    # ...

如果任务只能属于一个类别,我会写类似这样的内容:

def get_queryset(self, request):
    return queryset = super(TaskAdmin, self).get_queryset(request).filter(
        categories__in=request.user.groups
    )

但是我不知道在使用 ManyToManyFields 时该做什么。有帮助吗?

像这样更改您的查询集:

def get_queryset(self, request):
    user_grps = request.user.groups.all()
    cat_lst = Category.objects.filter(organizers_group__in=user_grps)

    return queryset = super(TaskAdmin, self).get_queryset(request).filter(
    categories__in=cat_lst
    )