0

我開始使用[教程] [1],但我無法理解如何設置它在Android應用程序搜索。到目前爲止,我已經使用django REST框架製作了一個模型,然後在android中使用了retrofit來製作GETPUTPOST請求。我無法配置乾草堆彈性搜索在Android的搜索

現在我想按名稱搜索我的產品。

上述教程試圖製作搜索HTML頁面並在該HTML頁面中鍵入查詢,但我想要一個端點,我可以發送GET請求進行搜索。

請幫我理解如何去做。

class Product(models.Model): 
     name=models.CharField(max_length=50) 
     mrp = models.DecimalField(max_digits=20) 
     company=models.CharField(max_length=100) 

class ProductSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Product 
     fields = ('id', 'name', 'mrp', 'company') 

class ProductViewSet(viewsets.ModelViewSet): 
    queryset = Product.objects.all() 
    serializer_class = ProductSerializer 

    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

class ProductIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name = indexes.CharField(model_attr='name') 
    company=indexes.CharField(model_attr='company') 

    def get_model(self): 
     return Product 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

現在我應該怎麼使用這個的ItemIndex使用草垛進行搜索URL。 [1]:http://django-haystack.readthedocs.io/en/v2.6.0/tutorial.html

回答

0

在DRF:

class ProductViewSet(viewsets.ModelViewSet): 
    queryset = Product.objects.all() 
    serializer_class = ProductSerializer 
    permission_classes = (IsAuthenticated,) 

    @list_route(methods=['POST']) 
    def search(self, request): 
     key = request.data['key'] 
     queryset = Product.objects.filter(name__icontains=key) 
     serializer = ProductSerializer(queryset, many=True) 
     return Response(serializer.data) 
Android中Okhttp3演示

RequestBody requestBody = new FormBody.Builder() 
      .add("key", ProductName) 
      .build(); 
    Request request = new Request.Builder() 
      .post(requestBody) 
      .url(Constants.ProductSearch) 
      .build(); 

    HttpClientUtil.getClient().newCall(request).enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) {} 

     @Override 
     public void onResponse(Call call, final Response response) throws IOException { 
      final String data = response.body().string(); 
      Log.e("Http",data); 
     } 
    }); 
+0

我能理解如何使用ProductIndex這個ProductViewSet,您能詳細解釋。謝謝您的幫助。 –

+0

你想在DRF中使用GET方法獲得密鑰? – Ykh

+0

不,我想爲使用乾草堆彈性搜索的android製作搜索引擎。像drf-haystack一樣。 –