Django Queryset过滤空列表

sel*_*lar 2 django many-to-many filter

我正在构建动态过滤器,我通过GET传递给查询集过滤器:

for k, v in request.GET.iteritems():
    kwargs[str(k)] = str(v)
students = models.Student.objects.filter( **kwargs )
Run Code Online (Sandbox Code Playgroud)

它正在为我投掷的几乎所有查询工作.但是,我有一个相关的模型,有很多关系,Group.因此,学生可以成为许多团体的成员.我可以使用以下内容过滤属于特定组的学生:'groups__in='+str(group.id)

例如--//example.com/students/?groups__in=1

但我无法弄清楚如何过滤不属于任何群体的学生.我试过以下但没有成功:

groups__in=None # students == []
groups__exact=None # students == []
groups__iexact=None # FAIL not that I really expected this to work
groups__isnull=True # students == []
Run Code Online (Sandbox Code Playgroud)

最后一个版本是我希望实际工作的.我确信我可以通过修改顶部代码来实现这一点

if request.GET['something']:
    students = models.Student.objects.exclude(groups__isnull=False)
else:
    students = models.Student.objects.filter( **kwargs )
Run Code Online (Sandbox Code Playgroud)

所以我想问题就变成了,我怎么能创造出来

students = models.Student.objects.exclude(groups__isnull=False)
Run Code Online (Sandbox Code Playgroud)

使用.filter()?

Sky*_*and 5

也许我不明白这个问题.但我明白了:

list(MyMod.objects.exclude(foo__isnull=False)
) == list(MyMod.objects.filter(foo__isnull=True))
Run Code Online (Sandbox Code Playgroud)

  • 没有评论,投票和接受的答案......我可以获得这个或某个徽章吗? (7认同)