2008-11-12 107 views
9

簡而言之:您如何在Django模型中指定BIGINT?django模型中的大整數字段

在當前使用Django(0.97-svn release)的項目中,我將所有模型中的所有整數字段定義爲IntegerField。在我使用SQLite作爲數據庫後端的開發週期中,它工作得非常完美。但是,一旦我轉到MySQL,我注意到對於其中一個IntegerField,MySQL正在截斷數據---顯然,由於我仍然不知道的原因,SQLite沒有抱怨。我查看了架構並發現Django中的IntegerField在MySQL中被表示爲INT(11)字段。當然,MySQL截斷數據的原因是因爲數據長度超過了11位。要解決這個問題,我不得不手動更新列,在這種情況下,是一個BIGINT(20)。 Django和MySQL和平共處。但是,無論何時我重置其中包含該BIGINT的模型的應用程序,Django再次將其創建爲INT(11)。我看過Django文檔,沒有找到任何東西。我忽略了什麼?

謝謝。

回答

5

SQLite不會投訴有史以來。它使用'manifest typing',也就是說,這些值有類型,而不是列。它可以讓你在bigint柱子上存儲bigtext,或者任何你想要的東西! (除非你定義一個整數主鍵,它使用一個64位整數)。

這是一個非常方便的功能,但如果您打算使用不同的引擎進行部署,它會使SQLite成爲開發的不好選擇。

對於使用BIGINT,您必須創建自定義字段類。不幸的是,這部分在Django 1.0中已經發生了變化,所以如果/當你更新時你必須重寫它。

0

試試DecimalField。

23

BigIntegerField被添加到變更集11887,2009-12-17 09:10:38並且是Django 1.2和更新的一部分。

+0

+1解決我的問題。 – bennedich 2010-09-30 13:19:31