Не удается настроить Haystack-asticsearch для поиска в Android

Я начал с этого [урока][1], но не смог понять, как настроить его для поиска в приложении для Android. До сих пор я сделал модель, используя django REST Framework, а затем использовал модификацию в Android для GET, PUT а также POST Запросы.

Теперь я хочу искать мои продукты по имени.

В приведенном выше руководстве была попытка выполнить поиск на странице 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

1 ответ

В 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);
        }
    });
Другие вопросы по тегам