Queryset:将字段与同一模型的另一个字段的子字符串进行比较

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

alb*_*bar 3

奇怪的错误,看起来像是 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)