.. _ref-contrib-admin: ==================== Django admin サイト ==================== :revision-up-to: 11321 (1.1) unfinished .. module:: django.contrib.admin :synopsis: Django の admin サイトです。 .. currentmodule:: django.contrib.admin Django の最も強力な機能の一つに、自動生成される admin インタフェースがあり ます。 admin はモデルのメタデータを読み込んで、強力で実運用に耐えるインタ フェースを生成し、コンテンツの製作者がすぐにサイトにコンテンツを投入できる ようにします。このドキュメントでは、 Django の admin インタフェースを有効に したり、カスタマイズしたりする方法を解説します。 .. admonition:: 注意 admin サイトは Django 0.96 から大幅にリファクタされました。このドキュメ ントでは、よりカスタマイズ機能の充実した新しい admin サイトについて解説 しています。この admin サイトの仕様は、 Django の開発をよく追いかけてい る人なら、一度は "newforms-admin" という名前で耳にしたことがあるはずで す。 概要 ======== Django admin サイトは、以下の 5 つのステップを通して有効化します: 1. ``django.contrib.admin`` を ``INSTALLED_APPS`` に追加します。 2. admin インタフェースでの編集を可能にするモデルを決めます。 3. 2 で決めたモデルに対して、必要なら ``ModelAdmin`` クラスを定義します。 ``ModelAdmin`` はモデルごとにカスタマイズした admin の機能やオプショ ンをカプセル化しています。 4. ``AdminSite`` をインスタンス化して、モデルや ``ModelAdmin`` クラスを 指定します。 5. ``AdminSite`` インスタンスを URLconf にフックします。 Other topics ------------ .. toctree:: :maxdepth: 1 actions .. seealso:: For information about serving the media files (images, JavaScript, and CSS) associated with the admin in production, see :ref:`serving-media-files`. ``ModelAdmin`` オブジェクト ============================= .. class:: ModelAdmin ``ModelAdmin`` クラスは、 admin インタフェース上のモデルを表現しています。 このクラスは、アプリケーションの ``admin.py`` という名前のファイルに保存し ます。 ``ModelAdmin`` の簡単な例を以下に示します:: from django.contrib import admin from myproject.myapp.models import Author class AuthorAdmin(admin.ModelAdmin): pass admin.site.register(Author, AuthorAdmin) .. admonition:: Do you need a ``ModelAdmin`` object at all? In the preceding example, the ``ModelAdmin`` class doesn't define any custom values (yet). As a result, the default admin interface will be provided. If you are happy with the default admin interface, you don't need to define a ``ModelAdmin`` object at all -- you can register the model class without providing a ``ModelAdmin`` description. The preceding example could be simplified to:: from django.contrib import admin from myproject.myapp.models import Author admin.site.register(Author) ``ModelAdmin`` のオプション --------------------------------- ``ModelAdmin`` はとてもフレキシブルなクラスです。このクラスには、 admin イ ンタフェースをカスタマイズするためのオプションがいくつもあります。オプショ ンは、全て、 ``ModelAdmin`` のサブクラスで以下のように指定します:: class AuthorAdmin(admin.ModelAdmin): date_hierarchy = 'pub_date' .. attribute:: ModelAdmin.date_hierarchy ``date_hierarchy`` をモデルの ``DateField`` や ``DateTimeField`` に指定する と、変更リストのページに、指定フィールドの日付を使って日付ベースで絞り込み できるナビゲーションが組み込まれます。 例:: date_hierarchy = 'pub_date' .. attribute:: ModelAdmin.form デフォルトの設定では、モデルに対して ``ModelForm`` が動的に生成され、追加/ 変更ページでフォームを生成するときに使われます。 ``form`` を独自の ``ModelForm`` と置き換えれば、追加/変更ページのふるまいを変更できます。 詳しくは、 :ref:`admin にカスタムのバリデーションを追加する ` を参照してください。 .. attribute:: ModelAdmin.fieldsets admin の「追加 (add)」および「変更 (change)」ページのレイアウトを制御するに は、 ``fieldsets`` を使います。 ``fieldsets`` は 2 要素のタプルのリストです。各タプルは admin フォームペー ジ上の ``
`` を表します (``
`` はいわばフォームの「セクショ ン」です)。 フィールドセットは ``(name, field_options)`` の形式をとります。 ``name`` はフィールドセットの名前を表す文字列で、 ``field_options`` はフィールドセッ ト内で表示したいフィールドの情報を入れた辞書です。この情報の中に、表示した いフィールドのリストも指定します。 ``django.contrib.flatpages.FlatPage`` モデルから抜き出した例を示します:: class FlatPageAdmin(admin.ModelAdmin): fieldsets = ( (None, { 'fields': ('url', 'title', 'content', 'sites') }), ('Advanced options', { 'classes': ('collapse',), 'fields': ('enable_comments', 'registration_required', 'template_name') }), ) このフィールドセットによって、 admin のページは以下のようになります: .. image:: _images/flatfiles_admin.png ``fieldsets`` を指定しない場合、 Django は ``AutoField`` でなく、かつ ``editable=True`` であるようなフィールドを、モデルに定義した順番に個別のフィー ルドセットとして表示します。 ``field_options`` 辞書には以下のようなキーを指定できます: * ``fields`` フィールドセット内に表示するフィールド名からなるタプルです。 必須のキーです。 使い方:: { 'fields': ('first_name', 'last_name', 'address', 'city', 'state'), } 同じ行に複数のフィールドを表示したい場合、それらのフィールドをタプ ルでラップして入れます。下の例では、 ``first_name`` と ``last_name`` が同じ行に表示されます:: { 'fields': (('first_name', 'last_name'), 'address', 'city', 'state'), } * ``classes`` フィールドセットに適用される追加の CSS クラス名です。 使い方:: { 'classes': ['wide', 'extrapretty'], } admin サイトのデフォルトのスタイルシートで定義されている便利なクラ スとして ``collapse`` と ``wide`` があります。 ``collapse`` スタイ ルのフィールドセットは、 admin ページでは最初折り畳まれ (collapse) ており、小さな"クリックして展開 (click to expand)" リンクに置き換わっ ています。 ``wide`` スタイルのフィールドセットには水平方向に追加のス ペースが加わります。 * ``description`` 各フィールドセットの先頭の、ヘッダのすぐ下に表示する追加の文字列で、 オプションです。 この文字列は admin 上で HTML エスケープ *されません* 。そのため、必 要ならそのまま HTML を入れられます。また、 HTML 固有の文字をエスケー プしたければ、 ``django.utils.html.escape()`` を使ってください。 .. attribute:: ModelAdmin.fields レイアウトを気にせず、単にモデルの一部のフィールドだけをフォームに表示した いだけの場合に、 ``fieldsets`` の代わりに使ってください。例えば、 ``django.contrib.flatpages.FlatPage`` モデルの admin フォームの簡単なバージョ ンを以下のように定義できます:: class FlatPageAdmin(admin.ModelAdmin): fields = ('url', 'title', 'content') 上の例では、 'url', 'title', 'content' フィールドだけが順番にフォームに表示 されます。 .. admonition:: Note この ``fields`` オプションと ``fieldsets`` オプションの中の ``fields`` キーとを混同しないでくださいね。 .. attribute:: ModelAdmin.exclude この属性にフィールドの名前のリストを指定すると、指定したフィールドがフォー ムから除去されます。 例えば、以下のようなモデルがあったとします:: class Author(models.Model): name = models.CharField(max_length=100) title = models.CharField(max_length=3) birth_date = models.DateField(blank=True, null=True) ``name`` と ``title`` フィールドだけを含む ``Author`` モデルのフォームを 表示したければ、 ``fields`` や ``exclude`` を使って、それぞれ以下のように 定義できます:: class AuthorAdmin(admin.ModelAdmin): fields = ('name', 'title') class AuthorAdmin(admin.ModelAdmin): exclude = ('birth_date',) ``Author`` モデルは 3 つのフィールド ``name``, ``title``, ``birth_date`` しか持たないので、上の 2 つの例は全く同じフィールドを含むフォームを生成しま す。 .. attribute:: ModelAdmin.filter_horizontal ユーザビリティが紙一重の ``) イン タフェースを使います。 ``radio_fields`` にフィールド名を指定しておくと、 Django はセレクタボックスの代りにラジオボタンのインタフェースを使います。 例えば、 ``group`` が ``Person`` モデル上の ``ForeignKey`` フィールド であれば、以下のように書けます:: class PersonAdmin(admin.ModelAdmin): radio_fields = {"group": admin.VERTICAL} ラジオボタンの並び方を指定するシンボル、 ``HORIZONTAL`` または ``VERTICAL`` は ``django.contrib.admin`` モジュールにあります。 ``ForeignKey`` や ``choices`` パラメタのセットされたフィールド以外に ``radio_fields`` を使ってはなりません。 .. attribute:: ModelAdmin.raw_id_fields デフォルトでは、Django の admin サイトは ``ForeignKey`` フィールドに対して セレクタボックス (