我有一个模型,比如:
class Box(models.Model):
BOX_CHOICES = [('L','Large'),('M','Medium'),('S','Small')]
size= models.CharField(max_length=1,choices=BOX_CHOICES, blank=True, null=True)
我想这将确保我不能添加像"这样的字符串;Humongous"进入大小字段。然而,我能够使用get_or_create函数来插入
你能解释一下为什么最大长度和选项没有限制插入吗
谢谢!
get_or_create()
(与create()
一样(不调用full_clean()
,这是一个检查选项、最大长度等内容的验证函数。因此,您需要自己运行它:
try:
box = Box.objects.get(**your_get_values)
except Box.DoesNotExist:
box = Box(**your_get_values, **any_other_values)
box.full_clean()
box.save()
max_length和choices验证器由full_clean调用,如文档中所述。您可以手动调用此方法:
from django.core.exceptions import ValidationError
try:
box = Box.objects.create(size="L")
box.full_clean()
box.save()
except ValidationError:
pass