1

在Django中处理代码中的唯一性,我发现了一个问题:How to check records at validators,但不包括自己,因为更新功能?

我在下面尝试过,但不起作用。

拜托,你能帮帮我吗?

模型.py

def check_email_person(email_given):
    myid = Person.id
    if Person.objects.filter(email=email_given).exclude(id__in=myid):
       raise ValidationError(u"E-mail already exists!")

class Person(models.Model):
    email = models.EmailField(blank=True, null=True, validators=[check_email_person])
4

3 回答 3

1

最好的方法是按照建议unique=Trueemail现场进行Brandon。但是现在您的问题可以解决为:

def check_email_person(email_given):
    myid = Person.id
    if Person.objects.filter(email=email_given).exclude(id=myid):
       raise ValidationError(u"E-mail already exists!")

您不需要__in在 id 上使用,因为它只是一个 id。

于 2013-08-07T19:32:36.477 回答
1

您可能应该在表单验证中执行以下操作:

def clean_email(self):
    email = self.cleaned_data["email"]
    try:
        User.objects.get(email=email)
    except User.DoesNotExist:
        return email
    raise forms.ValidationError('duplicate_email')
于 2013-08-07T20:19:01.310 回答
0

__in需要一个列表来检查。尝试

Person.objects.filter(email=email_given).exclude(id__in=[myid])
于 2013-08-07T19:31:38.083 回答