我是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本身的特定概念缺乏了解
答案 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]