2012-02-22 49 views
2

我有一個IntegerField聲明如下模型的:Django IntegerField返回字符串(!) - 如何強制爲int?

amount = models.IntegerField() 

當訪問它,它有時會返回一個字符串。最接近的原因是它有一個字符串分配給它。到目前爲止,非常不可思議。即使在保存之後,它也會返回一個字符串。

這讓我覺得有點令人驚訝:如果IntegerField將它的值強制賦值爲一個整數(或最後保存),那麼用戶可以依賴它爲整數。

(我的應用程序使用SQLite。)

有沒有一種方法,使IntegerField只返回整型?或者我必須創建一個自定義字段來執行此操作?

+0

你在使用SQLite嗎? – warvariuc 2012-02-22 12:55:42

+0

@warwaruk - 是 – Marcin 2012-02-22 12:58:09

+2

嘗試再次從數據庫中拉取對象,然後查看它是否爲int。如果我回想起來,進入數據庫,Django的ORM將調用對象的repr() - 這就是爲什麼它看起來正常保存。 – 2012-02-22 12:59:52

回答

9

正如我在評論中提到的,這是發生的原因是Django在保存字段上執行相關強制,但不反映原始模型的值更改,因爲不查詢數據庫就無法完成再次。

對於這種問題,最快的修復方法(也是最簡單的,從長遠來看)是找到字符串的來源並將它變成一個int - 對我來說,這將表明在驗證中應該有一些不妥之處正在挑選這個。

+0

我的問題是,該值來自窗體作爲一個字符串,並保存到一個新的對象。然後使用這個新對象,我試圖做數學,但是對象在數據庫中返回了一個字符串,它是一個整數。 – citadelgrad 2017-04-28 19:31:51