我是 django 的新手,所以这一定是个愚蠢的问题,但我正在通过官方文档教程(关于一个有民意调查和选择的网站的教程)我想过滤掉没有选择的民意调查,我设法通过 ListView 的查询集参数中的过滤器来做到这一点:
queryset=Poll.objects.filter(pub_date__lte=timezone.now).filter(id__in=Choice.objects.all).order_by('-pub_date')[:5]
这确实过滤了查询,问题是如果我在管理站点没有任何选择的民意调查中添加一个选择,这将不会反射(reflect)在站点上,直到我重新启动服务器或我更改项目中的一些代码,即使我将可调用对象作为参数传递给过滤器(与同一行中的前一个过滤器相同),我在文档的其余部分进行了搜索,并且还查看了最终版本django 指南,但我什么也没找到,这对我有帮助,所以我真的不知道代码是否有问题,或者我对 django 或 python 本身的特定概念缺乏一些理解
请您参考如下方法:
您当前的查询不正确,因为如果数据库中存在具有相同 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]
