--- ---復元コンテンツ始まります
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
---終わり---コンテンツを復元