我在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)?或者我错过了什么?
3条答案
按热度按时间r6hnlfcb1#
choices
选项仅用于预填充表单下拉字段;它不强制执行任何验证:如果指定了此选项,则默认表单小部件将是一个包含这些选项的选择框,而不是标准文本字段。
ldfqzlk82#
更新
从django 2.1开始,设置
choices
会引发验证错误:如果给出了选择,它们将由模型验证强制执行,默认的表单小部件将是一个包含这些选择的选择框,而不是标准的文本字段。
请注意,
CustomFieldType.objects.create
是不够的。您需要执行类似model_instance.full_clean()
的操作来引发错误。polkgigr3#
我遇到了同样的问题,我解决了它使用
save()
方法,而不是create()
方法,你必须使用full_clean()
之前,它.如下: