我建立我路过得到一个查询集过滤器的动态过滤器上的Django的queryset过滤器:空列表
for k, v in request.GET.iteritems():
kwargs[str(k)] = str(v)
students = models.Student.objects.filter(**kwargs)
,它的工作,几乎所有我在它抛出的疑问。但是,我有一个与多元关系相关的模型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 == []
最后一个版本是我希望实际工作的。我相信我能得到这个通过修改上面的代码类似
if request.GET['something']:
students = models.Student.objects.exclude(groups__isnull=False)
else:
students = models.Student.objects.filter(**kwargs)
所以我想问题就变成了工作,我怎么能创建使用.filter
students = models.Student.objects.exclude(groups__isnull=False)
()?
我接受的第一反应,因为它是正确的,但是这并没有解决我的错误。 ** kwargs中存在扩展问题,并且我在此打开了一个新问题(http://stackoverflow.com/questions/5762328/django-dynamic-filter-failure)。谢谢 – selfsimilar 2011-04-23 05:14:19
谢谢@jammon和@DTing。真正的问题是试图在GET中传递布尔值。它是通过** kwargs作为字符串“真”,而不是“真”。当传递给'models.Student.objects.exclude(** kwargs)'时,它会起作用,因为'True'的计算结果为'True'。但是这个结合将不起作用,因为'False'在传递给'models.Students.objects.filter(** kwargs)'时仍然评估为“True”。因此我的困惑。 – selfsimilar 2011-04-25 05:16:56