显示此错误的django搜索过滤器中的“无法使用None作为查询值”

o0lyfsai  于 2023-01-03  发布在  Go
关注(0)|答案(5)|浏览(193)

我正在尝试在django中实现搜索栏,如果搜索项出现在数据库中,我会在网页中显示。但是它的显示查询返回无值。我是django的新手。请帮助我
views.py

def search(request):
    if request.method == 'GET':
        form = LocForm(request.POST)
        if form.is_valid():
            search_query = request.GET.get('search_box', None)
            print(search_query)
            FirstLoc_list_obj = FirstLoc_List.objects.filter(address__icontains=search_query)
            SecondLoc_list_obj= SecondLoc_list.objects.filter(address__icontains=search_query)
            if (len(FirstLoc_list_obj) or len(SecondLoc_list_obj)) > 0:
                print("Locaton Found")
                return render(request, 'location_test.html', {'FirstLoc_list_obj': FirstLoc_list_obj, 'SecondLoc_list_obj': SecondLoc_list_obj})
            else:
                print("Location Not Found")
                return render(request, 'location_test.html', {})
            return render(request, 'location_test.html', {})
        return render(request, 'location_test.html', {})

urls.py

urlpatterns = [
    path('search/', views.search, name="search"),
]

location_test.html

<form type="get" action="#" style="margin: 0">
    {% csrf_token %}
<label>Locations:-</label>
    <input  id="search_box" type="text" name="search_box"  placeholder="Search..." >
    <button id="search_submit" type="submit" >Submit</button>
</form>
vwhgwdsa

vwhgwdsa1#

正如我在评论中所说,您不能使用icontainsNone值。

def search(request):
    if request.method == 'GET':
        form = LocForm(request.POST)
        if form.is_valid():
            search_query = request.GET.get('search_box', None)
            if search_query:
                FirstLoc_list_obj = FirstLoc_List.objects.filter(address__icontains=search_query)
                SecondLoc_list_obj= SecondLoc_list.objects.filter(address__icontains=search_query)
fumotvh3

fumotvh32#

如果为None,则可以使用空字符串,例如:

search_query = request.GET.get('search_box')

if not search_query :
    search_query = ""
y4ekin9u

y4ekin9u3#

这是唯一讨论这个错误的地方。所以这不是这个问题的完美答案,但我希望它对其他人有用。
我没有一个表单,只有一个URL需要检查,但是当一个用户以我不希望的方式进入这个页面时,它应该不会引发错误。所以我把所有的东西都放在了一个if语句中。

if request.GET.get("q") != None:
        query = request.GET.get("q")
        context["array"] = Database.objects.filter(DB__item__contains=query)
oxcyiej7

oxcyiej74#

def search(request):
    if request.method == 'GET':
        form = LocForm(request.POST)
        if form.is_valid():
            enter code heresearch_query = request.GET.get('search_box', '')
            FirstLoc_list_obj = FirstLoc_List.objects.filter(address__icontains=search_query)
busg9geu

busg9geu5#

如果您愿意,可以将其放在一行中:

cat_list = ModelName.objects.filter(name__icontains="" if name is None else name)

相关问题