當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使用相同的欄位錯誤呼叫表單以及所有這些,無論輸入是否與另一個完全相同,或者其唯一區別是區分大小寫。
uj5u.com熱心網友回復:
約束不會被轉換為驗證器:驗證完全在資料庫端完成,所以 Django 無法提前知道該專案將是無效的。
您可以制作一個驗證器,例如在ModelForm自己驗證此內容時,使用:
from django import forms
from django.core.exceptions import ValidationError
class MyModelForm(forms.ModelForm):
def clean_identifier(self):
data = self.cleaned_data['identifier']
if MyModel.objecs.exclude(pk=self.instance.pk).filter(identifier__iexact=data).exists():
raise ValidationError('The identifier already exists')
return data
class Meta:
model = MyModel
fields = ['identifier']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/469986.html
