Django Queryset самый точный результат поиска
Я должен отсортировать набор запросов по появлению элементов из списка в двух полях. В настоящее время я написал часть, которая находит объекты:
self.filter((reduce(operator.or_, ((Q(tags__contains=tag) | Q(name__contains=string)) for tag in string.split(' ')))))
но я не могу найти решение, чтобы получить правильный заказ. Упорядочение по вхождению элементов из списка в поле "теги" частично решило бы мою проблему.Но я предпочитаю не перебирать все объекты в queryset..
1 ответ
Решение
Итак, вы хотите, чтобы объекты с определенными тегами отображались вверху?
Есть похожая проблема. Идея состоит в том, чтобы добавить в поле выбора нового, которое будет содержать логическое значение, чтобы вы могли сортировать по нему.
Вы должны добавить это поле, используя django extra
метод набора запросов.
MyModel.objects.extra(
select={
'tags_occurance': "(tags LIKE '%tag1%') + (tags LIKE '%tag2%')"
},
).order_by('-tags_occurance')
Должно быть что-то вроде этого.