I have an object in Django with a choice field
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
In my django console
$> CustomFieldType.objects.create(name='custom_name',field_type='noError',company=mycompany)
<CustomFieldType: custom_name>
$> CustomFieldType.objects.get(name='custom_name').field_type
u'noError'
Why django is not raising an error (ValidationError) ? Or Am I missing something ?
The choices
option is only for pre-populating of form drop down fields; it does not enforce any validation:
If this is given, the default form widget will be a select box with these choices instead of the standard text field.
UPDATE
Since django 2.1, setting choices
does raise validation errors:
If choices are given, they’re enforced by model validation and the default form widget will be a select box with these choices instead of the standard text field.
Note that, CustomFieldType.objects.create
is not enough. You need to do something like a model_instance.full_clean()
to raise the error. Just as mentioned in the model validation docs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With