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

Posted jintian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRM项目实战-动态model form 增加自定义样式相关的知识,希望对你有一定的参考价值。

类在实例化之前会执行__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 增加自定义样式的主要内容,如果未能解决你的问题,请参考以下文章

CRM项目实战-kingadmin model obj list 页面开发

CRM项目实战,动态菜单设计

CRM项目实战-kingadmin根据list-display配置生成的数据

django项目 crm登录 注册

djagon实战form数据库等操作

Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色