Вы можете использовать набор запросов Django annotate и выражение с его функциями базы данных .
Например, в вашем случае:
from django.db.models import Value
from django.db.models.functions import Lower, Replace
def get_product(input_product_name):
input_product_name = input_product_name.lower().replace(' ', '')
return Product.objects.annotate(
lowered_nospace_name=Lower(Replace('name', Value(' '), Value('')))
).filter(
lowered_nospace_name=input_product_name
)
Обратите внимание, что SQL Trim()
и Python strip()
удаляют только пробелы в начале и конце вашей строки.Например, strip(' hello ') == 'hello'
.
Примечание по безопасности
В этом случае может помочь написание необработанного SQL, однако используйте его только какв крайнем случае, если вы не можете выразить свой запрос с помощью методов Django QuerySet. Команда Django откажется от функции extra()
в будущем, поскольку она может открыться для SQL-инъекций атак.