使用django过滤器

时间:2013-07-10 18:33:35

标签: python django

我是django的新手,所以这一定是一个愚蠢的问题,但我正在通过官方文档教程(关于一个有民意调查和选择的网站),我想过滤掉没有选择的民意调查,我设法用ListView的queryset参数中的过滤器来做到这一点:

queryset=Poll.objects.filter(pub_date__lte=timezone.now).filter(id__in=Choice.objects.all).order_by('-pub_date')[:5]

这确实过滤了查询,问题是如果我添加一个选项到没有任何管理网站选择的投票,这将不会反映在网站上,直到我重新启动服务器或我更改项目中的一些代码,即使我将一个可调用对象作为参数传递给过滤器(与同一行中的前一个过滤器相同),我在其余的文档中搜索,我也查看了最终的django的指南,但我什么都没找到,这可以帮助我,所以我真的不知道代码是否有问题,或者我对django或python本身的特定概念缺乏了解

1 个答案:

答案 0 :(得分:1)

您当前的查询不正确,因为您正在过滤轮询ID,如果数据库中存在相同ID的选择对象,则这是不准确的。

要过滤掉没有选择的民意调查,您需要

queryset=Poll.objects.filter(choice__isnull=False).order_by('-pub_date').distinct()[:5] #Get only polls with a choice. 

现在,之前的每个民意调查都可以像这样过滤:

queryset = Poll.objects.filter(choice__isnull=False, pub_date__lte=timezone.now()).order_by('-pub_date').distinct()[:5]