CRMプロジェクトの戦闘 - カスタムスタイルを追加するための動的モデルフォーム

クラスはインスタンス化する前に__new__方法を実行します

cls.base_fields - 「フォームフィールドのadmin_class.model._meta.fields - 」モデルフィールド

 

`` django.forms`` インポートのModelForm 


DEFの create_dynamic_model_form(ADMIN_CLASS、= form_add 偽):
     "" " 動的に生成されたのModelFormは
    :追加するとき、デフォルトはFalseの修飾された形である真form_add 
    """ 

    クラス: -メタ
        モデル = admin_class.model
         フィールド=を[ '名前'、 'コンサルタント'、 'ステータス'] 
        フィールド= " __all__がある" 
        IF  ない form_add: 変更 
            インクルードは=除外admin_class.readonly_fields 
            ADMIN_CLASS。form_add = FalseのこのADMIN_CLASS全体のインスタンスが同じであるため、あります
            ここでは最後の呼び出しを避けるために、Trueにプロパティを変更する場合はtrueを追加するように変更する
        他の追加 
            admin_class.form_add = 

    DEFの __new__(CLS、* argsを、** kwargsから):
         印刷" __new__ " 、CLS、引数、 kwargsから)
         のための FIELD_NAME  cls.base_fields:  admin_class.model._meta.fieldsの?
            印刷' 123 ' 、cls.base_fields)
             印刷' 456 ' 、admin_class.model._meta.fields)
            filed_obj =cls.base_fields [FIELD_NAME] 
            filed_obj.widget.attrs.update({ ' クラス'' フォームコントロール' })
            admin_class.readonly_fieldsでFIELD_NAME場合:
            #1      filed_obj.widget.attrs.update({ '無効':「真「}) 
                 印刷( " -新しいメタ:"、cls.Meta) 

        印刷(cls.Meta.exclude)
        を返す   のModelFormを。__new__ (CLS)

    dynamic_form =タイプ(" DynamicModelForm "、(ModelFormサブクラス、)、{ ' メタ':メタ、' __new__ '__new__ })

    プリント(dynamic_form)
     戻り dynamic_form
form_handle.py

 

おすすめ

転載: www.cnblogs.com/jintian/p/11324581.html