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)