首页 > 解决方案 > 加入查询集,但保留具有不同值的注释字段

问题描述

我要解决的问题是根据初始查询执行涉及多个相关步骤的搜索,例如:

最后,查询集是使用连接的,full_name | words但这最终会因为模型的排序而混合结果,而我想要的是将所有内容保留full_namewords.

为了解决这个问题,我用一个新值注释了两个查询集,并在之后尝试按它排序:

full_name = full_name.annotate(relevance=Value(1, IntegerField()))
words = words.annotate(relevance=Value(2, IntegerField()))
return (full_name | words).order_by('relevance')

发生的情况是,所有内容words都更改为也有relevance=1,而不是保持2我之前设置的值,使我的订购尝试无用......

我知道还有其他方法可以实现我想要的排序,比如将查询集转换为 alist或其他 hack,但是有没有办法以类似于我尝试过的方式来做到这一点?

谢谢!

标签: django

解决方案


我认为您不想对查询集进行 OR-ing。听起来你想要一个工会

full_name = full_name.annotate(relevance=Value(1, IntegerField()))
words = words.annotate(relevance=Value(2, IntegerField()))

return full_name.union(words).order_by('relevance')

如果查询集位于不同的模型上,则需要谨慎考虑包含哪些字段。


推荐阅读