У меня есть запрос SQL, чтобы определить самый длинный совпадающий префикс, соответствующий данной входной строке. Вариант использования - найти скорость вызова для данного пункта назначения, которая определяется несколькими строками в базе данных. Наиболее конкретный префикс соответствия - тот, который нужно использовать.
Так что в сыром SQL это выглядит так:
SELECT * FROM rateplan_rates
WHERE '3212345789' LIKE CONCAT(prefix, '%')
ORDER BY CHAR_LENGTH(prefix) DESC LIMIT 1
В приведенном выше примере назначение - 3212345789. В реальном приложении это поддерживается механизмами кеширования и многим другим, но все сводится к этому.
Я хочу сделать то же самое в нашем проекте Django для вызова API, и я знаю, что я тоже могу использовать сырой SQL, но мне было интересно, есть ли способ сделать в Django "queryset-language" .
Я застрял с этим:
RateplanRate.objects \
.annotate(prefix_length=Length('prefix'), prefix_match=Concat('prefix', '%')) \
.filter('search_value LIKE prefix_match') \
.order_by('-prefix_length')[0:1]
Недостающая часть - это, конечно, search_value LIKE prefix_match
. Это возможно, или я должен просто вернуться к сырому SQL?