Django Queryset最准确的搜索结果

时间:2014-06-18 12:11:09

标签: python django django-queryset django-q

我必须通过在两个字段中出现list中的元素来对queryset进行排序。目前我写了一个找到对象的部分:

self.filter((reduce(operator.or_, ((Q(tags__contains=tag) | Q(name__contains=string)) for tag in string.split(' ')))))

但我无法找到正确订购的解决方案。按照列表中的元素出现排序,在'标记'领域将部分解决我的问题。 但我不想迭代查询集中的所有对象..

1 个答案:

答案 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')

应该是这样的。