[英]Why is my Django rest framework api returning an empty list?
您好,我正在研究 Django Rest 框架 api,其中一個視圖返回一個空列表。
這是我的觀點:
@api_view(['GET'])
def post_search(request):
form = SearchForm()
query = None
results = []
if request.method == 'GET':
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
results = Paper.objects.annotate(
search=SearchVector('abstract', 'title'),).filter(search=query)
serializer = PaperSerializer(results, many=True)
return Response(serializer.data)
這是表格:
class SearchForm(forms.Form):
query = forms.CharField()
這是我的網址:
path('search/', views.post_search, name='post_search'),
所以在 shell 上我跑了:
Paper.objects.annotate(search=SearchVector('abstract', 'title'),).filter(search='Type')
我得到了我想要的結果但是什么時候這樣做:
import requests
url = 'http://127.0.0.1:8000/api/search/?search=Type'
re = requests.get(url)
re.json # -> []
# or
import json
json.loads(re) # ->raise TypeError(f'the JSON object must be str, # bytes or bytearray, '
#TypeError: the JSON object must be str, bytes or bytearray, not Response
任何幫助將不勝感激; 謝謝
您的參數是search
而不是 ,所以您檢查query
if 'search' in request.GET
。 但是你讓事情變得過於復雜。 您可以使用:
class SearchForm(forms.Form):
search = forms.CharField()
@api_view(['GET'])
def post_search(request):
form = SearchForm(request.GET)
if form.is_valid():
results = Paper.objects.annotate(
search=SearchVector('abstract', 'title')
).filter(search=form.cleaned_data['search'])
serializer = PaperSerializer(results, many=True)
return Response(serializer.data)
return Response({'error': 'invalid search'}, status=400)
問題是形式。
我的表格是:
class SearchForm(forms.Form):
query = forms.CharField()
這里query
的字段與 url 中的search
不匹配。所以我所做的就是將表單更改為:
class SearchForm(forms.Form):
search = forms.CharField()
經驗教訓:表單的字段需要與url中的關鍵字匹配。:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.