Django 如何检查名字和姓氏是否仅在创建时是唯一的?
我有以下型号:Django 如何检查名字和姓氏是否仅在创建时是唯一的?,django,forms,Django,Forms,我有以下型号: class Person(models.Model): short_name = models.CharField(max_length=64) long_name = models.CharField(max_length=64) 我有以下表格: class PersonForm(forms.ModelForm): class Meta: model = Person fields = ['short_name', 'l
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
我有以下表格:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['short_name', 'long_name']
现在我正在使用此表单进行更新和创建
如果有人试图创建一个短名和长名相同的人,我希望此表单引发ValidationError
但是,如果用户正在修改现有用户的数据,我不想引发异常
我曾考虑编写一个干净的方法来检查Person.objects.filter(long\u name=X,short\u name=Y).count()
在修改现有实例时是否返回任何内容,但此条件错误失败
你将如何改变这一点 您可以通过一起使用
unique\u
来实现这一点,如模型级别所示您可以通过一起使用unique\u
来实现这一点,如模型级别所示现有实例是具有pk
值的实例。因此,只需在您的clean()
方法中检查:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")
现有实例的值为
pk
。因此,只需在您的clean()
方法中检查:
class Person(models.Model):
short_name = models.CharField(max_length=64)
long_name = models.CharField(max_length=64)
def clean(self):
if self.pk is None and Person.objects.filter(long_name=self.long_name,
short_name=self.short_name).exists():
raise ValidationError("Someone already has those names!")