2

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

4

1 回答 1

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]
于 2013-07-10T18:41:24.580 回答