2017-07-26 28 views
1

我正在構建一個django rest api作爲Android應用程序的後端。我正在android應用程序中實現一個搜索功能,它應該傳遞查詢字符串;可以是名字,姓氏,兩者或電子郵件,都可以在後端搜索用戶模型以查找任何匹配的實例,並將其返回到客戶端的回收站視圖中。如何返回具有相同名字或姓氏的所有用戶實例,如在url django rest中那樣?

我的網址是內置客戶端的方式是這樣的:

@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"), 

其映射到是視圖網址如下:

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

當我測試與郵差API,不管我放在什麼字符串網址,所有的用戶返回,而不是隻有相關的。我如何解決這個問題,以便只返回具有匹配的名字,姓氏或電子郵件的用戶?

回答

2

看起來好像你正在使用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"), 

然後在用戶請求進行搜索,你會要求網址:

/users/search/[email protected]

這將返回其名字,姓氏或電子郵件包含字符串"@example.com"所有用戶。請查閱SearchFilter文檔以獲取更多關於如何工作以及如何自定義搜索和過濾的信息。 http://www.django-rest-framework.org/api-guide/filtering/#searchfilter

1

這是因爲您沒有使用filters.SearchFilter所需的正確url結構。由於每Django REST Framework Documentation您需要提供搜索字段作爲查詢參數,像這樣:

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

所以你的urls.py應該是這樣的:

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

,且必須使用search?search=<name>被調用。

相關問題