【问题标题】:Making an exception in EmailField validation in django在 django 中的 EmailField 验证中出现异常
【发布时间】:2011-06-26 08:57:01
【问题描述】:

我有一个名为 EmailHistory 的模型,其中一个字段如下所示:

from_email = models.EmailField(verbose_name="From:")

我创建了一个 ModelForm 并希望验证电子邮件地址,除非它设置为“匿名”。我尝试了以下方法,但无济于事。

class EmailForm(ModelForm):
    class Meta:
        model = EmailHistory
        exclude = ('to_email')

    to_emails = forms.CharField()

    def clean_from_email(self):

        from_email = self.cleaned_data['from_email']
        if from_email == "Anonymous":
            return from_email
        else:
            return super(EmailForm, self).clean_from_email();

【问题讨论】:

    标签: django validation django-forms emailfield


    【解决方案1】:

    我怀疑问题在于,正如the documentation 解释的那样,底层表单字段的clean 方法(依次运行验证器)在表单本身的特定clean_form_field 方法之前运行。您可能希望在表单中使用普通的 CharField,并自己将电子邮件验证添加到 clean 方法中。

    【讨论】:

      【解决方案2】:

      如果不重新定义from_email,我无法让它工作。所以,我重新定义了它,然后使用django.core.validators.validate_email 进行了电子邮件验证:

      class EmailForm(ModelForm):
          class Meta:
              model = EmailHistory
              exclude = ('to_email')
      
          to_emails = forms.CharField()
          from_email = forms.CharField(required=True)
      
          def clean_from_email(self):
              from_email = self.cleaned_data['from_email']
              if from_email == "Anonymous":
                  from_email = "myemail@example.com"
      
              validate_email(from_email)
      
              return from_email
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 2019-06-29
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多