【问题标题】:Filter ManyToMany over ManyToMany using queryset in django使用 django 中的 queryset 过滤 ManyToMany 上的 ManyToMany
【发布时间】:2015-10-22 18:08:25
【问题描述】:

我在使用 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 时该怎么做。有什么帮助吗?

【问题讨论】:

    标签: django django-models django-queryset django-orm


    【解决方案1】:

    像这样改变你的查询集:

    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
        )
    

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2014-06-20
      • 2011-05-10
      • 1970-01-01
      相关资源
      最近更新 更多