0

我从这个 [tutorial][1] 开始,但我无法理解如何设置它以在 android 应用程序中进行搜索。到目前为止,我已经使用 django REST 框架制作了一个模型,然后在 android 中使用改造来制作和GET请求。PUTPOST

现在我想按名称搜索我的产品。

上面的教程试图创建搜索 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来使用 haystack 创建搜索 url。[1]:http ://django-haystack.readthedocs.io/en/v2.6.0/tutorial.html

4

1 回答 1

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);
        }
    });
于 2017-03-17T01:25:42.497 回答