模型类定义中的"max_length"和"choices"是否应该防止将无效值插入数据库?



我有一个模型,比如:

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

相关内容

最新更新