Python django objects.filter排除您自己

Python django objects.filter排除您自己,python,django,django-admin,Python,Django,Django Admin,在处理Django代码中的唯一性时,我发现了一个问题:如何在验证器中检查记录,但不包括您自己,因为update函数 我在下面试过,但不起作用 拜托,你能帮我吗 model.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-

在处理Django代码中的唯一性时,我发现了一个问题:如何在验证器中检查记录,但不包括您自己,因为update函数

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

拜托,你能帮我吗

model.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])

\u在
中需要检查列表。试一试

Person.objects.filter(email=email_given).exclude(id__in=[myid])

最好的方法是按照
Brandon
的建议,在
email
字段中设置
unique=True
。但目前,您的问题可以通过以下方式解决:

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!")

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

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

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')

为什么不在email字段中设置
unique=True
?嗨,布兰登,因为空白电子邮件是允许的。Tks.您可以设置unique=True和blank=True。只有在存在值时才会启动字段验证程序。在Django Admin unique=True和blank=True中,字段验证程序不能像您所说的那样工作。所以,不幸的是,我需要处理代码中的唯一性。怎么会这样?如果设置unique=True和blank=True,则不需要额外的验证器,并且属性应在admin中按预期工作。
id=myid
将给出相同的结果。我也尝试过,但不起作用!我收到一条消息,说id不存在,但它存在。Tks
Person
也是型号名称。我看不出您是如何在
检查电子邮件\u Person
中传递
Person
模型对象的。因此
Person.id
是错误的,因为django将尝试从
Person
类模型中获取
id
属性。