码迷,mamicode.com
首页 > 其他好文 > 详细

CRM项目实战-动态model form 增加自定义样式

时间:2019-08-09 01:46:17      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:create   字段   obj   disabled   port   war   项目实战   open   方法   

类在实例化之前会执行__new__方法

cls.base_fields ——》form字段   admin_class.model._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:
        model = admin_class.model
        # fields = [‘name‘,‘consultant‘,‘status‘]
        fields = "__all__"
        if not form_add:#change
            exclude = admin_class.readonly_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:  #admin_class.model._meta.fields?
            print(123,cls.base_fields)
            print(456,admin_class.model._meta.fields)
            filed_obj = cls.base_fields[field_name]
            filed_obj.widget.attrs.update({class:form-control})
            # if field_name in admin_class.readonly_fields:
            #     filed_obj.widget.attrs.update({‘disabled‘: ‘true‘})
            #     print("--new meta:",cls.Meta)

        #print(cls.Meta.exclude)
        return  ModelForm.__new__(cls)

    dynamic_form = type("DynamicModelForm" ,(ModelForm,) ,{Meta :Meta,__new__:__new__})

    print(dynamic_form)
    return dynamic_form
form_handle.py

 

技术图片技术图片技术图片技术图片技术图片技术图片技术图片技术图片技术图片技术图片技术图片技术图片

CRM项目实战-动态model form 增加自定义样式

标签:create   字段   obj   disabled   port   war   项目实战   open   方法   

原文地址:https://www.cnblogs.com/jintian/p/11324581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!