dun*_*bok 1 python regex django filter
我想获得所有products在没有空间/小写版本name字段等于没有空间/小写版本input_product_name在Django参数。我怎样才能做到这一点?
伪代码
def get_or_add_product(input_product_name):
return Product.objects.filter(where no-space/lowercase version of name == input_product_name.strip().lower())
Run Code Online (Sandbox Code Playgroud)
您可以将 Django 的 queryset annotate和expression与它的Database Functions 一起使用。
例如,在您的情况下:
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
)
Run Code Online (Sandbox Code Playgroud)
请注意,SQLTrim()和 Pythonstrip()仅去除字符串开头和结尾的空格。例如,strip(' hello ') == 'hello'。
安全注意事项
编写原始 SQL 对您的情况有所帮助,但是,如果您无法使用 Django QuerySet 方法表达您的查询,请仅将其用作最后的手段。Django 团队将来会弃用该extra()功能,因为它可能会受到SQL 注入攻击。
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |