2010-07-21 84 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

相關問題