Django问题 - 无法从前面获取值 - 查询值为none

问题描述 投票:0回答:2

我有一个基本的搜索器应用程序的问题 - 它将在数据库中搜索我将在搜索栏中录制的值。我试图从互联网上获得解决方案,但没有或很难找到一些东西。我正在寻找一些啧啧,但它们都不适用于我的应用程序。主要问题是: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的答案。

python django
2个回答
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

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
© www.soinside.com 2019 - 2024. All rights reserved.