首页 > 解决方案 > 自定义验证在 forms.py 中不起作用

问题描述

我想验证我的电子邮件字段,例如:如果电子邮件包含[gmail.com,outlook.com,yahoo.com],那么我想提出验证错误。但它不起作用,我不知道我做错了什么。请帮帮我

视图.py

from django.shortcuts import render
from django.views.generic import View
from access.utils import is_valid
from access.mixin import HttpResponseMixin
import json
from access.forms import Employer_Form
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator

@method_decorator(csrf_exempt,name = 'dispatch')
class Emp_Registration_view(View,HttpResponseMixin):
  def post (self,request,*args,**kwargs):
    data = request.body
    json_data = is_valid(data)
    if not json_data:
        return self.render_http_response(json.dumps({'msg':'Please send valid json only'}),status=400)
    emp_data = json.loads(data)
    form= Employer_Form(emp_data)
    if form.is_valid():
        form.save(commit=True)
        return self.render_http_response(json.dumps({'msg':'Registered Successfully'}))
    if form.errors:
        return self.render_http_response(json.dumps(form.errors),status=400)

表格.py

from access.models import Employer_Registration
from django import forms

class Employer_Form(forms.ModelForm):
  def clean_email(self):
    email = self.cleaned_data['emp_email']
    email_lists = ['gmail.com','yahoo.com','outlook.com','hotmail.com']
    data = emp_email.split('@')
    if data in email_lists:
        raise forms.ValidationError("email is not valid")
    return email

  class Meta:
    model = Employer_Registration
    fields = '__all__'

标签: djangopython-3.x

解决方案


你的方法应该被命名clean_emp_email,因为字段被命名emp_email。否则不会被调用。


推荐阅读