Python django objects.filter排除您自己
在处理Django代码中的唯一性时,我发现了一个问题:如何在验证器中检查记录,但不包括您自己,因为update函数 我在下面试过,但不起作用 拜托,你能帮我吗 model.pyPython 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-
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不存在,但它存在。TksPerson
也是型号名称。我看不出您是如何在检查电子邮件\u Person
中传递Person
模型对象的。因此Person.id
是错误的,因为django将尝试从Person
类模型中获取id
属性。