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一样。 –