Python Django模型选择未引发无效选择的错误

Python Django模型选择未引发无效选择的错误,python,django,Python,Django,我在Django中有一个对象,带有一个选择字段 类CustomFieldType(models.Model): STRING='STRING' 日期='DATE' 布尔值='BOOLEAN' NUMERIC='NUMERIC' 电子邮件='EMAIL' 类型_选项=( (STRING,uu('STRING')), (日期), (BOOLEAN,uu('BOOLEAN')), (数字,uu('NUMERIC')), (电子邮件) ) name=models.CharField(最大长度=256)

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

类CustomFieldType(models.Model):
STRING='STRING'
日期='DATE'
布尔值='BOOLEAN'
NUMERIC='NUMERIC'
电子邮件='EMAIL'
类型_选项=(
(STRING,uu('STRING')),
(日期),
(BOOLEAN,uu('BOOLEAN')),
(数字,uu('NUMERIC')),
(电子邮件)
)
name=models.CharField(最大长度=256)
field\u type=models.CharField(选项=type\u选项,默认值=STRING,最大长度=10)
公司=型号。外键(“公司”)
类元:
共同唯一=(‘名称’、‘公司’)
def ___; unicode(自):
返回self.name
在我的django控制台中

$>CustomFieldType.objects.create(name='custom\u name',field\u type='noError',company=mycompany)
$>CustomFieldType.objects.get(name='custom\u name').field\u类型
你没有错
为什么django没有引发错误(ValidationError)?还是我遗漏了什么?

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

如果给出了该选项,则默认表单小部件将是一个带有 这些选项取代了标准文本字段


更新

自django 2.1以来,设置
选项
会产生验证错误:

如果给出了选项,它们将由强制执行,默认表单小部件将是一个包含这些选项的选择框,而不是标准文本字段


请注意,
CustomFieldType.objects.create
是不够的。您需要执行类似于
model\u instance.full\u clean()
的操作来引发错误。正如文档中提到的那样

有没有办法强制验证?@user1631075数据库不应该验证任何内容。所有验证都应在数据输入数据库之前进行。如果您希望数据库进行验证,那么您的设计是错误的。@Diemuzi这是不正确的,或者我们对“验证”一词使用了不同的含义。我的意思是,如果数据库没有进行验证,那么最大长度是多少,或者整数字段vs charfields vs booleanfields vs等等。数据库应该是真相的唯一来源。宇宙的一条永恒法则是数据比应用程序寿命长。这就是为什么随着时间的推移,Django越来越多地支持构建数据库级别的约束,另见。