如何在Django ORM中使用Q&Q修复排除项

时间:2019-04-02 10:49:17

标签: django django-orm

我有一个带有filter和exclude的简单查询。排除Q&Q无法正常工作的情况。

下面是我正在使用的查询。

start_date = (datetime(time.localtime().tm_year, time.localtime().tm_mon, 1) - timedelta(1)).replace(day=1)

data = models.Test.objects.filter(
            is_deleted=False).exclude(Q(status__in=[1,2,3]) & Q(modified_at__lt=start_date))\
            .select_related('created_by')\
            .prefetch_related('name')

我希望排除项起作用。如果我两次使用排除,我会得到结果。

1 个答案:

答案 0 :(得分:1)

From the doc

  

exclude(**kwargs)
  返回一个新的 QuerySet ,其中包含与给定的查找参数不匹配的对象。   查找参数(** kwargs)的格式应为以下Field lookups中所述。 在基础SQL语句中,通过AND连接了多个参数,并且整个内容都包含在NOT()中。

因此,只需将 Q() 对象与 逗号分隔 一起使用,

.exclude(Q(status__in=[1,2,3],Q(modified_at__lt=start_date))
相关问题