我是django的新手,需要在django-react项目中创建搜索栏。需要从输入中获取数据,将其发送到django,并作为响应接收新的查询集。我正在使用axios和django-rest框架。从React“搜索”组件的输入字段中,我打算通过axios发送数据,例如:
handelChange = (e) => {
this.setState({ query: this.search.value},
() => {
this.getQuery()
})
}
render() {
return (
<form>
<input
placeholder="Search..."
name="q"
ref={input => this.search = input}
method="get"
onChange={this.handelChange}
/>
</form>
React中的输入:
class SearchPost(generics.ListCreateAPIView):
serializer_class = ModelSerializer
def search(request):
query = request.GET.get("q")
if query:
queryset = Model.objects.filter(
Q(category_icontains=query)|
Q(title_icontains=query)|
Q(creator_icontains=query)
).distinct()
我在Django中的view.py是:
path('api/SearchPost', views.SearchPost.as_view()),
在urls.py中:
{{1}}
但是,作为回应,我什么也没收到。 我要问自己的事情是: 1)我是否将axios请求发送到正确的端点? 2)我应该在view.py“ SearchPost”类中返回一些内容吗?
欢迎任何建议,谢谢。
答案 0 :(得分:0)
如下更改您的API
class SearchPost(generics.ListAPIView):
serializer_class = ModelSerializer //please change name of serializer
model = serializer_class.Meta.model
paginate_by = 100
def get_queryset(self):
query = self.kwargs.get('q')
if query:
return self.model.objects.filter(
Q(category_icontains=query)|
Q(title_icontains=query)|
Q(creator_icontains=query)
).distinct()
return None
我们使用ListAPIView,因为我们仅在搜索端点中列出。