Как аннотировать запрос пользовательской функцией в Django ORM?

У меня эта модель:

class Brand(models.Model):
    name = models.CharField(max_length=32)

и эта функция, которая возвращает число, показывающее сходство между двумя строками (число между 0 и 1).

from difflib import SequenceMatcher
def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

Я хочу аннотировать столбец в моем запросе, который показывает значение сходства между name и строкой и упорядочить их по similarity.

Я написал нечто подобное, но оно не работает, и я не знаю, как оно работает.

Brand.objects.all().annotate(
    similarity=ExpressionWrapper(similar(F('name'), 'mercedes'), 
                                 output_field=models.DecimalField()).order_by('similarity')
)

Если есть другой способ сделать это, пожалуйста, сообщите мне.

Вернуться на верх