Фильтрация результатов набора запросов на основе логического поля True - PullRequest
1 голос
/ 14 марта 2020
class User(models.Model):
    name = models.EmailFiled()

class Product(models.Model):
    title = models.CharField(max_length=50)
    is_active = models.BooleanField(default=True)

class Cart(models.Model):
    product = models.ManyToManyField(Product)


class Order(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    cart = models.ForeignKey(Cart,on_delete=models.CASCADE)

У нас есть несколько продуктов. некоторые из них активны = Ложь, другие - Истина. Я должен взять продукты, которые активны = истинно запрашивающий пользователь.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вы ищете возможность фильтровать результаты ViewSet на основе вашего флага active. Я настоятельно рекомендую вам прочитать документацию по фильтрации DRF

Вам просто нужно добавить в свои ViewSet или APIView следующие поля

from django_filters.rest_framework import DjangoFilterBackend

class ProductList(generics.ListAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    # Add Filtering Backend
    filter_backends = [DjangoFilterBackend]
    # Add filtering fields (Default behavior is to exact match provided values)
    filterset_fields = ['is_active']

и теперь в вашем запросе у вас должен быть параметр запроса

http://example.com/api/products?is_active=1
0 голосов
/ 14 марта 2020

Вы можете получить Product s, которые являются активными, и Cart пользователя с помощью:

Product.objects.filter(<b>is_active=True, cart__order__user=<i>my_user</i></b>)
...