在 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
)
我有一些 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
)