アナログジャンゴ管理

--- ---復元コンテンツ始まります

1アナログADMI、我々はmyadminという呼ばれるファイルを所有する管理者関連のアプリケーションを実行自動的に起動し、当社のアプリケーションapp01でmyadmin.pyファイルを作成します

我々はアプリで作成したmyadminというアプリケーションでの固定方法書く、自動的atuodiscover_moudelsを使用してファイル名を取得し、起動初めてでファイルを実行します

django.apps インポートのAppConfigを
 から django.utils.module_loading 輸入autodiscover_modules 

クラスMyadminConfig(のAppConfigを): = ' myadminという' 
    DEF レディ(自己):
         戻り autodiscover_modules(' myadminという'

管理者は、この文書にmyadminというの作成、myadminというファイルにサービスファイルを作成し、私自身のブラインド演劇の名前をアナログソースを書き出す、2シミュレーション法を登録しました

ソースデータ管理Djangoの書き込みシミュレーションモデルのテーブルを登録し、登録されたクラスは、テーブルとモデルのコンフィギュレーションクラスに対応します

配置类类名
 クラスModelMyadmin(オブジェクト): 





注册模型表源码
クラスMyadminSite(オブジェクト):
     デフ __init__(自己、NAME = ' 管理' ):
        self._registry = {}   #1 model_classクラス- >は、インスタンスがADMIN_CLASS 

    DEF(自己登録します、モデル、ADMIN_CLASS =なし、** オプション):
         場合 ないADMIN_CLASS:
            ADMIN_CLASS = ModelMyadmin
             #はレジストリに保存するために管理クラスをインスタンス化し 
        たモデル(self._registry [モデル] = ADMIN_CLASS)

キー:設定クラスの自己では、当社の事業モデルのテーブルで、

ルートを設定します

 まず、パケットルーティングの性質を調べるために、彼は、ルーティングルートを包ん名のURLの前に、ビュー関数の後ろにコンマを続けることができているでは、関数名、または2つのルーティング機能に加えてビューの関数名の名前です。プラス2なし、タプルの形式でなければなりませんどのように関係なく、ルートの背中を包むことに留意すべきではありません。

ここでルート発生源カテゴリに生成されたアナログ管理経路を生成し、モデルテーブルの構成を登録します。

モデルは、登録中にソースコードを表示するために、ルーティングテーブルを生成します。

   DEFのget_urls(セルフ):

        のURLを = []
         のため model_class、config_obj :self._registry.items()       
       config_objモデルはテーブル構成クラスに対応しました
--metaすることができ、ソースコードに大きな辞書に登録することにより、私たち.app_label除去アプリケーション名モデルテーブル、及び _meta.model_name抽出モデルテーブル app_label = model_class._meta.app_label MODEL_NAME = model_class._meta.model_name スプライシング後のルーティングのURLを生成することによって形成され、 urls.append( URL(R&LT ' ^%S /%S / '(app_label、MODEL_NAME)、config_obj.urls) 返すURLを @property DEF :のURL(自己) リターン self.get_urls()、なし、なし

 テンプレートはシングルトンパターンの使用にソース後に形成されるため、すべての操作が生成されるように、2つのソース・レジスタ・ルーティング・テーブルを生成した場合、2つのルーティングテーブルは、登録がソースコードで生成することができないデータ・モデルの操作に関連しますそれは同じであり、

しかし、従って、特定のテーブルの動作とは、二つの経路を生成するように構成されたテーブルに対応する同じモデルクラスにすることはできません。

@propertyの
     デフのURL(自己):
        のURLを = [ 
            URL(R ' ^ $ '、self.list_view、名前= ' %S_%S_%sの'%(self.app_label、self.model_name、' リスト' ))、
            URL (R ' ^ /追加'、self.add_view、名前= ' %S_%S_%sの'%(self.app_label、self.model_name、' 追加' ))、
            URL(R " ^更新/(\ dは+)/ 'self.update_view、名前= ' %S_%S_%sの"%(self.app_label、self.model_name、' 更新' ))、
            URL(R ' ^ \ dは+(/削除)/ '、self.delete_view、名前= ' %S_%S_%sの'%(self.app_label、 self.model_name、' 削除' ))、
        ] 
        リターン URLを、なし、なし

手術台、テーブルデータを変更して再検索欠失を示すように設計されたルーティングテーブルのモデルを生成した後、

前記エンドでユーザーを表示するテーブルで、我々は、データを表示するために何を知っていないので、我々は、デフォルトの設定クラスの表示を設定し、テーブルオブジェクトの表示のみのモデル表示オブジェクト名__str__メソッドを通じて。あなたは私たち自身を書いていない場合はさらさユーザー・レジストリーの方法をカスタマイズすることができ、ユーザに提供される、ユーザーが自分で書くには、ユーザーのと既定のユーザーを使用することで
、クラスのデフォルトの設定list_play

クラスModelMyadmin(オブジェクト):
    list_play = [ ' __str__ '、]

ユーザーはlist_playがデフォルトその後、提供さんしない場合は、設定クラスが決定されます

 DEF get_new_list_play(自己):
        TMP = [] 
        tmp.append(ModelMyadmin.check_col)
        tmp.extend(self.list_play)
        なら ないself.list_play_links:
            tmp.append(ModelMyadmin.edit_col)
        tmp.append(ModelMyadmin.delete_col)
        リターン TMP

verbose_name =:データ処理の処理をレンダリングするためのテーブルタグを使用して、表示データコンテンツの受信があなたが今のようなモデルテーブルの設定をすることができ、中国のヘッダを表示したいと、表示するように表示するには、ヘッダーとフォームの内容に背景を形成する必要があります「本があったが、

verbose_nameを取得するためのgetField()メソッドを指摘するために、構成クラス._metaを用いた方法で

ヘッダーは示しています。

  DEF get_head(自己):
        head_list = []
         のため field_or_func self.config_obj.get_new_list_play():
             もしでisinstance(field_or_func、STR):
                 もし field_or_func == ' __str__ ' 
                    head_list.append((self.config_obj.model._meta。 MODEL_NAME).upper())
                
                    ヴァル = self.config_obj.model._meta.get_field(field_or_func).verbose_nameの
                    head_list.append(val)で
            、他
                ヴァル = field_or_func(self.config_obj、is_head =真)
                head_list.append(val)で
        リターン head_list

コンテンツの表示を形成します。

    デフget_body(自己):
        表单展示 
        body_list = []
         のために OBJ self.page_queryset:
             プリント(obj.pk)
            TMP = []
             のため field_or_func self.config_obj.get_new_list_play():
                 もし:でisinstance(field_or_func、STR)
                    のVal = GETATTR(OBJ、field_or_func)
                     場合 field_or_func self.config_obj.list_play_links:
                        _url = self.config_obj.get_reverse('更新'OBJ) 
                        ヴァル = mark_safe(' <a href="%s">%S </a>の'(_url、ヴァル))
                 
                    ヴァル = field_or_func(self.config_obj、OBJ = OBJ)
                tmp.append (val)で
            body_list.append(TMP)の戻り body_list
        

 

 

---終わり---コンテンツを復元

おすすめ

転載: www.cnblogs.com/1624413646hxy/p/11299109.html