我正在构建一个 django rest api 作为 android 应用程序的后端。我正在 android 客户端中实现一个搜索功能,它应该传递查询字符串;这可以是名字、姓氏、两者或电子邮件,发送到后端以在用户模型中搜索任何匹配的实例,并将它们返回以显示在客户端的回收站 View 中。
我的 url 在客户端构建的方式如下所示:
@GET("users/search/{name}")
Call<List<User>> searchUsers(@Path("name") String name);
这个端点的 urls.py 看起来像这个服务器端:
url(r'^search/(?P<username>.+)/$', user_views.UserSearchListView.as_view(), name="user_search"),
映射到 is url 的 View 如下所示:
class UserSearchListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ('firstName', 'lastName', 'email')
当我用 postman 测试我的 API 时,无论我在 url 中输入什么字符串,都会返回所有用户,而不仅仅是相关用户。如何解决此问题,以便只返回名字、姓氏或电子邮件匹配的用户?
最佳答案
您似乎没有使用 filters.SearchFilter
正确。
# views.py
class UserSearchListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ('firstName', 'lastName', 'email')
# urls.py
url(r'^search/$', user_views.UserSearchListView.as_view(), name="user_search"),
然后要请求对用户进行搜索,您需要请求 url:
/users/search/?search=@example.com
这将返回其名字、姓氏或电子邮件包含字符串 "@example.com"
的所有用户。查看 SearchFilter 文档,了解有关其工作原理以及应如何自定义搜索和过滤的更多信息。 http://www.django-rest-framework.org/api-guide/filtering/#searchfilter
关于android - 如何返回与 url django rest 中具有相同名字或姓氏的所有用户实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336880/