У меня есть модель, у которой есть поле тегов, которое представляет собой список тегов, разделенных запятыми. Учитывая список строк тегов, я построил запрос, который находит экземпляры моей модели, имеющие хотя бы один из тегов. Я это работает так:Сортировка по количеству совпадений строк в Django queryset
tag_list = ["tag1", "tag2"]
MyModel.objects.filter(
reduce(
lambda x, y: x | y, [Q(tags__icontains=tag) for tag in tag_list]))
Но теперь я хочу, чтобы отсортировать QuerySet в порядке убывания числа, соответствующего теги каждый элемент имеет. Я пытаюсь найти правильный способ аннотировать поле, которое будет содержать счетчик совпадений, но не имел большой удачи. Любые указатели?
Я думаю, что это было бы более _efficient_ сделать сортировку в питона, а не базы данных. После того, как вы получите «список» объектов, имеющих хотя бы один тег, вы можете отсортировать его с помощью атрибута 'MyModel.tags.count()', переданного в сравнение сортировки, - это будет похоже на сортировку списка объектов на основе в целочисленном поле – kicker86