我使用python 3.4.2和django 2.0。
我的models.py
class Solution(models.Model):
name = models.CharField(max_length=200)
然后在python控制台中我这样做:
>>>a = Solution.objects.all().filter(id="1")
>>>b = Solution.objects.all().filter(id__in=["1","2"])
>>>c = Solution.objects.all().filter(id="3")
>>>ab = a.intersection(b)
>>>abc = ab.union(c)
>>>cab = c.union(ab)
>>>abc
<QuerySet [<Solution: Solution-id1>, <Solution: Solution-id3>]>
>>>cab
<QuerySet [<Solution: Solution-id1>]>
为什么abc和bca不同?
如果我需要使用我的查询集执行许多交叉和联合操作,我该怎么办?因为我希望有
<QuerySet [<Solution: Solution-id1>, <Solution: Solution-id3>]>
以任何联合顺序。
我从用户那里获取长查询字符串。例如:
(((id 1) and (id 2)) or (id 3)) or ((id 4) and (id 5))
我在queryset上使用带有循环的递归函数来搜索结果。 但如果联盟运营商不是可交换的,我无法预测结果。 我认为我每次都可以访问基础,但是我可以在不调用数据库的情况下对查询集执行某些操作吗?