我正在尝试使用Django在查询集上构建的差分方法,但是在使用了差分方法之后,排序似乎已经消失了。
objects = self.get_index_children()
print("objects are %s ordered" % objects.ordered)
featured_recipes = objects.filter(featured=True)[:3]
print("featured_recipes are %s ordered" % featured_recipes.ordered)
latest_recipes = objects.difference(featured_recipes)
print("latest_recipes are %s ordered" % latest_recipes.ordered)
objects are True ordered
featured_recipes are True ordered
latest_recipes are False ordered . <----这应该是这样的吗?还是在django一边的错误?如果是这样的话,是否有适当的方法来找出两个查询集之间的区别?
发布于 2019-03-06 23:53:10
difference()转换成一个EXCEPT子句,其语法依赖于数据库后端。
对于SQLite,Django在difference()的两边使用有序查询集时会抛出一个错误。
对于Postgres,允许对子查询进行排序,但它只影响子查询(只有当子查询被切片时才有意义)。
对于两个后端,要对结果查询进行排序,需要向结果查询集添加一个显式.order_by(...):
q3 = q1.difference(q2).order_by('name')关于你的最后一个问题,这是difference。函数返回一个查询集,其中包含一个查询集中的元素,减去一个或多个其他查询集中的元素。排序在这里没有直接的关系。
https://stackoverflow.com/questions/55032856
复制相似问题