【发布时间】:2020-01-16 01:03:20
【问题描述】:
我最近正在使用 Django-rest-framework 构建一个 Web 应用后端。
我正在尝试构建一个搜索功能,用户将在其中输入位置名称并显示包含该名称的所有结果。
我正在使用 icontains 和 Q。我的测试搜索视图如下:
class test_search(APIView):
def post(self, request, *args, **kwargs):
serializer_class = customer_location
title = json.loads(request.body).get('title')
queryset = Customers.objects.filter(Q(title__icontains=title))
data = serializers.serialize('json', queryset)
return HttpResponse(data, content_type='application/json')
我可以看到要求我输入位置名称的页面,但是当我输入名称并单击 POST 时,没有任何反应。我想显示与位置名称匹配的 Customer 模型 customer_location 序列化程序中存在的值。
我正在使用 icontains,因为我想返回包含它的所有值。
我做错了什么?如何显示匹配结果?
当我尝试这个时 -
class test_search(APIView):
def get(self, request, *args, **kwargs):
serializer_class = customer_location
title = request.query_params.get('title')
queryset = Customers.objects.filter(Q(title__icontains=title))
data = serializers.serialize('json', queryset)
return Response(data, content_type='application/json')
我收到此错误 -
ValueError at /test_search/
Cannot use None as a query value
Request Method: GET
Request URL: http://127.0.0.1:8000/test_search/
Django Version: 2.2.3
Exception Type: ValueError
Exception Value:
Cannot use None as a query value
Exception Location: /usr/local/lib/python3.7/site-packages/django/db/models/sql/query.py in build_lookup, line 1121
Python Executable: /usr/local/opt/python/bin/python3.7
当我签入 Postman 时,它会显示结果。为什么不显示 api endpoint/url 的结果?
【问题讨论】:
-
您提供的 sn-p 似乎不完整。您既不会从 post 方法返回响应,也不会调用 super。序列化程序类似乎未使用。请提供完整的例子。
-
我编辑了代码。我对 Django 很陌生。我可以在邮递员中查看结果,但 api 端点没有返回相同的结果。
-
这里不需要Q对象,可以省略。仍然没有初始化 serializer_class。尝试从 DRF 返回常规响应而不将数据转换为 str。
-
我删除了 Q 和 str 转换。我仍然面临同样的问题。
-
在 api 端点中看不到结果但在 Postman 中看到结果到底是什么意思?请更新您的代码,使其成为有效的 sn-p。
标签: django django-rest-framework django-filter