我正在尝试进行相当复杂的查询,我可以在其中排除符合特定条件的项目。这是一个超级简化的模型来解释我的困境:
class Thing(models.Model)
user = models.ForeignKey(User)
shared = models.BooleanField()
number = models.IntegerField()
我从一个按用户过滤的查询集开始:
qs = Thing.objects.filter(user=request.user)
现在,从该事物列表中,我想排除以下任何项目:
- shared 是 True,并且
- number不是任何值
[1, 6, 7]
。
在我的脑海中,我会这样做:
qs = qs.exclude(shared=True, number__not__in=[1, 6, 7])
但__not__in
不存在,不是吗?我觉得我需要左右晃动以使两个查询相交,但这对于不可能那么复杂的事情感到恶心。我最好的前进方式是什么?