我有一个带有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')
我希望排除项起作用。如果我两次使用排除,我会得到结果。
答案 0 :(得分:1)
exclude(**kwargs)
返回一个新的 QuerySet ,其中包含与给定的查找参数不匹配的对象。 查找参数(** kwargs)的格式应为以下Field lookups中所述。 在基础SQL语句中,通过AND
连接了多个参数,并且整个内容都包含在NOT()
中。
因此,只需将 Q()
对象与 逗号分隔 一起使用,
.exclude(Q(status__in=[1,2,3],Q(modified_at__lt=start_date))