Не удается настроить 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);
}
});