使用 Q() Django 进行复杂过滤

问题描述 投票:0回答:1

我有模型订单和用户:

class Order(Model):
    ...
    status = CharField(choices=STATUS, default=NEW, max_length=20)
    referral_user = ForeignKey("app.User", CASCADE, 'referal', blank=True, null=True)
    operator = ForeignKey("app.User", CASCADE,'operator', blank=True, null=True)

class User(Model):
    ...
    orders_for_all_operators = BooleanField(default=True)
    operators = ManyToManyField("User", related_name="admins")

我需要像这样过滤操作员的订单:

  1. 状态:新
  2. 操作员:请求的用户或没有操作员。
  3. Order 的 referral_user:在他们的
    operators
    字段或
    orders_for_all_operators = True
  4. 中有请求的用户

我试过这段代码,但它不起作用:

qs = queryset.filter(Q(Q(referral_user__in=self.request.user.admins.all()) | Q(user__orders_for_all_operators=True)) | Q(Q(operator=None) | Q(operator=self.request.user)))
django django-orm
1个回答
0
投票

试试这个:

from django.db.models import Q

qs = Order.objects.filter(status='New').filter(
    Q(operator=self.request.user) | Q(operator=None),
    Q(referral_user__in=self.request.user.operators.all()) | Q(referral_user__orders_for_all_operators=True)
)
© www.soinside.com 2019 - 2024. All rights reserved.