我必须通过在两个字段中出现list中的元素来对queryset进行排序。目前我写了一个找到对象的部分:
self.filter((reduce(operator.or_, ((Q(tags__contains=tag) | Q(name__contains=string)) for tag in string.split(' ')))))
但我无法找到正确订购的解决方案。按照列表中的元素出现排序,在'标记'领域将部分解决我的问题。 但我不想迭代查询集中的所有对象..
答案 0 :(得分:2)
那么,你想让具有某些标签的对象显示在顶部吗?
有similar problem。我们的想法是添加select new字段,它将保存布尔值,因此您可以按它排序。
您应该使用django extra
queryset方法添加此字段。
MyModel.objects.extra(
select={
'tags_occurance': "(tags LIKE '%tag1%') + (tags LIKE '%tag2%')"
},
).order_by('-tags_occurance')
应该是这样的。