1

我必须通过两个字段中列表中元素的出现来对查询集进行排序。目前我写了找到对象的部分:

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

但我找不到正确订购的解决方案。在“标签”字段中按列表中元素的出现排序将部分解决我的问题。 但我不喜欢遍历查询集中的所有对象..

4

1 回答 1

2

那么,您想让带有特定标签的对象显示在顶部吗?

类似的问题。这个想法是添加选择新字段,该字段将保存布尔值,因此您可以按它进行排序。

您应该使用 django extraqueryset 方法添加此字段。

MyModel.objects.extra(
    select={
        'tags_occurance': "(tags LIKE '%tag1%') + (tags LIKE '%tag2%')"
    },
).order_by('-tags_occurance')

应该是这样的。

于 2014-06-18T12:26:37.267 回答