如何在Django中进行此搜索查询?

2024-09-25 00:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

当我填写searchfield中的书籍和章节时,我的搜索查询工作正常。但是当我只填写这本书的时候,我就错了。有人能帮我吗

请求方法:GET 请求URL:http://127.0.0.1:8000/search/?q=genesis Django版本:3.0 异常类型:ValueError 异常值:
没有足够的值进行解包(预期值为2,实际值为1)

def get_queryset(self): 
    query = self.request.GET.get('q')
    book, chapter = query.split()

    object_list = Verse.objects.filter(
        Q(book__icontains=book) & Q(
            chapter__exact=chapter))

    return object_list

Tags: 方法selfhttpurlsearchgetobjectquery
1条回答
网友
1楼 · 发布于 2024-09-25 00:30:08

这不起作用,因为只有一个单词,因此query.split()将返回一个单例列表

def get_queryset(self): 
    query = self.request.GET.get('q')
    object_list = Verse.objects.all()
    if query:
        query = query.split()
        object_list = object_list.filter(book__icontains=query[0])
        if len(query) > 1:
            object_list = object_list.filter(chapter=query[1])
    return object_list

不过,我不认为用空格分开是个好主意。如果书名包含空格,那么.split()将拆分书名,您将把第二个单词作为chapter。您可能需要在一个标识符上拆分,比如冒号(:

相关问题 更多 >