如何返回与url Django rest中同名或姓相同的所有用户实例?

2024-10-02 06:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个django restapi作为android应用程序的后端。我在android客户机中实现了一个搜索功能,它应该将查询字符串传递给后端,可以是名字、姓氏,也可以是电子邮件,以便在用户模型中搜索任何匹配的实例,并返回它们以显示在客户端的回收器视图中。你知道吗

在客户端构建url的方式如下所示:

@GET("users/search/{name}")
Call<List<User>> searchUsers(@Path("name") String name);

那个网址.py对于此终结点,它类似于此服务器端:

url(r'^search/(?P<username>.+)/$', user_views.UserSearchListView.as_view(), name="user_search"),

映射到is url的视图如下所示:

class UserSearchListView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = (filters.SearchFilter,)
    search_fields = ('firstName', 'lastName', 'email')

当我用postman测试API时,不管我在url中输入什么字符串,都会返回所有用户,而不是只返回相关的用户。如何修复此问题,以便仅返回名、姓或电子邮件匹配的用户?你知道吗


Tags: django字符串用户name视图restapi应用程序url
2条回答

看起来你没有正确使用^{}。你知道吗

# 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

它将返回firstName、lastName或email中包含字符串"@example.com"的所有用户。查看SearchFilter文档了解更多关于如何工作以及如何定制搜索和过滤的信息。http://www.django-rest-framework.org/api-guide/filtering/#searchfilter

这是因为您没有使用filters.SearchFilter所要求的正确url结构。根据Django REST Framework Documentation,您需要提供搜索字段作为查询参数,如下所示:

http://example.com/api/users?search=russell

所以你的网址.py应该是这样的:

url(r'^search$', user_views.UserSearchListView.as_view(), name="user_search"),

应该使用search?search=<name>调用。你知道吗

相关问题 更多 >

    热门问题