Django模型选择不会因无效选择而引发错误

时间:2013-12-12 12:00:05

标签: python django

我在Django中有一个带有选择字段的对象

class CustomFieldType(models.Model):
    STRING = 'STRING'
    DATE = 'DATE'
    BOOLEAN = 'BOOLEAN'
    NUMERIC = 'NUMERIC'
    EMAIL = 'EMAIL'
    TYPE_CHOICES = (
        (STRING, _('String')),
        (DATE, _('Date')),
        (BOOLEAN, _('Boolean')),
        (NUMERIC, _('Numeric')),
        (EMAIL, _('Email'))
    )
    name = models.CharField(max_length=256)
    field_type = models.CharField(choices=TYPE_CHOICES, default=STRING, max_length=10)
    company = models.ForeignKey('Company')

    class Meta:
        unique_together = ('name', 'company')

    def __unicode__(self):
        return self.name

在我的django控制台中

$> CustomFieldType.objects.create(name='custom_name',field_type='noError',company=mycompany)
<CustomFieldType: custom_name>
$> CustomFieldType.objects.get(name='custom_name').field_type
u'noError'

为什么django没有引发错误(ValidationError)?或者我错过了什么?

2 个答案:

答案 0 :(得分:7)

choices选项仅用于预填充表单下拉字段;它不会强制执行任何验证:

  

如果给出了这个,默认表单小部件将是一个选择框   这些选择而不是标准文本字段。

答案 1 :(得分:1)

更新

自django 2.1起,设置choices 确实会引发验证错误:

如果给出选择,它们将由model validation 强制执行,默认表单窗口小部件将是带有这些选择的选择框,而不是标准文本字段。

请注意,CustomFieldType.objects.create是不够的。您需要执行类似model_instance.full_clean()的操作来引发错误。正如model validation文档

中所述