Как я могу использовать опцию фильтра в django остальные рамки, используя представление на основе функций - PullRequest
0 голосов
/ 22 января 2020

Вот моя модель:

  class Customer(models.Model):
       name   = models.CharField(max_length=250) 
       age    = models.IntegerField()
       status = models.IntegerField()

И сериализатор:

 class CustomerSerializer(serializers.Serializer):

       class Meta:
            model  = Customer
            fields = '__all__'

Я хочу использовать опцию фильтра для модели Заказчика с их возрастом и статусом, который пройдет в формате json (не в URL) с использованием метода POST. Как я могу реализовать опцию фильтра? Я использую представление на основе функций здесь.

 {
      "age": 20,
      "status": 2
 }

Если я отправлю это json, тогда будет отфильтрована модель Customer.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

попробуйте это. Если ваш пост josn из данных формы тела.

from django.db.models import Q
        age = self.request.POST.get('age')
        status = self.request.POST.get("status")
        q_objects = Q()
        if age:
            q_objects.add(Q(age=age), Q.AND)
        if status:
            q_objects.add(Q(status=status), Q.AND)
        if q_objects:
            queryset = Customer.objects.filter(q_objects)
        else:
            queryset = Customer.objects.all()
0 голосов
/ 22 января 2020

Вы можете использовать простой json для десериализации данных, поскольку он выглядит как простой json.

from django.utils import simplejson data = simplejson.loads(request.POST['data'])

Затем вы можете получить доступ к значениям словаря данных с помощью data.key.

Теперь вы можете использовать цепной фильтр для получения результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...