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='')