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

v9tzhpje  于 2022-12-14  发布在  Go
关注(0)|答案(3)|浏览(169)

我在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)?或者我错过了什么?

r6hnlfcb

r6hnlfcb1#

choices选项仅用于预填充表单下拉字段;它不强制执行任何验证:
如果指定了此选项,则默认表单小部件将是一个包含这些选项的选择框,而不是标准文本字段。

ldfqzlk8

ldfqzlk82#

更新

从django 2.1开始,设置choices引发验证错误:

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

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

polkgigr

polkgigr3#

我遇到了同样的问题,我解决了它使用save()方法,而不是create()方法,你必须使用full_clean()之前,它.如下:

x = "your model name"()
x."field" = "value"
.
.
.
"your model name".full_clean(self = x)
"your model name".save(self = x)

相关问题