2011-09-27 37 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()或其他验证。