我在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)?或者我错过了什么?
答案 0 :(得分:7)
choices
选项仅用于预填充表单下拉字段;它不会强制执行任何验证:
如果给出了这个,默认表单小部件将是一个选择框 这些选择而不是标准文本字段。
答案 1 :(得分:1)
更新
自django 2.1起,设置choices
确实会引发验证错误:
如果给出选择,它们将由model validation 强制执行,默认表单窗口小部件将是带有这些选择的选择框,而不是标准文本字段。
请注意,CustomFieldType.objects.create
是不够的。您需要执行类似model_instance.full_clean()
的操作来引发错误。正如model validation文档