簡體   English   中英

Django model 選擇不為無效選擇引發錯誤

[英]Django model choice not raising error for an invalid choice

我在 Django 中有一個帶有選擇字段的 object

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)? 或者我錯過了什么?

choices選項僅用於預填充表單下拉字段; 它不強制執行任何驗證:

如果給出了這個,默認的表單小部件將是一個帶有這些選項的選擇框,而不是標准的文本字段。

更新

從 django 2.1 開始,設置choices確實會引發驗證錯誤:

如果給出了選擇,它們由模型驗證強制執行,並且默認表單小部件將是帶有這些選擇的選擇框,而不是標准文本字段。

請注意, CustomFieldType.objects.create是不夠的。 您需要執行類似於model_instance.full_clean()來引發錯誤。 正如模型驗證文檔中提到的那樣

我遇到了同樣的問題,我通過使用save()方法而不是create()方法解決了它,並且你必須在它之前使用full_clean() 像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM