2010-07-21 66 views

回答

25

发生了什么是Django正在将'+'传递给SQL - 但SQL不允许使用'+'进行连接,所以它会尝试添加数字。如果你用一个整数来代替'一个字符串',它的确可以工作,因为它将整数值my_other_field添加到你的变量中。

这是一个错误是值得商榷的。在查找查询的documentation for F() objects指出:

Django支持与F()对象

,因此可以说,你不应该试图运用加,减,乘,除和模运算用它来更新字符串。但是这当然没有记录,并且错误消息“不正确的DOUBLE值”不是很有帮助。我会打开一张票。

+0

感谢您的详细回复 – Zach 2010-07-22 02:23:59

+0

在SQLite中它甚至没有什么帮助:它只是将文本设置为“0”! – boxed 2015-02-05 13:15:18

24

我有一个类似的问题;基本上我想连接两个字段来获取用户的全名。我把它解决了这个办法(但必须说,我使用的是Postgres):

from django.db.models.functions import Concat 
from django.db.models import F, Value, CharField 

AnyModel.objects.filter(**kwargs).annotate(full_name=Concat(F('model__user_first_name'), Value(' '), F('model__user_last_name'), output_field=CharField())) 

其中,F(“...”)评估其作为查询参数,这样你就可以查询的字段模型本身,或者跨越模型,就像你在filter/get中做的那样,而Value('...')直接评估它的参数(在我的情况下我需要在first_name和last_name之间放置一个空格),和output_field = ...指定了注释字段的类型(我想成为CharField)。 欲了解更多信息,你可以阅读Django docs about Concat

希望这将有助于有人在那里。干杯

+0

这是一个很好的答案,按预期工作。 – ihhcarus 2016-10-08 13:09:12

+0

这是一个很好的答案,按预期工作。 – 2017-09-11 21:18:31

相关问题