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

Должно быть что-то вроде этого.

Другие вопросы по тегам