F. *_*ron 5 python django django-models
我试图检查Charfield(charfield_1)的前3个字符是否与同一模型的另一个Charfield(charfield_2)相似.
尝试:
User.objects.filter(charfield_2__startswith=Substr('charfield_1', 1, 3))
Run Code Online (Sandbox Code Playgroud)
使用F和Func尝试没有任何成功.我一直在:
django.db.utils.DataError: invalid input syntax for integer: "1%"
LINE 1: ...CE(REPLACE((SUBSTRING("model_name"."charfield_2", '1%', 3)),...
Run Code Online (Sandbox Code Playgroud)
知道如何使这项工作?我想使用ORM的解决方案来避免性能问题.
更新:
检查ORM生成的查询和错误消息后,当我使用startswith或包含查找表达式时,看起来第二个Substr参数被非整数替换.
例如:Substr('charfield_1',1,3)被Substr替换('charfield_1','%1%',3)
我使用的是2.0.2版.
已打开并接受票证:https: //code.djangoproject.com/ticket/29155
奇怪的错误,看起来像是 Django 的错误?在家里,使用 1.11,效果如下:
from django.db.models.functions import Substr
User.objects.annotate(f1=Substr('charfield_1', 1, 3), f2=Substr('charfield_2', 1, 3)).filter(f1=F('f2'))
Run Code Online (Sandbox Code Playgroud)