默认属性

默认属性

问题描述:

我有模式是这样的:默认属性

class A(models.Model): 
    some_field = models.CharField(max_length=50, default='bbb') 

如果我创建新的对象是这样的:

a1 = A() 
a2 = A(some_field="ccc") 
print "a1 {}".format(a1.some_field) 
print "a2 {}".format(a2.some_field) 

我应该得到

A1 BBB

a2 ccc

+0

你试过了吗? – 2013-04-29 13:40:46

+0

我得到错误,需要some_field。为什么? – 2013-04-29 13:55:01

从技术上说是的,但是这看起来并不像你提到的“some_field是必需的”错误。如果您希望允许表单接受空白值,则必须将some_field设置为接受空白值。您需要将blank=True添加到您的字段构造函数中,以便验证将通过并在数据库中使用默认值。

您也永远不会保存这些对象,因此它们实际上并未在数据库中创建。

这取决于你想要做什么。如果您不打算在表单中使用模型字段,则不需要添加blank=True。如果没有给出值,default的值将足以使数据库中的字段保持该值。另一方面,如果您打算在模型表单中使用该字段,则需要将blank=True添加到您的模型中,或者将required=False添加到模型中的字段中。

现在与您的问题有关,是的。这正是你应该得到的,如果你试图这样做。

+0

模型自己进行验证,而不仅仅是在ModelForms中使用。当调用'is_valid'时,表单使用这些验证。有关更多信息,请参阅[此处](https://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objects)。 – Ngenator 2013-04-29 15:16:52

+0

我明白了,但我只是在没有空白属性的情况下测试了shell中的示例,它允许我将它保存到数据库,只是使用默认值。但没有空白,'ModelForm'没有验证。这是当我搜索文档格式'Models'并看到这个:“请注意,这是不同于null。null是纯数据库相关的,而空白是验证相关的。如果一个字段有空= True,表单验证将允许条目如果一个字段为空= False,则该字段将是必需的。“ – 2013-04-29 15:25:44

+0

我明白你的意思了,但他提到他得到验证错误,所以我专注于表单验证。我会在我的回答中澄清。 – Ngenator 2013-04-29 15:38:30