假设我的模型看起来像这样:
My Model:
isBig = Boolean
isRound = Boolean
isBlue = Boolean
isStraight = Boolean
现在,我需要获取这些记录的特定过滤集。我可能需要具有isBig=True
和isBlue=True
的集合,或者我可能需要将所有字段设置为true的集合。也许还有一次,我需要将所有字段设置为false的集合。基本上我不知道在运行之前我还需要什么。
由于使用一堆链接在一起的.filter
进行查询是不可行的(只有4个字段,有256种不同的组合,我的实际模型有8个字段)我的方法到目前为止,但它没有给我我想要的东西:
# start with all records
myQS = My_Model.objects.all()
# peel off a group of records based on each criteria
if not isBig:
myQS = myQS.exclude(isBig=False)
if not isRound:
myQS = myQS.exclude(isRound=False)
if not isBlue:
myQS = myQS.exclude(isBlue=False)
if not isStraight:
myQS = myQS.exclude(isStraight=False)
所以,我从所有记录开始,然后遍历每个字段,试图使myQS
越来越小,剥离我不想要的记录。
为什么这不起作用,我的逻辑如何关闭?
编辑更改了我的if
语句以避免分配。
为清楚起见,当我说“不工作”时,我得到的结果与我期望的完全相反。因此,如果我想要包含isBlue = True
的所有记录而不是其他内容,我实际上会获得所有字段True
和isBlue = False
的所有记录 - 与我期望的完全相反。