Django-自定义ModelForm

from django import forms
1.创建modelform函数
def create_modelform(name, **kwargs):
  Meta = type('Meta', (), kwargs)
  external_class_dict = {}
  add_fields = new_fields(kwargs.get("fields"))
  external_class_dict['Meta'] = Meta
  if add_fields != {}:
    external_class_dict.update(**add_fields)
  hook = local_hooks(kwargs.get("fields"),model=model_object)
  if hook != {}:
    external_class_dict.update(**hook)
  modelform = type(name, (forms.ModelForm,), external_class_dict)
  return modelform

2.新增验证字段
def new_fields(fields):
    auth_code = forms.CharField(max_length=12, error_messages={'required': '授权码不能为空'})
variable = locals()
fields_dict = {}
for key in fields:
val = variable.get(key)
if val:
fields_dict[key] = val
return fields_dict
3.局部钩子
def local_hooks(fields,model=None):
  "每个内置函数为局部钩子,提前定义好"
def clean_auth_code(self):
value = self.cleaned_data.get('auth_code')
if value != settings.AUTHORIZATION_CODE:
raise forms.ValidationError('授权码错误')
return value

def clean_account(self):
value = self.cleaned_data.get('account')
if len(value) < 4:
raise forms.ValidationError('长度不能小于4!')
elif model.objects.filter(account=value).values('account'):
raise forms.ValidationError('账号信息存在')
return value

def clean_password(self):
value = self.cleaned_data.get('password')
if len(value) < 4:
raise forms.ValidationError('长度不能小于4!')
elif model.objects.filter(password=value).values('password'):
return value
return value

hooks = locals()
hook_dict = {}
for key in fields:
key_str = 'clean_' + key
val = hooks.get(key_str)
if val:
hook_dict[key_str] = val
return hook_dict




 
posted @ 2020-04-30 09:53  盛开的晴天  阅读(381)  评论(0)    收藏  举报