有没有办法将我们想要修剪的字符传递给 LTRIM 函数。
from django.db.models.functions import LTrim
ModelA.objects.filter(a__startswith="0").update(a=LTrim("a"))
相关SQL
UPDATE "modlea" SET "a" = LTRIM("modela"."a") WHERE "modela"."a"::text LIKE '0%';
这将修剪左侧的空格,但是如何使用 Django 删除左侧的“0”?
它的 SQL 是
UPDATE "modlea" SET "a" = LTRIM("modela"."a", "0") WHERE "modela"."a"::text LIKE '0%';
但是 Django 的等价物是什么?正在尝试以下操作,但它不起作用。
ModelA.objects.filter(a__startswith="0").update(a=LTrim("a", "0"))
失败了
TypeError: 'LTrim' takes exactly 1 argument (2 given)
那么如何将
0
传递给 Django 中的 LTrim
函数呢?
REGEX_REPLACE(…)
[mariadb],这不是 Django 具有的函数,但我们可以使用 Func
表达式 [ Django-doc]:
from django.db.models import F, Func, Value
MyModel.objects.filter(my_field__startswith='0').update(
my_field=Func(
F('my_field'), Value('^0+'), Value(''), function='REGEX_REPLACE'
)
)
根据数据库后端,该函数可能有不同的名称。