CRM项⽬实战-动态modelform增加⾃定义样式类在实例化之前会执⾏__new__⽅法
cls.base_fields ——》form字段  del._meta.fields——》model字段
from django.forms import ModelForm
def create_dynamic_model_form(admin_class,form_add=False):
"""动态的⽣成modelform
form_add: False 默认是修改的表单,True时为添加
"""
class Meta:
django admin 自定义页面model = del
# fields = ['name','consultant','status']
fields = "__all__"
if not form_add:#change
exclude = adonly_fields
admin_class.form_add = False #这是因为⾃始⾄终admin_class实例都是同⼀个,
# 这⾥修改属性为True是为了避免上⼀次添加调⽤将其改为了True
else: #add
admin_class.form_add = True
def__new__(cls, *args, **kwargs):
print("__new__",cls,args,kwargs)
for field_name in cls.base_fields:  #del._meta.fields?
print('123',cls.base_fields)
print('456',del._meta.fields)
filed_obj = cls.base_fields[field_name]
filed_obj.widget.attrs.update({'class':'form-control'})
# if field_name in adonly_fields:
#    filed_obj.widget.attrs.update({'disabled': 'true'})
#    print("--new meta:",cls.Meta)
#print(lude)
return  ModelForm.__new__(cls)
dynamic_form = type("DynamicModelForm" ,(ModelForm,) ,{'Meta' :Meta,'__new__':__new__})
print(dynamic_form)
return dynamic_form
form_handle.py

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。