【问题标题】:How to raise ValidationError in Django model if email exist如果电子邮件存在,如何在 Django 模型中引发 ValidationError
【发布时间】:2020-02-07 09:09:51
【问题描述】:

我正在尝试通过 validators.pydef clean(self) 在 Django 模型中的电子邮件字段上引发 ValidationError,以了解数据库中是否存在电子邮件。

下面是我的模型简介:

class Profile(models.Model)
   ...
   email = models.EmailField()
   ...

   def __str__(self)
       return self.f_name

我知道我可以在模型字段中添加unique=True 以确保这一点,或者只是在表单中添加cleaned_data,但我想要的解决方案是validator.pydef clean(self) 中的def clean(self)

【问题讨论】:

  • 那么确切的问题是什么?您已经知道可以使用验证器或覆盖模型的 clean() 方法来执行您想要的操作。你尝试了什么?
  • @dirkgroten 我尝试使用clean()validators.py,但与检查表单中是否存在电子邮件的直接方法不同,我无法编写正确的代码来检查是否validators.pyclean() 中存在电子邮件。所以,我不介意是否可以指出我如何为此编写代码。
  • if Profile.objects.filter(email=self.email).exclude(pk=self.pk).exists() 将是 clean() 中的检查。看docs

标签: python validation django-models django-model-field


【解决方案1】:

为了将来参考,如果有人遇到同样的问题,感谢@dirkgroten,我能够在我的models.py 中使用clean() 解决问题:

def clean(self)
     if Profile.objects.filter(email=self.email).exclude(pk=self.pk).exists():
            raise ValidationError({'email': _('Email already exists.')})

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 2021-02-02
    • 2020-05-03
    • 2018-07-24
    • 2010-12-01
    • 2011-08-09
    • 2021-05-06
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多