Как аннотировать запрос пользовательской функцией в 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')
)
Если есть другой способ сделать это, пожалуйста, сообщите мне.