Jon*_*han 18 django django-queryset
考虑同一个类的两个QuerySet对象.有没有一种简单的方法可以通过计算联合将它们统一到一个QuerySet中?还有,有一种简单的方法可以减去它们吗?从其中一个集中删除两个集中出现的所有元素?
Jon*_*han 13
回到django的文档,你可以:
new_query_set = query_set_1 | query_set_2
Run Code Online (Sandbox Code Playgroud)
这作为一个逻辑OR,实际上是没有重复的添加.这回答了额外的方面,AFAIK 根本没有击中数据库!
new_query_set = query_set_1 & query_set_2
Run Code Online (Sandbox Code Playgroud)
这作为逻辑AND.
仍然缺少如何减去QuerySet.我很难相信社区没有优雅地处理这个问题......
Dem*_*tes 13
使用相同的模型从另一个QuerySet中减去QuerySet.
这有效 - 但可能很慢
queryset_with_hello = Blog.objects.filter(name__icontains='hello')
queryset_without_hello = Blog.objects.exclude(pk__in=queryset_with_hello)
Run Code Online (Sandbox Code Playgroud)
阅读django文档中的性能注意事项:
https://docs.djangoproject.com/en/dev/ref/models/querysets/#in
Håk*_*Lid 12
由于Django的1.11,查询集有union()
,intersection()
而且difference()
方法.
也可以在QuerySets中使用|
和&
运算符(我在文档中找不到对此的引用,所以我猜union()
并且intersection()
是组合两个查询集的首选方法.
qs3 = qs1.union(qs2) # or qs3 = qs1 | qs2
qs3 = qs1.intersection(qs2) # or qs3 = qs1 & qs2
qs3 = qs1.difference(qs2) # the ^ operator is not implemented.
Run Code Online (Sandbox Code Playgroud)
您还可以使用Q()
对象,类似的查询集实施|
和&
,和额外的反转操作~
归档时间: |
|
查看次数: |
12261 次 |
最近记录: |