Django `UniqueConstraint` 异常处理与 'unique=True' 相同
Django `UniqueConstraint` exception handled the same as 'unique=True'
当违反模型的 UniqueConstraint
时,将引发异常。我怎样才能使它的行为与 unique=True
?
的字段冲突相同
identifier = models.CharField("id", max_length=30, unique=True, blank=True, null=True, validators=[validate_id])
class Meta:
constraints = [
models.UniqueConstraint(
Lower("identifier"),
name="id_case_insensitive_constraint"
)
]
这里我想要一个表单的 form_invalid
调用时出现相同的字段错误等等,无论输入与另一个完全相同还是唯一的区别是区分大小写。
约束没有转化为验证器:验证完全在数据库端完成,因此 Django 无法提前知道该项目将无效。
您可以制作一个验证器,例如在 ModelForm
中自己验证,使用:
from django import forms
from django.core.exceptions import ValidationError
class MyModelForm(forms.ModelForm):
def <b>clean_identifier</b>(self):
data = self.cleaned_data['identifier']
if MyModel.objecs.exclude(pk=self.instance.pk).filter(<strong>identifier__iexact=data</strong>).exists():
raise ValidationError('The identifier already exists')
return data
class Meta:
model = MyModel
fields = ['identifier']
当违反模型的 UniqueConstraint
时,将引发异常。我怎样才能使它的行为与 unique=True
?
identifier = models.CharField("id", max_length=30, unique=True, blank=True, null=True, validators=[validate_id])
class Meta:
constraints = [
models.UniqueConstraint(
Lower("identifier"),
name="id_case_insensitive_constraint"
)
]
这里我想要一个表单的 form_invalid
调用时出现相同的字段错误等等,无论输入与另一个完全相同还是唯一的区别是区分大小写。
约束没有转化为验证器:验证完全在数据库端完成,因此 Django 无法提前知道该项目将无效。
您可以制作一个验证器,例如在 ModelForm
中自己验证,使用:
from django import forms
from django.core.exceptions import ValidationError
class MyModelForm(forms.ModelForm):
def <b>clean_identifier</b>(self):
data = self.cleaned_data['identifier']
if MyModel.objecs.exclude(pk=self.instance.pk).filter(<strong>identifier__iexact=data</strong>).exists():
raise ValidationError('The identifier already exists')
return data
class Meta:
model = MyModel
fields = ['identifier']