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

时间:2019-01-21 22:20:50

标签: python django

我在使用基本的搜索器应用程序时遇到了问题-它即将在数据库中搜索要在搜索栏中输入的值。我试图从互联网上获取解决方案,但是没有解决方案或很难找到解决方案。我一直在寻找一些东西,但它们都无法在我的应用中正常工作。 主要问题是: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为答案。

2 个答案:

答案 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