Django фильтр по пустой строке или пустой строке, состоящей из пробелов

Я хотел бы фильтровать по заданному имени, которое является либо пустой строкой, либо строкой, состоящей только из пробелов

Например, у меня есть такие имена

name1 = ''
name2 = '  '
name3 = '     '
name4 = 'john door'

Я бы хотел, чтобы запрос возвращал все значения без символов, но состоящие только из пробелов, которые в данном случае называют 1, 2 и 3

Вот моя первоначальная попытка, но я думаю, что ее можно сделать более точной.

missing_names = Loan.objects.filter(
    Q(Q(name__startswith=' ') & Q(name__endswith=' ')) | Q(name__exact='')
)

Для решения проблемы вы можете использовать оператор regex operator, который предоставляет Django ORM

e.g.

missing_names = Loan.objects.filter(name__regex=r'/^\s*$/')

Вы можете использовать функцию Trim базы данных для удаления всех ведущих и последующих пробелов, а затем отфильтровать по ней:

from django.db.models.functions import Trim


missing_names = Loan.objects.annotate(trimmed_name=Trim('name')).filter(trimmed_name='')

В Django 3.2+ вы можете использовать alias [Django docs] вместо annotate:

from django.db.models.functions import Trim


missing_names = Loan.objects.alias(trimmed_name=Trim('name')).filter(trimmed_name='')
Вернуться на верх