2011-09-27 100 views
7

我發現,當我通過表單插入任何字符串form field它捕獲它作爲一個空字符串''Django的空和空字符串

但是,當我通過表單插入整數form field的任何內容時,它將其捕獲爲[null]

這是一個很好的做法嗎?字符串應該是null以及db?

回答

5

這是一個很好的做法。如果允許字符串爲null,則會有兩種方法獲得空字符串:null""。這給你多個值來檢查,這是低效和雜亂。

這是一個Django convention,但較好的方法是所有的應用程序,除非你有需要null意味着不同的東西比""

+7

如果在我的數據庫中,我將字段設置爲ALLOW NULL,那麼我希望None被存儲爲NULL,而不是空字符串。 Django擁有它的約定沒問題,但Django不一定是訪問數據庫的唯一系統。如果一個單獨的應用程序可以存儲NULL,那麼你最終不得不檢查null與空字符串。然而,一個簡單的「if not value」將在Python中檢查兩者。 – six8

+6

這可能是'django練習',但在數據庫中通常使用空字符串來表示缺失的數據是不好的做法。這是NULL的用途。我真的希望這不是django的標準做法。 – Darren

+0

這不是一個很好的做法,它是在早期引入的慣例,因爲不必在模板中處理None,也不必將空白表單域清理爲None。這是一個快速完成工作的捷徑,但我們現在應該將其作爲一種良好的實踐證明其合理性,因爲懶惰或缺乏時間讓我們獲得了這種「實踐」。這就是爲什麼我們現在有2個字段屬性來處理這個東西。 –

1

我認爲該字符串應該也是NULL,但取決於您的應用程序,請參閱MySQL, better to insert NULL or empty string?

如果你想存儲的NULL一個空場,在添加問題null=True到現場。見https://docs.djangoproject.com/en/dev/ref/models/fields/#null

+2

這是不正確的... – zentenk

+0

這是怎麼回事? – six8

+2

我更喜歡知道是否設置了值,即使我將它設置爲空字符串vs未設置(null)。這當然取決於您的偏好和/或應用程序。無論如何,我對最佳實踐給出了我的看法,並給出瞭如何使用Django啓用它的說明。 – six8

0

這取決於field.empty_strings_allowed屬性。

有些字段會覆蓋到False。但CharField保持它True,從而使Field._get_default作爲默認返回空字符串 - 即使blank=True。將None作爲默認值的唯一方法是在字段上使用null=True

所以,如果你有db中的字段,它永遠不應該爲空,並且不允許空格永遠不會放在那裏。 objects.create。您需要在模型save方法中輸入self.full_clean()或其他驗證。