按用户过滤不是在另一个模型查询集中使用 Q 的员工

Posted

技术标签:

【中文标题】按用户过滤不是在另一个模型查询集中使用 Q 的员工【英文标题】:Filter by user is not staff using Q in another model queryset 【发布时间】:2019-02-07 02:51:45 【问题描述】:

我有以下型号:

class APC(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name='apc', on_delete=models.SET_NULL)
  type= models.CharField(choices=TYPE_CHOICES, max_length=5, blank=True, null=True)

我想获取具有两种特定类型之一的 APC 对象,并且用户不是员工。

我开始:

apcs = APC.objects.filter(
        ~Q(user is staff),
        Q(type=TYPE_CHOICES_A) | Q(type=TYPE_CHOICES_B)
)

【问题讨论】:

【参考方案1】:

尝试在没有 Q 的情况下这样做:

apcs = APC.objects.filter(user__is_staff=False, type__in=(TYPE_CHOICES_A, TYPE_CHOICES_B))

【讨论】:

以上是关于按用户过滤不是在另一个模型查询集中使用 Q 的员工的主要内容,如果未能解决你的问题,请参考以下文章

从大型数据集中过滤掉记录的最佳方法是什么

Django,在模型中按函数过滤 Q 对象

Django 从模型中过滤:Model.objects.filter(Q())

Django,按用户全名过滤 Q 对象

Django 结合两个没有 Q 的查询

使用多个术语和 Q 过滤器对 reduce 查询进行排序