Django: поиск по длине текстового поля
У меня есть модель с текстовым полем на ней. Я хочу сделать поиск, который вернет все элементы, которые содержат строку длиной 7 или более в этом поле. Возможно ли это?
Как насчет поиска всех объектов, в которых это поле не является ''
?
Ответы
Ответ 1
Я думаю, что поиск в регулярном выражении может помочь вам:
ModelWithTextField.objects.filter(text_field__iregex=r'^.{7,}$')
или вы всегда можете выполнять необработанные SQL-запросы в модели Django:
ModelWithTextField.objects.raw('SELECT * FROM model_with_text_field WHERE LEN_FUNC_NAME(text_field) > 7')
где len_func_name - это имя функции "длина строки" для вашей СУБД. Например, в mysql он называется "длина".
Ответ 2
Начиная с django 1.8, вы можете использовать функцию Length
:
from django.db.models.functions import Length
qs = ModelWithTextField.objects \
.annotate(text_len=Length('text_field_name')) \
.filter(text_len__gte=7)