我在使用基本的搜索器应用程序时遇到了问题-它即将在数据库中搜索要在搜索栏中输入的值。我试图从互联网上获取解决方案,但是没有解决方案或很难找到解决方案。我一直在寻找一些东西,但它们都无法在我的应用中正常工作。 主要问题是:ValueError:不能将None用作查询值。我知道此查询为空,但我不知道为什么以及如何。 因此,这是我的base.html表单代码:
import
views.py:
<form type="GET" action="" accept-charset="utf-8">
<input type="text" name="query" placeholder="Search..."/>
<input type="submit" value='Search' />
</form>
urls.py:
class FilmListView(ListView):
model = Film
template_name = 'searcher/home.html'
context_object_name = 'films'
ordering = ['-date_posted']
paginate_by = 3
query = request.GET.get('query')
queryset_list = Film.objects.filter(title__icontains=query)
此应用程序中的另一件事是我必须导入请求才能使其正常运行。
如果您有任何解决方案或任何提示,请提供帮助。 THX为答案。
答案 0 :(得分:1)
该代码不会给您该错误。这会给您一个NameError,因为request
不是在类级别定义的。
您需要将其放入get_queryset
方法中,并且仅在提供值的情况下进行过滤。
class FilmListView(ListView):
...
def get_queryset(self):
qs = super().get_queryset()
query = self.request.GET.get('query')
if query:
qs = qs.filter(title__icontains=query)
return qs
答案 1 :(得分:0)
默认情况下,字典上的get方法将返回None,因此当某人在不使用表单的情况下转到页面时,查询值将为None尝试更改以下行:
query = request.GET.get('query')
到
query = request.GET.get('query', ‘’)
最好像这样在视图的get_queryset方法中更改查询
def get_queryset(self):
query = self.request.GET.get('query')
if query:
queryset = Film.objects.filter(title__icontains=query)
else:
queryset = Film.objects.all()
return queryset