我有一个基本的搜索器应用程序的问题 - 它将在数据库中搜索我将在搜索栏中录制的值。我试图从互联网上获得解决方案,但没有或很难找到一些东西。我正在寻找一些啧啧,但它们都不适用于我的应用程序。主要问题是:ValueError:不能使用None作为查询值。我知道这个查询没有,但我不知道为什么以及如何。所以,这是我的base.html表单代码:
<form type="GET" action="" accept-charset="utf-8">
<input type="text" name="query" placeholder="Search..."/>
<input type="submit" value='Search' />
</form>
views.朋友:
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)
URLs.朋友:
urlpatterns = [
path('', FilmListView.as_view(), name='search-home'),
path('films/', SearchedFilmListView.as_view(), name='searched-films'),
path('user/<str:username>', UserFilmListView.as_view(), name='user-films'),
path('film/<int:pk>/', FilmDetailView.as_view(), name='film-detail'),
path('film/new/', FilmCreateView.as_view(), name='film-create'),
path('film/<int:pk>/update/', FilmUpdateView.as_view(), name='film-update'),
path('film/<int:pk>/delete/', FilmDeleteView.as_view(), name='film-delete'),
path('about/', views.about, name='search-about'),
]
这个应用程序的另一件事是我必须导入请求才能使其工作。
如果你有任何解决方案或任何提示只是帮助。 THX的答案。
默认情况下,字典上的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
该代码不会给你这个错误。它会给你一个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