{"title":"Django の admin サイト","version":"5.0","locale":"ja","docname":"ref/contrib/admin/index","url":"/ja/5.0/ref/contrib/admin/","canonical":"https://djangodocs.dev/ja/5.0/ref/contrib/admin/","summary":"Django のパワフルな特徴の1つは、自動的に生成される admin インタフェースです。あなたのモデルクラスからメタデータを読み取り、モデル中心のインタフェースを提供し…","html":"<span id=\"the-django-admin-site\"></span><h1>Django の admin サイト<a class=\"heading-anchor\" href=\"#module-django.contrib.admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django のパワフルな特徴の1つは、自動的に生成される admin インタフェースです。あなたのモデルクラスからメタデータを読み取り、モデル中心のインタフェースを提供します。このインタフェースのおかげで、ユーザはあなたのサイトのコンテンツを操作できます。admin サイトのオススメの使い方は、組織内で利用する管理ツールに利用を制限することです。admin サイトは、あなたのサイトのフロントエンドやその周辺を含んだ全体を作成することを意図していません。</p>\n<p>admin サイトは、カスタマイゼーションのためのたくさんのフックを持っています。しかしそれらのフックを使う際には気をつけてください。もしあなたが、データベースのテーブルとフィールドを使用しないような、よりプロセス中心のインタフェースを提供する必要があるなら、おそらく自分でビューを書いたほうが良いでしょう。</p>\n<p>このドキュメントでは、Django の admin インタフェースを有効にして使用したりカスタマイズする方法について説明します。</p>\n<section id=\"overview\">\n<h2>概要<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>admin サイトは <a class=\"reference internal\" href=\"/ja/5.0/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a> で使用されるデフォルトのプロジェクトテンプレートで有効になります。</p>\n<p>デフォルトのプロジェクトテンプレートを使用していない場合、要件は以下の通りです:</p>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\">'django.contrib.admin'</code> とその依存関係である <a class=\"reference internal\" href=\"/ja/5.0/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.auth</code></a>, <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/#module-django.contrib.contenttypes\" title=\"django.contrib.contenttypes: Provides generic interface to installed models.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.contenttypes</code></a>, <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/messages/#module-django.contrib.messages\" title=\"django.contrib.messages: Provides cookie- and session-based temporary message storage.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.messages</code></a>, および <a class=\"reference internal\" href=\"/ja/5.0/topics/http/sessions/#module-django.contrib.sessions\" title=\"django.contrib.sessions: Provides session management for Django projects.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.sessions</code></a> を、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 設定に追加してください。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\">DjangoTemplates</code></a> バックエンドを、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定で構成し、<code class=\"docutils literal notranslate\">django.template.context_processors.request</code>, <code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.auth</code>, および <code class=\"docutils literal notranslate\">django.contrib.messages.context_processors.messages</code> を <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a> の <code class=\"docutils literal notranslate\">'context_processors'</code> オプションに含めてください。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> 設定をカスタマイズしている場合、 <a class=\"reference internal\" href=\"/ja/5.0/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware\" title=\"django.contrib.auth.middleware.AuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.auth.middleware.AuthenticationMiddleware</code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/middleware/#django.contrib.messages.middleware.MessageMiddleware\" title=\"django.contrib.messages.middleware.MessageMiddleware\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.messages.middleware.MessageMiddleware</code></a> を含める必要があります。</p></li>\n<li><p><a class=\"reference internal\" href=\"#hooking-adminsite-to-urlconf\"><span class=\"std std-ref\">管理サイトのURLをあなたのURLconfにフックする</span></a> 。</p></li>\n</ol>\n<p>これらのステップを踏んだ後、フックしたURL (デフォルトでは <code class=\"docutils literal notranslate\">/admin/</code>) を訪れることで、管理サイトを使用できるようになります。</p>\n<p>ログイン用のユーザーを作成する必要がある場合は、<a class=\"reference internal\" href=\"/ja/5.0/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\">createsuperuser</code></a> コマンドを使用してください。デフォルトでは、管理サイトにログインするにはユーザーの <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/auth/#django.contrib.auth.models.User.is_staff\" title=\"django.contrib.auth.models.User.is_staff\"><code class=\"xref py py-attr docutils literal notranslate\">is_staff</code></a> 属性が <code class=\"docutils literal notranslate\">True</code> に設定されている必要があります。</p>\n<p>最後に、アプリケーションのモデルのうちどれが管理インターフェースで編集可能であるべきかを決定します。それらのモデルごとに、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> に記述されているように、管理サイトに登録します。</p>\n<section id=\"other-topics\">\n<h3>他のトピック<a class=\"heading-anchor\" href=\"#other-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/actions/\">管理アクション</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/filters/\"><code class=\"docutils literal notranslate\">ModelAdmin</code> リストフィルタ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/admindocs/\">Django admin ドキュメントジェネレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/javascript/\">admin アプリケーションの JavaScript カスタマイズ</a></li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<p>本番環境での admin と関連する静的ファイル (画像、JavaScript、CSS) の配信について知りたい場合は、<a class=\"reference internal\" href=\"/ja/5.0/howto/deployment/wsgi/modwsgi/#serving-files\"><span class=\"std std-ref\">ファイルを配信する</span></a> を参照してください。</p>\n<p>問題が解決しない場合は、<a class=\"reference internal\" href=\"/ja/5.0/faq/admin/\"><span class=\"doc\">FAQ: 管理インタフェース</span></a> を参照してみてください。</p>\n</aside>\n</section>\n</section>\n<section id=\"modeladmin-objects\">\n<h2><code class=\"docutils literal notranslate\">ModelAdmin</code> のオブジェクト<a class=\"heading-anchor\" href=\"#modeladmin-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ModelAdmin</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">ModelAdmin</code> クラスは、admin インターフェース内でモデルを表現する方法です。通常、アプリケーション内の <code class=\"docutils literal notranslate\">admin.py</code> に記述されます。<code class=\"docutils literal notranslate\">ModelAdmin</code> の例を見てみましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Author\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Author<span class=\"p\">,</span> AuthorAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-do-you-need-a-modeladmin-object-at-all admonition\" role=\"note\">\n<p class=\"admonition-title\">いつでも <code class=\"docutils literal notranslate\">ModelAdmin</code> オブジェクトが必要なのか?</p>\n<p>上記の例では、ModelAdminクラスはカスタム値を（まだ）定義していません。その結果、デフォルトの管理インターフェースが提供されます。デフォルトのadminインターフェースに満足している場合は、ModelAdminオブジェクトを定義する必要はまったくありません。ModelAdminの記述をせずにモデルクラスを登録できます。上記の例は、次のように簡略化できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Author\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Author<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</dd></dl>\n\n<section id=\"the-register-decorator\">\n<h3><code class=\"docutils literal notranslate\">register</code> デコレータ<a class=\"heading-anchor\" href=\"#the-register-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.register\">\n<span class=\"sig-name descname\">register</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>models</em>, <em class=\"sig-param\">site<span class=\"o\">=</span><span class=\"default_value\">django.contrib.admin.sites.site</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.register\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">ModelAdmin</code> を登録するために、デレコータも用意されています:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Author\n\n\n<span class=\"nd\">@admin</span><span class=\"o\">.</span>register<span class=\"p\">(</span>Author<span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>1 つ以上のモデルが与えられ、 <code class=\"docutils literal notranslate\">ModelAdmin</code> に登録されます。カスタムの <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a> を使用している場合、<code class=\"docutils literal notranslate\">site</code> キーワード引数を使って渡してください:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> Author<span class=\"p\">,</span> Editor<span class=\"p\">,</span> Reader\n<span class=\"kn\">from</span> <span class=\"nn\">myproject.admin_site</span> <span class=\"kn\">import</span> custom_admin_site\n\n\n<span class=\"nd\">@admin</span><span class=\"o\">.</span>register<span class=\"p\">(</span>Author<span class=\"p\">,</span> Reader<span class=\"p\">,</span> Editor<span class=\"p\">,</span> site<span class=\"o\">=</span>custom_admin_site<span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>このデコレータは、model admin クラスをその <code class=\"docutils literal notranslate\">__init__()</code> メソッド内で参照する必要がある場合（例： <code class=\"docutils literal notranslate\">super(PersonAdmin, self).__init__(*args, **kwargs)</code> ）には使用できません。代わりに <code class=\"docutils literal notranslate\">super().__init__(*args, **kwargs)</code> のようにします。</p>\n</dd></dl>\n\n</section>\n<section id=\"discovery-of-admin-files\">\n<h3>admin ファイルを見つける<a class=\"heading-anchor\" href=\"#discovery-of-admin-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 設定内に <code class=\"docutils literal notranslate\">'django.contrib.admin'</code> を記述すると、Django は自動的に各アプリケーション内で <code class=\"docutils literal notranslate\">admin</code> モジュールを探してインポートします。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.apps.AdminConfig\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">apps.</span><span class=\"sig-name descname\">AdminConfig</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.apps.AdminConfig\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>これは、admin に対するデフォルトの <a class=\"reference internal\" href=\"/ja/5.0/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\">AppConfig</code></a> クラスです。Django が開始すると <a class=\"reference internal\" href=\"#django.contrib.admin.autodiscover\" title=\"django.contrib.admin.autodiscover\"><code class=\"xref py py-func docutils literal notranslate\">autodiscover()</code></a> を呼び出します。</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.apps.SimpleAdminConfig\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">apps.</span><span class=\"sig-name descname\">SimpleAdminConfig</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.apps.SimpleAdminConfig\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このクラスは <a class=\"reference internal\" href=\"#django.contrib.admin.apps.AdminConfig\" title=\"django.contrib.admin.apps.AdminConfig\"><code class=\"xref py py-class docutils literal notranslate\">AdminConfig</code></a> と同じように動作しますが、<a class=\"reference internal\" href=\"#django.contrib.admin.autodiscover\" title=\"django.contrib.admin.autodiscover\"><code class=\"xref py py-func docutils literal notranslate\">autodiscover()</code></a> を呼び出しません。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.apps.SimpleAdminConfig.default_site\">\n<span class=\"sig-name descname\">default_site</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.apps.SimpleAdminConfig.default_site\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>これはデフォルトの admin サイトのクラスやサイトインスタンスを返す呼び出し可能オブジェクトへのドット区切りのインポートパスです。デフォルトは <code class=\"docutils literal notranslate\">'django.contrib.admin.sites.AdminSite'</code> です。使い方は <a class=\"reference internal\" href=\"#overriding-default-admin-site\"><span class=\"std std-ref\">デフォルトの admin サイトをオーバーライドする</span></a> を参照してください。</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.autodiscover\">\n<span class=\"sig-name descname\">autodiscover</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.autodiscover\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>この関数は、インストールされた各アプリケーション内で <code class=\"docutils literal notranslate\">admin</code> モジュールをインポートするよう試みます。これらのモジュールは admin にモデルが登録されているものと想定されます。</p>\n<p>通常、この機能を手動で呼び出す必要はありません。Django が開始するとき <a class=\"reference internal\" href=\"#django.contrib.admin.apps.AdminConfig\" title=\"django.contrib.admin.apps.AdminConfig\"><code class=\"xref py py-class docutils literal notranslate\">AdminConfig</code></a> が呼び出してくれます。</p>\n</dd></dl>\n\n<p>カスタム <code class=\"docutils literal notranslate\">AdminSite</code> を使用している場合、通常はすべての <code class=\"docutils literal notranslate\">ModelAdmin</code> サブクラスをコードにインポートし、それらをカスタム <code class=\"docutils literal notranslate\">AdminSite</code> に登録します。その場合、自動検出を無効にするには、<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 設定で <code class=\"docutils literal notranslate\">'django.contrib.admin'</code> の代わりに <code class=\"docutils literal notranslate\">'django.contrib.admin.apps.SimpleAdminConfig'</code> を指定する必要があります。</p>\n</section>\n<section id=\"modeladmin-options\">\n<h3><code class=\"docutils literal notranslate\">ModelAdmin</code> のオプション<a class=\"heading-anchor\" href=\"#modeladmin-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">ModelAdmin</code> は非常に柔軟にできています。インターフェイスをカスタマイズするために、様々なオプションが用意されています。すべてのプションは <code class=\"docutils literal notranslate\">ModelAdmin</code> サブクラスで定義します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    date_hierarchy <span class=\"o\">=</span> <span class=\"s2\">&quot;pub_date&quot;</span>\n</code></pre></div>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.actions\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">actions</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.actions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>チェンジリストページで有効化するアクションのリストです。詳細は <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/actions/\"><span class=\"doc\">管理アクション</span></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.actions_on_top\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">actions_on_top</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.actions_on_top\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.actions_on_bottom\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">actions_on_bottom</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.actions_on_bottom\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ページ上のどこにアクションバーが表示されかをコントロールします。デフォルトでは、admin チェンジリストはページのトップにアクションを表示します (<code class=\"docutils literal notranslate\">actions_on_top = True; actions_on_bottom = False</code>)。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.actions_selection_counter\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">actions_selection_counter</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.actions_selection_counter\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>アクションのドロップダウンの隣に選択用カウンターを表示するかどうかをコントロールします。デフォルトでは、admin チェンジリストは表示するようになっています (<code class=\"docutils literal notranslate\">actions_selection_counter = True</code>)。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.date_hierarchy\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">date_hierarchy</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.date_hierarchy\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">date_hierarchy</code> をモデル内の <code class=\"docutils literal notranslate\">DateField</code> か <code class=\"docutils literal notranslate\">DateTimeField</code> の名前にセットすると、チェンジリストのページがそのフィールドによる日付ベースのドリルダウンナビゲーションを含むようになります。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>date_hierarchy <span class=\"o\">=</span> <span class=\"s2\">&quot;pub_date&quot;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">__</code> ルックアップを使用して、関連するモデルのフィールドを指定することもできます。たとえば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>date_hierarchy <span class=\"o\">=</span> <span class=\"s2\">&quot;author__pub_date&quot;</span>\n</code></pre></div>\n<p>この機能は、有効なデータに基づいて、適切に変化させます。たとえば、すべての日付が 1 月に収まっている場合、日のドリルダウンのみを表示します。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">date_hierarchy</code> は内部的に <a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#django.db.models.query.QuerySet.datetimes\" title=\"django.db.models.query.QuerySet.datetimes\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.datetimes()</code></a> を使用します。タイムゾーンサポートが有効 (<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\">USE_TZ = True</code></a>) な際に注意すべき点について、ドキュメントを参照してください。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.empty_value_display\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">empty_value_display</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.empty_value_display\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>この属性は、空(<code class=\"docutils literal notranslate\">None</code>、空の文字列、等)のレコードのフィールドに対するデフォルトの表示値をオーバーライドします。デフォルト値は <code class=\"docutils literal notranslate\">-</code> (ダッシュ)です。たとえば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    empty_value_display <span class=\"o\">=</span> <span class=\"s2\">&quot;-empty-&quot;</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.empty_value_display\" title=\"django.contrib.admin.AdminSite.empty_value_display\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.empty_value_display</code></a> ですべての admin ページもしくは特定のフィールドに対して <code class=\"docutils literal notranslate\">empty_value_display</code> をオーバーライドすることもできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;view_birth_date&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>empty_value<span class=\"o\">=</span><span class=\"s2\">&quot;???&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">view_birth_date</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> obj<span class=\"o\">.</span>birth_date\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.exclude\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">exclude</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.exclude\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>この属性を使用する場合、フォームから除外するフィールドの名称をリストで指定します。</p>\n<p>たとえば、以下のモデルを考えてみましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    birth_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">Author</code> モデルに対するフォームが <code class=\"docutils literal notranslate\">name</code> と <code class=\"docutils literal notranslate\">title</code> の 2 つのフィールドのみを含むようにしたい場合、以下のように <code class=\"docutils literal notranslate\">fields</code> か <code class=\"docutils literal notranslate\">exclude</code> を指定することになります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    exclude <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;birth_date&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Author モデルが 3 つのフィールド (<code class=\"docutils literal notranslate\">name</code>、<code class=\"docutils literal notranslate\">title</code>、<code class=\"docutils literal notranslate\">birth_date</code>) しか持っていないので、上記の宣言によって生成されるフォームはまったく同じフィールドを持つことになります。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&quot;add&quot; と &quot;change&quot; 上のフォームでシンプルなレイアウト変更 (有効なフィールドのみ表示、順序の変更、行のグルーピングなど) を行うには、<code class=\"docutils literal notranslate\">fields</code> オプションを使用してください。たとえば、以下のように、<a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/flatpages/#django.contrib.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.flatpages.models.FlatPage</code></a> モデルに対して admin フォームのよりシンプルなバージョンを定義できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;content&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>上記の例では、指定したフィールド (<code class=\"docutils literal notranslate\">url</code>、<code class=\"docutils literal notranslate\">title</code>、<code class=\"docutils literal notranslate\">content</code>) だけが (結果として) フォーム上で表示されます。<code class=\"docutils literal notranslate\">fields</code> は <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.readonly_fields</code></a> で定義される値を持つことができ、読み取り専用で表示されます。</p>\n<p>より複雑なレイアウトを作るには、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">fieldsets</code></a> オプションを参照してください。</p>\n<p><code class=\"docutils literal notranslate\">fields</code> オプションは、 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a> と同じタイプの値を受け付けますが、呼び出し可能オブジェクトを受け付けないところが異なります。 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">readonly_fields</code></a> にリスト化されている場合、モデルの名前とモデルの admin メソッドのみが使用されます。</p>\n<p>1 つの行に複数のフィールドを表示するには、タプルで囲んでください。この例では、<code class=\"docutils literal notranslate\">url</code> と <code class=\"docutils literal notranslate\">title</code> フィールドが同じ行に表示され、<code class=\"docutils literal notranslate\">content</code> フィールドは次の行に表示されます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fields <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;content&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition-possible-confusion-with-the-modeladmin-fieldsets-option admonition\" role=\"note\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\">ModelAdmin.fieldsets</code> オプションとの混同の可能性</p>\n<p>この <code class=\"docutils literal notranslate\">fields</code> オプションと、次のセクションで説明する <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">fieldsets</code></a> における <code class=\"docutils literal notranslate\">fields</code> ディクショナリキーは別物です。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\">fields</code> と <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">fieldsets</code></a> オプションのどちらも存在しない場合、Django はデフォルトで <code class=\"docutils literal notranslate\">AutoField</code> と <code class=\"docutils literal notranslate\">editable=True</code> 以外の各フィールドを、単一のフィールドセットで、モデル内でフィールドが定義されたとおりの順番で表示します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.fieldsets\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">fieldsets</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin の &quot;add&quot; と &quot;change&quot; ページのレイアウトをコントロールするには、<code class=\"docutils literal notranslate\">fieldsets</code> をセットしてください。</p>\n<p><code class=\"docutils literal notranslate\">fieldsets</code> は、2 値タプルのリストで、各 2 値タプルは admin フォームページの <code class=\"docutils literal notranslate\">&lt;fieldset&gt;</code> を表します。 (<code class=\"docutils literal notranslate\">&lt;fieldset&gt;</code> はフォームの &quot;section&quot; です。)</p>\n<p>2 値タプルのフォーマットは <code class=\"docutils literal notranslate\">(name, field_options)</code> で、<code class=\"docutils literal notranslate\">name</code> はフィールドセットのタイトル文字列を表し、<code class=\"docutils literal notranslate\">field_options</code> フィールドセットに関する情報のディクショナリで、表示するフィールドのリストを含みます。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/flatpages/#django.contrib.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\">django.contrib.flatpages.models.FlatPage</code></a> モデルを用いた例は以下のようになります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fieldsets <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span>\n            <span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;url&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;content&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sites&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">),</span>\n        <span class=\"p\">(</span>\n            <span class=\"s2\">&quot;Advanced options&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;registration_required&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;template_name&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>これにより、admin ページは以下のような見た目となります:</p>\n<img alt=\"/ja/5.0/_images/fieldsets.png\" src=\"/ja/5.0/_images/fieldsets.png\" />\n<p><code class=\"docutils literal notranslate\">fieldsets</code> と <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">fields</code></a> オプションのどちらも存在しない場合、Django はデフォルトで <code class=\"docutils literal notranslate\">AutoField</code> と <code class=\"docutils literal notranslate\">editable=True</code> 以外の各フィールドを、単一のフィールドセットで、モデル内でフィールドが定義されたとおりの順番で表示します。</p>\n<p><code class=\"docutils literal notranslate\">field_options</code> ディクショナリは以下のキーを持つことができます:</p>\n<ul>\n<li><dl>\n<dt><code class=\"docutils literal notranslate\">fields</code></dt><dd><p>フィールドセット内に表示するフィールド名のリストまたはタプルです。このキーは必須です。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span>\n    <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;address&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;city&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;state&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">fields</code></a> オプションと同様に、複数のフィールドを 1 行に表示するにはタプルでこれらのフィールドを囲んでください。この例では、<code class=\"docutils literal notranslate\">first_name</code> と <code class=\"docutils literal notranslate\">last_name</code> フィールドが 1 つの行に表示されます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span>\n    <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[(</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;address&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;city&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;state&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">fields</code> は <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.readonly_fields</code></a> で定義される値を持つことができ、読み取り専用で表示されます。</p>\n<p><code class=\"docutils literal notranslate\">fields</code> に呼び出し可能オブジェクトの名前を追加した場合、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">fields</code></a> オプションと同じルールが適用されます: 呼び出し可能オブジェクトは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">readonly_fields</code></a> 内でリスト化される必要があります。</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt><code class=\"docutils literal notranslate\">classes</code></dt><dd><p>フィールドセットに適用する追加的な CSS を含むリストないしタプルです。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span>\n    <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;wide&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;extrapretty&quot;</span><span class=\"p\">],</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">collapse</code> と <code class=\"docutils literal notranslate\">wide</code> の 2 つの便利なクラスがデフォルトの admin サイトのスタイルシートで定義されています。 <code class=\"docutils literal notranslate\">collapse</code> スタイルのフィールドセットは初期状態では admin 内で折りたたまれており、&quot;click to expand&quot; リンクで置き換えられています。 <code class=\"docutils literal notranslate\">wide</code> スタイルのフィールドセットは水平方向の追加的な余白が与えられます。</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt><code class=\"docutils literal notranslate\">description</code></dt><dd><p>各フィールドセットの上部、フィールドセットの見出しの下に表示されるオプションの追加テキストの文字列です。この文字列は <a class=\"reference internal\" href=\"#django.contrib.admin.TabularInline\" title=\"django.contrib.admin.TabularInline\"><code class=\"xref py py-class docutils literal notranslate\">TabularInline</code></a> のレイアウト上、レンダリングされません。</p>\n<p>この値は、管理インターフェイスに表示されるときにはHTMLエスケープされないことに注意してください。これにより、HTML を含めることができます。あるいは、プレーンテキストと <a class=\"reference internal\" href=\"/ja/5.0/ref/utils/#django.utils.html.escape\" title=\"django.utils.html.escape\"><code class=\"xref py py-func docutils literal notranslate\">django.utils.html.escape()</code></a> を使って HTML の特殊文字をエスケープすることもできます。</p>\n</dd>\n</dl>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.filter_horizontal\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">filter_horizontal</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.filter_horizontal\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> は <code class=\"docutils literal notranslate\">&lt;select multiple&gt;</code> で admin サイトで表示されます。複数選択のボックスは、たくさんのアイテムを選択するには不向きです。<a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> をこのリストに加えると、代わりにかっこよくて控えめな JavaScript の &quot;filter&quot; インターフェースを使用します。非選択および選択済みのオプションは 2 つのボックスに並べて表示されます。垂直方向のインターフェースを使用するには <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.filter_vertical\" title=\"django.contrib.admin.ModelAdmin.filter_vertical\"><code class=\"xref py py-attr docutils literal notranslate\">filter_vertical</code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.filter_vertical\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">filter_vertical</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.filter_vertical\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.filter_horizontal\" title=\"django.contrib.admin.ModelAdmin.filter_horizontal\"><code class=\"xref py py-attr docutils literal notranslate\">filter_horizontal</code></a> と同じですが、フィルタインターフェイスを垂直方向に表示し、非選択のオプションは選択済みのオプションの上部に表示されます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.form\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">form</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトではモデルに対して <code class=\"docutils literal notranslate\">ModelForm</code> が動的に生成されます。追加と変更の両方のページで使用されるフォームです。独自の <code class=\"docutils literal notranslate\">ModelForm</code> を定義すれば、追加と変更のページでフォームの挙動を簡単にオーバーライドできます。あるいは、まったく新しいモデルフォームを作る代わりに、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_form\" title=\"django.contrib.admin.ModelAdmin.get_form\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.get_form()</code></a> メソッドを使ってデフォルトのフォームをカスタムすることもできます。</p>\n<p>例については <a class=\"reference internal\" href=\"#admin-custom-validation\"><span class=\"std std-ref\">カスタムのバリデーションを admin に追加する</span></a> を参照してください。</p>\n<aside class=\"admonition-omit-the-meta-model-attribute admonition\" role=\"note\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\">Meta.model</code> 属性を省略する</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> で <code class=\"docutils literal notranslate\">Meta.model</code> 属性を定義した場合、<code class=\"docutils literal notranslate\">Meta.fields</code> 属性 (もしくは <code class=\"docutils literal notranslate\">Meta.exclude</code> 属性) も定義する必要があります。しかし、admin 自身がフィールドを定義する方法を持っているため、<code class=\"docutils literal notranslate\">Meta.fields</code> 属性は無視されます。</p>\n<p><code class=\"docutils literal notranslate\">ModelForm</code> を admin のみで使用する場合は、<code class=\"docutils literal notranslate\">ModelAdmin</code> が使用する正しいモデルを提供するため、<code class=\"docutils literal notranslate\">Meta.model</code> 属性を省略するのが手っ取り早い解決法です。あるいは、<code class=\"docutils literal notranslate\">Meta</code> クラス内で <code class=\"docutils literal notranslate\">fields = []</code> をセットして <code class=\"docutils literal notranslate\">ModelForm</code> のバリデーションの条件を満たすこともできます。</p>\n</aside>\n<aside class=\"admonition-modeladmin-exclude-takes-precedence admonition\" role=\"note\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\">ModelAdmin.exclude</code> が優先されます</p>\n<p><code class=\"docutils literal notranslate\">ModelForm</code> と <code class=\"docutils literal notranslate\">ModelAdmin</code> の両方で <code class=\"docutils literal notranslate\">exclude</code> オプションが定義されている場合、<code class=\"docutils literal notranslate\">ModelAdmin</code> は優先順位に従います。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Person\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>ModelForm<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        model <span class=\"o\">=</span> Person\n        exclude <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    exclude <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;age&quot;</span><span class=\"p\">]</span>\n    form <span class=\"o\">=</span> PersonForm\n</code></pre></div>\n<p>この例では、生成されるフォームで &quot;age&quot; フィールドは除外されますが &quot;name&quot; フィールドは含まれます。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.formfield_overrides\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">formfield_overrides</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.formfield_overrides\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin 内で使用するための <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a> のうちある程度の部分をオーバーライドする簡単 (だけど汚い) 方法を提供します。<code class=\"docutils literal notranslate\">formfield_overrides</code> はディクショナリで、フィールドクラスの構成時にフィールドに渡す引数のディクショナリをマッピングします。</p>\n<p>これでは抽象的すぎるので、具体的な例を見てみましょう。<code class=\"docutils literal notranslate\">formfield_overrides</code> のもっとも一般的な使い道は、特定のタイプのフィールドに対してカスタムしたウィジェットを追加することです。大きなテキストフィールドを使用するために、デフォルトの <code class=\"docutils literal notranslate\">&lt;textarea&gt;</code> の代わりに <code class=\"docutils literal notranslate\">RichTextEditorWidget</code> を使いたいとしましょう。この場合、以下のように記述します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"c1\"># Import our custom widget and our model from where they&#39;re defined</span>\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> MyModel\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.widgets</span> <span class=\"kn\">import</span> RichTextEditorWidget\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    formfield_overrides <span class=\"o\">=</span> <span class=\"p\">{</span>\n        models<span class=\"o\">.</span>TextField<span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;widget&quot;</span><span class=\"p\">:</span> RichTextEditorWidget<span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>ディクショナリ内のキーは文字列 <em>ではなく</em> 実際のフィールドクラスである点に注意してください。値は別のディクショナリです; これらの引数はフォームフィールドの <code class=\"docutils literal notranslate\">__init__()</code> メソッドに渡されます。詳細は <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> を参照してください。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>リレーションフィールド (例えば <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> や <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>) でカスタムウィジェットを使用したいときは、,  <code class=\"docutils literal notranslate\">raw_id_fields</code>、<code class=\"docutils literal notranslate\">radio_fields</code>、<code class=\"docutils literal notranslate\">autocomplete_fields</code> にそのフィールドの名前を含まないようにしてください。</p>\n<p><code class=\"docutils literal notranslate\">formfield_overrides</code> は、<code class=\"docutils literal notranslate\">raw_id_fields</code>、<code class=\"docutils literal notranslate\">radio_fields</code>、<code class=\"docutils literal notranslate\">autocomplete_fields</code> のどれかがセットされたリレーションフィールドのウィジェットは変更しません。これは、<code class=\"docutils literal notranslate\">raw_id_fields</code>、<code class=\"docutils literal notranslate\">radio_fields</code>、<code class=\"docutils literal notranslate\">autocomplete_fields</code> の 3 つがこれら自身のカスタムウィジェットを暗示するからです。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.inlines\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">inlines</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.inlines\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>後述の <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a> オブジェクトと <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_formsets_with_inlines\" title=\"django.contrib.admin.ModelAdmin.get_formsets_with_inlines\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.get_formsets_with_inlines()</code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_display\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_display</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_display\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のチェンジリストページでどのフィールドを表示するかコントロールするために、<code class=\"docutils literal notranslate\">list_display</code> をセットします。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">list_display</code> をセットしない場合、admin サイトは各オブジェクトの <code class=\"docutils literal notranslate\">__str__()</code> 表現を表示する単一の列を表示します。</p>\n<p><code class=\"docutils literal notranslate\">list_display</code> で使用できる値は 4 種類あります。最も単純なもの以外は、フィールドの表示方法をカスタマイズするために <a class=\"reference internal\" href=\"#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a> デコレータを使用できます。</p>\n<ul>\n<li><p>モデルフィールドの名前。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p>1 つの引数 (モデルのインスタンス) を受け入れる呼び出し可能オブジェクトです。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>description<span class=\"o\">=</span><span class=\"s2\">&quot;Name&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">upper_case_name</span><span class=\"p\">(</span>obj<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span>obj<span class=\"o\">.</span>first_name<span class=\"si\">}</span><span class=\"s2\"> </span><span class=\"si\">{</span>obj<span class=\"o\">.</span>last_name<span class=\"si\">}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span>upper<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span>upper_case_name<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p>1 つの引数 (モデルのインスタンス) を受け入れる <code class=\"docutils literal notranslate\">ModelAdmin</code> メソッドを表す文字列です。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;upper_case_name&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>description<span class=\"o\">=</span><span class=\"s2\">&quot;Name&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">upper_case_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span>obj<span class=\"o\">.</span>first_name<span class=\"si\">}</span><span class=\"s2\"> </span><span class=\"si\">{</span>obj<span class=\"o\">.</span>last_name<span class=\"si\">}</span><span class=\"s2\">&quot;</span><span class=\"o\">.</span>upper<span class=\"p\">()</span>\n</code></pre></div>\n</li>\n<li><p>モデルの属性や (必須の引数を持たない) メソッドを表す文字列です。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    birthday <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>description<span class=\"o\">=</span><span class=\"s2\">&quot;Birth decade&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">decade_born_in</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        decade <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>birthday<span class=\"o\">.</span>year <span class=\"o\">//</span> <span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"mi\">10</span>\n        <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span>decade<span class=\"si\">}</span><span class=\"s2\">’s&quot;</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;decade_born_in&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</li>\n</ul>\n<p><code class=\"docutils literal notranslate\">list_display</code> に関する特殊な状況の注意点があります。</p>\n<ul>\n<li><p>フィールドが <code class=\"docutils literal notranslate\">ForeignKey</code> の場合、 Django はリレーション先オブジェクトの <code class=\"docutils literal notranslate\">__str__()</code> を表示します。</p></li>\n<li><p><code class=\"docutils literal notranslate\">ManyToManyField</code> フィールドは、テーブル内で各行に対して個別の SQL ステートメントを実行する可能性があるため、サポートされていません。それでも使いたい場合は、モデルにカスタムメソッドを作成し、そのメソッドの名前を <code class=\"docutils literal notranslate\">list_display</code> に追加してください。 (<code class=\"docutils literal notranslate\">list_display</code> 内でのカスタムメソッドについてより詳しくは下記を参照してください。)</p></li>\n<li><p>フィールドが <code class=\"docutils literal notranslate\">BooleanField</code> の場合、Django は <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code>, <code class=\"docutils literal notranslate\">None</code> の代わりに、かわいい &quot;yes&quot;, &quot;no&quot;, &quot;unknown&quot; アイコンを表示します。</p></li>\n<li><p>与えられた文字列がモデル、<code class=\"docutils literal notranslate\">ModelAdmin</code>、呼び出し可能オブジェクトのどれかの場合、Django はデフォルトで HTML エスケープして出力します。ユーザーの入力をエスケープしたり非エスケープのタグを使う場合、<a class=\"reference internal\" href=\"/ja/5.0/ref/utils/#django.utils.html.format_html\" title=\"django.utils.html.format_html\"><code class=\"xref py py-func docutils literal notranslate\">format_html()</code></a> を使用してください。</p>\n<p>以下は、モデルの例です。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.html</span> <span class=\"kn\">import</span> format_html\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    color_code <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display\n    <span class=\"k\">def</span> <span class=\"nf\">colored_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> format_html<span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;span style=&quot;color: #</span><span class=\"si\">{}</span><span class=\"s1\">;&quot;&gt;</span><span class=\"si\">{}</span><span class=\"s1\"> </span><span class=\"si\">{}</span><span class=\"s1\">&lt;/span&gt;&#39;</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>color_code<span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>last_name<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;colored_name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p>これまでの例で見てきたように、呼び出し可能オブジェクト、モデルメソッド、または <code class=\"docutils literal notranslate\">ModelAdmin</code> メソッドを使用する場合、 <a class=\"reference internal\" href=\"#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a> デコレータで呼び出し可能オブジェクトをラップし、 <code class=\"docutils literal notranslate\">description</code> 引数を渡すことで、カラムのタイトルをカスタマイズできます。</p></li>\n<li><p>フィールドの値が <code class=\"docutils literal notranslate\">None</code>、空の文字列、エレメントを持たない iterable のいずれかの場合、Django は <code class=\"docutils literal notranslate\">-</code> (ダッシュ) を表示します。この挙動は <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.empty_value_display\" title=\"django.contrib.admin.AdminSite.empty_value_display\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.empty_value_display</code></a> でオーバーライドできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>empty_value_display <span class=\"o\">=</span> <span class=\"s2\">&quot;(None)&quot;</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.empty_value_display\" title=\"django.contrib.admin.ModelAdmin.empty_value_display\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.empty_value_display</code></a> も使用できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    empty_value_display <span class=\"o\">=</span> <span class=\"s2\">&quot;unknown&quot;</span>\n</code></pre></div>\n<p>もしくは、フィールドレベルで以下のようにできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birth_date_view&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>empty_value<span class=\"o\">=</span><span class=\"s2\">&quot;unknown&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">birth_date_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> obj<span class=\"o\">.</span>birth_date\n</code></pre></div>\n</li>\n<li><p>与えられた文字列がモデル <code class=\"docutils literal notranslate\">ModelAdmin</code> のメソッドか、 <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code>, <code class=\"docutils literal notranslate\">None</code> を返す呼び出し可能オブジェクトの場合、 Django はそのメソッドを <a class=\"reference internal\" href=\"#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a> デコレータでラップし、 <code class=\"docutils literal notranslate\">boolean</code> 引数を <code class=\"docutils literal notranslate\">True</code> で渡すと、かわいい &quot;yes&quot;, &quot;no&quot;, &quot;unknown&quot; アイコンを表示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    birthday <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>boolean<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">born_in_fifties</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"mi\">1950</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>birthday<span class=\"o\">.</span>year <span class=\"o\">&lt;</span> <span class=\"mi\">1960</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;born_in_fifties&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\">__str__()</code> メソッドは、他のモデルメソッドとまったく同様に <code class=\"docutils literal notranslate\">list_display</code> 内でも有効です。つまり、以下のような書き方は完璧に OK です。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;__str__&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;some_other_field&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</li>\n<li><p>通常、実際のデータベースフィールドではない <code class=\"docutils literal notranslate\">list_display</code> の要素は、ソートに使用できません (Django のソートはすべてデータベースレベルで実行されるためです)。</p>\n<p>しかし、<code class=\"docutils literal notranslate\">list_display</code> の要素が特定のデータベースフィールドを表す場合、メソッドに <a class=\"reference internal\" href=\"#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a> デコレータを使用し、 <code class=\"docutils literal notranslate\">ordering</code> 引数を渡すことで、その事実を伝えることができます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.html</span> <span class=\"kn\">import</span> format_html\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    color_code <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>ordering<span class=\"o\">=</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">colored_first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> format_html<span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;span style=&quot;color: #</span><span class=\"si\">{}</span><span class=\"s1\">;&quot;&gt;</span><span class=\"si\">{}</span><span class=\"s1\">&lt;/span&gt;&#39;</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>color_code<span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;colored_first_name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>上記のコードは、admin 内で <code class=\"docutils literal notranslate\">colored_first_name</code> で ソートしようとするとき、<code class=\"docutils literal notranslate\">first_name</code> フィールドで並べ替えるよう Django に伝えます。</p>\n<p>引数 <code class=\"docutils literal notranslate\">ordering</code> で降順を示すには、フィールド名の前にハイフンをつけます。上記の例を使うと、次のようになります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>ordering<span class=\"o\">=</span><span class=\"s2\">&quot;-first_name&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">colored_first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>引数 <code class=\"docutils literal notranslate\">Lordering</code> はリレーション先モデルの値でソートするクエリのルックアップをサポートします。この例では、&quot;author first name&quot; カラムをリストに表示し、first name でソートできるようにしています。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Blog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">)</span>\n    author <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Person<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">BlogAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;author_first_name&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>ordering<span class=\"o\">=</span><span class=\"s2\">&quot;author__first_name&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">author_first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        <span class=\"k\">return</span> obj<span class=\"o\">.</span>author<span class=\"o\">.</span>first_name\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/models/expressions/\"><span class=\"doc\">クエリ式</span></a> は <code class=\"docutils literal notranslate\">ordering</code> 引数と一緒に使うことができます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Value\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Concat\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>ordering<span class=\"o\">=</span>Concat<span class=\"p\">(</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> Value<span class=\"p\">(</span><span class=\"s2\">&quot; &quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">))</span>\n    <span class=\"k\">def</span> <span class=\"nf\">full_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>first_name <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\">list_display</code> の要素はプロパティにすることもできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>\n        ordering<span class=\"o\">=</span><span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">,</span>\n        description<span class=\"o\">=</span><span class=\"s2\">&quot;Full name of the person&quot;</span><span class=\"p\">,</span>\n        boolean<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">full_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>first_name <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;full_name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>ただし、<code class=\"docutils literal notranslate\">&#64;property</code> は <code class=\"docutils literal notranslate\">&#64;display</code> より上でなければなりません。<a class=\"reference internal\" href=\"#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a> デコレータを使用するのではなく、直接表示関連の属性を設定する古い方法を使用している場合は、<code class=\"docutils literal notranslate\">&#64;property</code> デコレータではなく、<code class=\"docutils literal notranslate\">property()</code> 関数を使用しなければならないことに注意してください。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">my_property</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>first_name <span class=\"o\">+</span> <span class=\"s2\">&quot; &quot;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name\n\n\nmy_property<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s2\">&quot;Full name of the person&quot;</span>\nmy_property<span class=\"o\">.</span>admin_order_field <span class=\"o\">=</span> <span class=\"s2\">&quot;last_name&quot;</span>\nmy_property<span class=\"o\">.</span>boolean <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\nfull_name <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span>my_property<span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>プロパティの <code class=\"docutils literal notranslate\">boolean</code> 属性をサポートしました。</p>\n</aside>\n</li>\n<li><p><code class=\"docutils literal notranslate\">list_display</code> のフィールド名はHTMLの出力でも <code class=\"docutils literal notranslate\">&lt;th&gt;</code> 要素に <code class=\"docutils literal notranslate\">column-&lt;field_name&gt;</code> という形でCSSクラスとして表示されます。これは例えばCSSファイルでカラムの幅を設定するのに使うことができます。</p></li>\n<li><p>Django は、<code class=\"docutils literal notranslate\">list_display</code> の各要素を以下の順番で解釈しようとします。</p>\n<ul class=\"simple\">\n<li><p>モデルのフィールド。</p></li>\n<li><p>呼び出し可能オブジェクト。</p></li>\n<li><p><code class=\"docutils literal notranslate\">ModelAdmin</code> 属性を表す文字列。</p></li>\n<li><p>モデル属性を表す文字列。</p></li>\n</ul>\n<p>たとえば、<code class=\"docutils literal notranslate\">first_name</code> がモデルフィールドと <code class=\"docutils literal notranslate\">ModelAdmin</code> 属性の両方で存在する場合、モデルフィールドの方が使用されます。</p>\n</li>\n</ul>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_display_links\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_display_links</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_display_links\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a> 内のフィールドにおいて &quot;変更&quot; ページへのリンクをコントロールするには、<code class=\"docutils literal notranslate\">list_display_links</code> を使用してください。</p>\n<p>デフォルトでは、チェンジリストページは最初のカラム (<code class=\"docutils literal notranslate\">list_display</code> で最初に指定したフィールド) に各アイテムの変更ページへのリンクが貼られています。しかし、<code class=\"docutils literal notranslate\">list_display_links</code> を使って変更できます。</p>\n<ul>\n<li><p>リンクを貼らない場合は <code class=\"docutils literal notranslate\">None</code> をセットしてください。</p></li>\n<li><p>(<code class=\"docutils literal notranslate\">list_display</code> と同様のフォーマットで) リンクに変換したいカラムのフィールドのリストないしタプルをセットしてください。</p>\n<p>1 つないし複数のフィールドを指定できます。<code class=\"docutils literal notranslate\">list_display</code> にある限り、Django はいくつのフィールドがリンクになろうと気にしません。唯一の要件は、<code class=\"docutils literal notranslate\">list_display_links</code> をこの方式で使いたいときは <code class=\"docutils literal notranslate\">list_display</code> を指定することです。</p>\n</li>\n</ul>\n<p>以下の例では、<code class=\"docutils literal notranslate\">first_name</code> と <code class=\"docutils literal notranslate\">last_name</code> フィールドがチェンジリストページでリンクされます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birthday&quot;</span><span class=\"p\">]</span>\n    list_display_links <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>以下の例では、チェンジリストページのグリッドにはリンクがなくなります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">AuditEntryAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;timestamp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;message&quot;</span><span class=\"p\">]</span>\n    list_display_links <span class=\"o\">=</span> <span class=\"kc\">None</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\" id=\"admin-list-editable\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_editable\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_editable</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_editable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>チェンジリストページ上での編集を有効にしたいモデルのフィールド名のリストを <code class=\"docutils literal notranslate\">list_editable</code> にセットしてください。<code class=\"docutils literal notranslate\">list_editable</code> に指定されたフィールドは、チェンジリストページ上でフォームウィジェットとして表示され、ユーザーは複数の行を一度に編集して保存できます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">list_editable</code> は、他のオプションと特定部分で相互関係にあります。以下のルールに注意してください。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">list_editable</code> 内のすべてのフィールドは <code class=\"docutils literal notranslate\">list_display</code> に含まれている必要があります。表示されていないフィールドは編集できないのです！</p></li>\n<li><p><code class=\"docutils literal notranslate\">list_editable</code> と <code class=\"docutils literal notranslate\">list_display_links</code> に同じフィールドを同時に指定することはできません -- 1 つのフィールドがフォームとリンクの両方になることはできないからです。</p></li>\n</ul>\n<p>これらのルールを破った場合、バリデーションエラーとなります。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_filter\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_filter</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_filter\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のチェンジリストページの右サイドバーのフィルタを有効化するには、<code class=\"docutils literal notranslate\">list_filter</code> をセットしてください。</p>\n<p>最もシンプルな <code class=\"docutils literal notranslate\">list_filter</code> はフィルタリングを有効にするフィールド名のリストまたはタプルを受け取りますが、より高度なオプションもいくつか用意されています。詳細は <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/filters/#modeladmin-list-filters\"><span class=\"std std-ref\">ModelAdmin リストフィルタ</span></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_max_show_all\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_max_show_all</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_max_show_all\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&quot;Show all&quot; の admin チェンジリストページで表示するアイテム数をコントロールするには、<code class=\"docutils literal notranslate\">list_max_show_all</code> をセットしてください。チェンジリストページの &quot;Show all&quot; リンクは、この設定値以下の場合のみ表示されます。デフォルトでは <code class=\"docutils literal notranslate\">200</code> にセットされています。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_per_page\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_per_page</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_per_page\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ページ分割された admin のチェンジリストページに表示するアイテム数をコントロールするには、<code class=\"docutils literal notranslate\">list_per_page</code> をセットしてください。デフォルトでは <code class=\"docutils literal notranslate\">100</code> にセットされています。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.list_select_related\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">list_select_related</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.list_select_related\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のチェンジリストページでオブジェクトのリストを検索するときに <a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\">select_related()</code></a> を使用するよう Django に伝えるには、<code class=\"docutils literal notranslate\">list_select_related</code> をセットしてください。これにより多くのデータベースクエリを削減できます。</p>\n<p>値は真偽値、リスト、タプルのどれかでなければなりません。デフォルトは <code class=\"docutils literal notranslate\">False</code> です。</p>\n<p>値が <code class=\"docutils literal notranslate\">True</code> のとき、常に <code class=\"docutils literal notranslate\">select_related()</code> が呼ばれます。<code class=\"docutils literal notranslate\">False</code> のときは、<code class=\"docutils literal notranslate\">ForeignKey</code> が存在する場合 Django は <code class=\"docutils literal notranslate\">list_display</code> を参照して <code class=\"docutils literal notranslate\">select_related()</code> を呼び出します。</p>\n<p>よりきめ細やかにコントロールする場合は、<code class=\"docutils literal notranslate\">list_select_related</code> の値にタプル (ないしリスト) を使用してください。空のタプルは、Django が <code class=\"docutils literal notranslate\">select_related</code> を一切呼び出さないようにします。他のタプルは、パラメータとして直接 <code class=\"docutils literal notranslate\">select_related</code> に渡されます。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_select_related <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;category&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>これは <code class=\"docutils literal notranslate\">select_related('author', 'category')</code> を呼び出します。</p>\n<p>リクエストに基づいた動的な値を指定する場合は、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_list_select_related\" title=\"django.contrib.admin.ModelAdmin.get_list_select_related\"><code class=\"xref py py-meth docutils literal notranslate\">get_list_select_related()</code></a> メソッドを実装できます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">ModelAdmin</code> は <a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\">select_related()</code></a> がチェンジリストの <code class=\"docutils literal notranslate\">QuerySet</code> で既に呼び出されていた場合、この属性を無視します。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.ordering\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">ordering</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.ordering\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Django の admin ビューでオブジェクトのリストをどのようにソートするかを指定するには、 <code class=\"docutils literal notranslate\">ordering</code> をセットしてください。モデルの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ordering</code></a> パラメータと同じフォーマットでリストかタプルを与えてください。</p>\n<p>指定がない場合、Django admin はモデルのデフォルトの並び順を使用します。</p>\n<p>動的なソートを指定する場合 (例えばユーザーや言語に応じて変更する場合など)、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_ordering\" title=\"django.contrib.admin.ModelAdmin.get_ordering\"><code class=\"xref py py-meth docutils literal notranslate\">get_ordering()</code></a> メソッドを実装できます。</p>\n<aside class=\"admonition-performance-considerations-with-ordering-and-sorting admonition\" role=\"note\">\n<p class=\"admonition-title\">並べ替えやソートに伴うパフォーマンス上の注意</p>\n<p>全体のソートのための単一もしくは unique together フィールド指定をチェンジリストが見つけられない場合、チェンジリストは <code class=\"docutils literal notranslate\">pk</code> をチェンジリストに追加します。これは結果の決定論的なソートを保証するためです。</p>\n<p>たとえば、デフォルトのソートが一意でない <code class=\"docutils literal notranslate\">name</code> フィールドによって実行される場合、チェンジリストは <code class=\"docutils literal notranslate\">name</code> と <code class=\"docutils literal notranslate\">pk</code> でソートされます。テーブルのレコード数が多く、 <code class=\"docutils literal notranslate\">name</code> と <code class=\"docutils literal notranslate\">pk</code> のインデックスがない場合は、パフォーマンスの低下を招きます。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.paginator\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">paginator</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.paginator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ページ分割に使われる paginator クラスです。デフォルトでは <a class=\"reference internal\" href=\"/ja/5.0/ref/paginator/#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\">django.core.paginator.Paginator</code></a> が使われます。カスタムの paginator クラスが <a class=\"reference internal\" href=\"/ja/5.0/ref/paginator/#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\">django.core.paginator.Paginator</code></a> と同じコンストラクタインターフェースを持たない場合、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_paginator\" title=\"django.contrib.admin.ModelAdmin.get_paginator\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.get_paginator()</code></a> に対する実装も行う必要があります。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.prepopulated_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">prepopulated_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.prepopulated_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">prepopulated_fields</code> を、フィールド名と事前入力するフィールドをマッピングした辞書に設定します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    prepopulated_fields <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;slug&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">]}</span>\n</code></pre></div>\n<p>設定された場合、指定されたフィールドは割り当てられたフィールドから入力するために JavaScript を使用します。この機能の主な用途は、1つ以上の他のフィールドから <code class=\"docutils literal notranslate\">SlugField</code> フィールドの値を自動的に生成することです。生成される値はソースフィールドの値を連結し、その結果を有効なスラグに変換することで生成されます (たとえば、ダッシュをスペースに置き換えたり、ASCII 文字を小文字にしたりします)。</p>\n<p>事前入力されたフィールドは値が保存された後に JavaScript によって変更されることはありません。通常、スラグが変更されることは望ましくありません (スラグがオブジェクトで使用されている場合、オブジェクトの URL が変更されることになります)。</p>\n<p><code class=\"docutils literal notranslate\">prepopulated_fields</code> は <code class=\"docutils literal notranslate\">DateTimeField</code>、<code class=\"docutils literal notranslate\">ForeignKey</code>、<code class=\"docutils literal notranslate\">OneToOneField</code>、<code class=\"docutils literal notranslate\">ManyToManyField</code> フィールドを受け入れません。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.preserve_filters\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">preserve_filters</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.preserve_filters\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、オブジェクトを作成、編集、削除しても、適用されたフィルタはリストビューに保存されます。この属性を <code class=\"docutils literal notranslate\">False</code> に設定することで、フィルタをクリアできます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.show_facets\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">show_facets</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.show_facets\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p>管理画面のチェンジリストのフィルタにファセット数を表示するかどうかを制御します。デフォルトは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets.ALLOW\" title=\"django.contrib.admin.ModelAdmin.ShowFacets.ALLOW\"><code class=\"xref py py-attr docutils literal notranslate\">ShowFacets.ALLOW</code></a> です。</p>\n<p>表示されている場合、ファセット数は現在適用されているフィルタに合わせて更新されます。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.ShowFacets\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ShowFacets</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.show_facets\" title=\"django.contrib.admin.ModelAdmin.show_facets\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.show_facets</code></a> に指定できる値の Enum。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.ShowFacets.ALWAYS\">\n<span class=\"sig-name descname\">ALWAYS</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets.ALWAYS\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>常にファセット数を表示します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.ShowFacets.ALLOW\">\n<span class=\"sig-name descname\">ALLOW</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets.ALLOW\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>クエリ文字列パラメータ <code class=\"docutils literal notranslate\">_facets</code> が指定された場合に、ファセット数を表示します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.ShowFacets.NEVER\">\n<span class=\"sig-name descname\">NEVER</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets.NEVER\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ファセット数を表示しません。</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><code class=\"docutils literal notranslate\">show_facets</code> に必要な <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets\" title=\"django.contrib.admin.ModelAdmin.ShowFacets\"><code class=\"xref py py-class docutils literal notranslate\">ShowFacets</code></a> の値を指定します。例えば、クエリパラメータを指定することなく常にファセット数を表示したい場合:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"c1\"># Have facets always shown for this model admin.</span>\n    show_facets <span class=\"o\">=</span> admin<span class=\"o\">.</span>ShowFacets<span class=\"o\">.</span>ALWAYS\n</code></pre></div>\n<aside class=\"admonition-performance-considerations-with-facets admonition\" role=\"note\">\n<p class=\"admonition-title\">ファセットを使う場合のパフォーマンス上の注意</p>\n<p>ファセットフィルタを有効にすると、管理画面のチェンジリストページのクエリ数がフィルタの数だけ増えます。これらのクエリは、特に大きなデータセットの場合、パフォーマンスの問題を引き起こすかもしれません。このような場合は、 <code class=\"docutils literal notranslate\">show_facets</code> を <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.ShowFacets.NEVER\" title=\"django.contrib.admin.ModelAdmin.ShowFacets.NEVER\"><code class=\"xref py py-attr docutils literal notranslate\">ShowFacets.NEVER</code></a> に設定して、ファセットを完全に無効にするのが適切でしょう。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.radio_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">radio_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.radio_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、<code class=\"docutils literal notranslate\">ForeignKey</code> や <code class=\"docutils literal notranslate\">choices</code> がセットされたフィールドに対して、Django の admin はセレクトボックスのインターフェース (&lt;select&gt;) を使用します。フィールドが <code class=\"docutils literal notranslate\">radio_fields</code> に指定された場合、Django は代わりに ラジオボタンのインターフェースを使用します。<code class=\"docutils literal notranslate\">group</code> が <code class=\"docutils literal notranslate\">Person</code> モデルの <code class=\"docutils literal notranslate\">ForeignKey</code> だと仮定すると、次のようになります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    radio_fields <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;group&quot;</span><span class=\"p\">:</span> admin<span class=\"o\">.</span>VERTICAL<span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">django.contrib.admin</code> モジュールから <code class=\"docutils literal notranslate\">HORIZONTAL</code> か <code class=\"docutils literal notranslate\">VERTICAL</code> のどちらを使用するか選択してください。</p>\n<p><code class=\"docutils literal notranslate\">ForeignKey</code> ないし <code class=\"docutils literal notranslate\">choices</code> がセットされたフィールド以外は、<code class=\"docutils literal notranslate\">radio_fields</code> に含めないでください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.autocomplete_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">autocomplete_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.autocomplete_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">autocomplete_fields</code> は、<a class=\"reference external\" href=\"https://select2.org/\">Select2</a> オートコンプリート入力に変更したい <code class=\"docutils literal notranslate\">ForeignKey</code> ないし <code class=\"docutils literal notranslate\">ManyToManyField</code> フィールドのリストです。</p>\n<p>デフォルトでは、これらのフィールドに対して admin はセレクトボックスのインターフェース (<code class=\"docutils literal notranslate\">&lt;select&gt;</code>) を使用します。ドロップダウン内に表示する関係インスタンスをすべて選択するオーバーヘッドから逃れたいこともあるでしょう。</p>\n<p>Select2 入力はデフォルトの入力と似た見た目ですが、非同期的にオプションを読み込む検索機能を持っています。こちらの方が高速で、特に関係モデルに多くのインスタンスがある場合にはユーザーフレンドリーです。</p>\n<p>オートコンプリート検索はリレーション先オブジェクトの <code class=\"docutils literal notranslate\">ModelAdmin</code> を使用するため、<code class=\"docutils literal notranslate\">ModelAdmin</code> に <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.search_fields\" title=\"django.contrib.admin.ModelAdmin.search_fields\"><code class=\"xref py py-attr docutils literal notranslate\">search_fields</code></a> を定義する必要があります。</p>\n<p>認可されていないデータが漏洩されるのを防ぐため、オートコンプリートを使うには、ユーザーは必ずリレーション先オブジェクトに対する <code class=\"docutils literal notranslate\">view</code> か <code class=\"docutils literal notranslate\">change</code> 権限を持っていなければなりません。</p>\n<p>結果のソートおよびページ分割は、関係する <code class=\"docutils literal notranslate\">ModelAdmin</code> の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_ordering\" title=\"django.contrib.admin.ModelAdmin.get_ordering\"><code class=\"xref py py-meth docutils literal notranslate\">get_ordering()</code></a> と <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_paginator\" title=\"django.contrib.admin.ModelAdmin.get_paginator\"><code class=\"xref py py-meth docutils literal notranslate\">get_paginator()</code></a> メソッドでコントロールします。</p>\n<p>以下の例では、<code class=\"docutils literal notranslate\">ChoiceAdmin</code> フィールドは <code class=\"docutils literal notranslate\">Question</code> への <code class=\"docutils literal notranslate\">ForeignKey</code> に対するオートコンプリートフィールドを持ちます。結果は <code class=\"docutils literal notranslate\">question_text</code> フィールドによりフィルタされ、また <code class=\"docutils literal notranslate\">date_created</code> フィールドにより並べ替えられます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    ordering <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;date_created&quot;</span><span class=\"p\">]</span>\n    search_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question_text&quot;</span><span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ChoiceAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    autocomplete_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;question&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition-performance-considerations-for-large-datasets admonition\" role=\"note\">\n<p class=\"admonition-title\">巨大なデータセットに対するパフォーマンス上の注意</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.ordering\" title=\"django.contrib.admin.ModelAdmin.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.ordering</code></a> を使った並べ替えは、巨大なクエリセットは遅くなるため、パフォーマンスの問題の原因となります。</p>\n<p>また、検索フィールドがデータベースによるインデックス化がされていないフィールドを含む場合、巨大なテーブルでは貧弱なパフォーマンスしか発揮できなくなってしまいます。</p>\n<p>このような場合は、フルテキストのインデックスサーチを使用した独自の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_search_results\" title=\"django.contrib.admin.ModelAdmin.get_search_results\"><code class=\"xref py py-func docutils literal notranslate\">ModelAdmin.get_search_results()</code></a> 実装を記述するのがよいでしょう。</p>\n<p>また、デフォルトの paginator は常に  <code class=\"docutils literal notranslate\">count()</code> を発行するため、巨大なテーブルでは <code class=\"docutils literal notranslate\">Paginator</code> を変更するのがお勧めです。例えば、<code class=\"docutils literal notranslate\">Paginator.count</code> プロパティのデフォルトの実装をオーバーライドできます。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.raw_id_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">raw_id_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.raw_id_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、<code class=\"docutils literal notranslate\">ForeignKey</code> のフィールドに対して Django の admin はセレクトボックスのインターフェース (<code class=\"docutils literal notranslate\">&lt;select&gt;</code>) を使用します。ドロップダウン内に表示する関係インスタンスをすべて選択するオーバーヘッドから逃れたいこともあるでしょう。</p>\n<p><code class=\"docutils literal notranslate\">raw_id_fields</code> は、<code class=\"docutils literal notranslate\">ForeignKey</code> や <code class=\"docutils literal notranslate\">ManyToManyField</code> に対する <code class=\"docutils literal notranslate\">Input</code> ウィジェットを適用したいフィールドのリストです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    raw_id_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;newspaper&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">raw_id_fields</code> <code class=\"docutils literal notranslate\">Input</code> ウィジェットには、<code class=\"docutils literal notranslate\">ForeignKey</code> の場合はプライマリキーを、<code class=\"docutils literal notranslate\">ManyToManyField</code> の場合はカンマで区切った値のリストを入力します。<code class=\"docutils literal notranslate\">raw_id_fields</code> ウィジェットには、ユーザーが値を検索および選択できるよう、隣にルーペボタンがあります:</p>\n<img alt=\"/ja/5.0/_images/raw_id_fields.png\" src=\"/ja/5.0/_images/raw_id_fields.png\" />\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.readonly_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">readonly_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、すべてのフィールドが編集可能となっています。このオプションに含まれるフィールド (<code class=\"docutils literal notranslate\">list</code> か <code class=\"docutils literal notranslate\">tuple</code> で指定します) は、データをそのまま表示するだけで編集できなくなります。また、追加と編集に使われる <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> からも除外されます。 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.fields</code></a> か <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.fieldsets</code></a> を指定した場合、read-only のフィールドは表示のために存在している必要があります (存在しなければ無視されます)。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.fields</code></a> や <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.fieldsets</code></a> で明示的に並び順を定義しないで <code class=\"docutils literal notranslate\">readonly_fields</code> を使った場合、これらのフィールドはすべての編集可能なフィールドの後に表示されます。</p>\n<p>read-only のフィールドはモデルのフィールドからデータを表示するだけではなく、モデルや <code class=\"docutils literal notranslate\">ModelAdmin</code> クラス自身のメソッドの出力を表示させることもできます。これは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.list_display</code></a> の挙動に似ています。これにより、編集中のオブジェクトのステータスのフィードバックを admin インターフェースに与えることができるようになります。たとえば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.html</span> <span class=\"kn\">import</span> format_html_join\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.safestring</span> <span class=\"kn\">import</span> mark_safe\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    readonly_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;address_report&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"c1\"># description functions like a model field&#39;s verbose_name</span>\n    <span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>description<span class=\"o\">=</span><span class=\"s2\">&quot;Address&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">address_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> instance<span class=\"p\">):</span>\n        <span class=\"c1\"># assuming get_full_address() returns a list of strings</span>\n        <span class=\"c1\"># for each line of the address and you want to separate each</span>\n        <span class=\"c1\"># line by a linebreak</span>\n        <span class=\"k\">return</span> format_html_join<span class=\"p\">(</span>\n            mark_safe<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;br&gt;&quot;</span><span class=\"p\">),</span>\n            <span class=\"s2\">&quot;</span><span class=\"si\">{}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">((</span>line<span class=\"p\">,)</span> <span class=\"k\">for</span> line <span class=\"ow\">in</span> instance<span class=\"o\">.</span>get_full_address<span class=\"p\">()),</span>\n        <span class=\"p\">)</span> <span class=\"ow\">or</span> mark_safe<span class=\"p\">(</span><span class=\"s2\">&quot;&lt;span class=&#39;errors&#39;&gt;I can&#39;t determine this address.&lt;/span&gt;&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.save_as\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">save_as</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.save_as\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のチェンジーフォームで &quot;新規に保存&quot; 機能を有効化するには <code class=\"docutils literal notranslate\">save_as</code> をセットしてください。</p>\n<p>通常、オブジェクトには 3 つの保存オプションがあります: &quot;保存&quot;、&quot;保存して編集を続ける&quot;、&quot;保存して 1 つ追加&quot; です。<code class=\"docutils literal notranslate\">save_as</code> が <code class=\"docutils literal notranslate\">True</code> の場合、&quot;保存して 1 つ追加&quot; が &quot;新規に保存&quot; ボタンに変更され、既存のオブジェクトを変更するのではなく (新しい ID) で新規のオブジェクトが作成されるようになります。</p>\n<p>デフォルトでは <code class=\"docutils literal notranslate\">save_as</code> は <code class=\"docutils literal notranslate\">False</code> にセットされています。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.save_as_continue\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">save_as_continue</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.save_as_continue\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.save_as\" title=\"django.contrib.admin.ModelAdmin.save_as\"><code class=\"xref py py-attr docutils literal notranslate\">save_as=True</code></a> のとき、新規オブジェクトを保存した後のデフォルトのリダイレクト先はそのオブジェクトの変更ビューです。<code class=\"docutils literal notranslate\">save_as_continue=False</code> にセットすると、リダイレクト先がチェンジリストビューになります。</p>\n<p>デフォルトでは <code class=\"docutils literal notranslate\">save_as_continue</code> は <code class=\"docutils literal notranslate\">True</code> にセットされています。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.save_on_top\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">save_on_top</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.save_on_top\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のチェンジフォームの上部に保存ボタンを追加するには <code class=\"docutils literal notranslate\">save_on_top</code> をセットしてください。</p>\n<p>通常、保存ボタンはフォームの下部のみに表示されます。<code class=\"docutils literal notranslate\">save_on_top</code> をセットすると、ボタンは上部と下部の両方に表示されるようになります。</p>\n<p>デフォルトでは <code class=\"docutils literal notranslate\">save_on_top</code> は <code class=\"docutils literal notranslate\">False</code> にセットされています。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.search_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">search_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.search_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のチェンジリストページで検索ボックスを有効化するには <code class=\"docutils literal notranslate\">search_fields</code> をセットしてください。セットするのはフィールド名のリストで、ここで指定したフィールドはテキストボックス内での検索クエリの対象となります。</p>\n<p>指定するフィールドの種類は、<code class=\"docutils literal notranslate\">CharField</code> や <code class=\"docutils literal notranslate\">TextField</code> といったテキストフィールドである必要があります。ルックアップ API の &quot;follow&quot; 記法を使えば <code class=\"docutils literal notranslate\">ForeignKey</code> や <code class=\"docutils literal notranslate\">ManyToManyField</code> をルックアップすることもできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>search_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;foreign_key__related_fieldname&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>たとえば、著者の情報を持つブログエントリーの場合、以下の定義により、著者のメールアドレスによるブログエントリーの検索が可能となります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>search_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;user__email&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>検索ボックスで検索が行われるとき、Django は検索クエリを単語に分割し、(<a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\">icontains</code></a> ルックアップを使って) 大文字と小文字を区別しない各単語を含むオブジェクトを返します。各単語は最低 1 つの <code class=\"docutils literal notranslate\">search_fields</code> に含まれている必要があります。例えば、<code class=\"docutils literal notranslate\">search_fields</code> が <code class=\"docutils literal notranslate\">['first_name', 'last_name']</code> にセットされ、ユーザーが <code class=\"docutils literal notranslate\">john lennon</code> と検索した場合、Django は SQL の <code class=\"docutils literal notranslate\">WHERE</code> 節と同等の検索を実行します。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">WHERE</span> <span class=\"p\">(</span>first_name <span class=\"k\">ILIKE</span> <span class=\"s1\">&#39;%john%&#39;</span> <span class=\"k\">OR</span> last_name <span class=\"k\">ILIKE</span> <span class=\"s1\">&#39;%john%&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">AND</span> <span class=\"p\">(</span>first_name <span class=\"k\">ILIKE</span> <span class=\"s1\">&#39;%lennon%&#39;</span> <span class=\"k\">OR</span> last_name <span class=\"k\">ILIKE</span> <span class=\"s1\">&#39;%lennon%&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>検索クエリには空白を含む引用句を含めることができます。たとえば、ユーザが <code class=\"docutils literal notranslate\">&quot;john winston&quot;</code> や <code class=\"docutils literal notranslate\">'john winston'</code> を検索した場合、 Django はこの SQL の <code class=\"docutils literal notranslate\">WHERE</code> 句と等価な処理を行います。</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">WHERE</span> <span class=\"p\">(</span>first_name <span class=\"k\">ILIKE</span> <span class=\"s1\">&#39;%john winston%&#39;</span> <span class=\"k\">OR</span> last_name <span class=\"k\">ILIKE</span> <span class=\"s1\">&#39;%john winston%&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\">icontains</code> ルックアップを使用したくない場合は、フィールドに追加することで任意のルックアップを使用できます。例えば、<code class=\"docutils literal notranslate\">search_fields</code> を <code class=\"docutils literal notranslate\">['first_name__exact']</code> に設定することで、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\">exact</code></a> を使用できます。</p>\n<p>いくつかの (古い) ショートカットを使って、フィールドルックアップを指定することもできます。以下の文字で <code class=\"docutils literal notranslate\">search_fields</code> 内のフィールドにプレフィックスを追加できます。これはフィールドに <code class=\"docutils literal notranslate\">__&lt;lookup&gt;</code> を追加するのと同等です。</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>プレフィックス</p></th>\n<th class=\"head\"><p>ルックアップ</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>^</p></td>\n<td><p><a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\">istartswith</code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>=</p></td>\n<td><p><a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\">iexact</code></a></p></td>\n</tr>\n<tr class=\"row-even\"><td><p>&#64;</p></td>\n<td><p><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/postgres/search/#std-fieldlookup-search\"><code class=\"xref std std-lookup docutils literal notranslate\">search</code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>None</p></td>\n<td><p><a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\">icontains</code></a></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>検索方法をカスタムする必要がある場合は、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_search_results\" title=\"django.contrib.admin.ModelAdmin.get_search_results\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.get_search_results()</code></a> を使って追加的もしくは代替の検索方法を提供できます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.search_help_text\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">search_help_text</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.search_help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">search_help_text</code> には検索ボックスの下に表示される説明文を指定します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.show_full_result_count\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">show_full_result_count</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.show_full_result_count\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>フィルタリングされた admin ページにオブジェクトのカウント (例: <code class=\"docutils literal notranslate\">99 results (103 total)</code>) を表示するかどうかをコントロールするには、<code class=\"docutils literal notranslate\">show_full_result_count</code> をセットしてください。<code class=\"docutils literal notranslate\">False</code> にセットすると、代わりに <code class=\"docutils literal notranslate\">99 results (Show all)</code> のような文字列が表示されるようになります。</p>\n<p>デフォルトの <code class=\"docutils literal notranslate\">show_full_result_count=True</code> は、テーブル内の全アイテムをカウントするクエリを発行するため、多くの行を含むテーブルではパフォーマンス低下の原因となります。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.sortable_by\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">sortable_by</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.sortable_by\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、チェンジリストページでは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a> で指定された全てのモデルフィールド (および <a class=\"reference internal\" href=\"#django.contrib.admin.display\" title=\"django.contrib.admin.display\"><code class=\"xref py py-func docutils literal notranslate\">display()</code></a> デコレータの <code class=\"docutils literal notranslate\">ordering</code> 引数を使用する呼び出し可能オブジェクト、または <code class=\"docutils literal notranslate\">admin_order_field</code> 属性を持つ呼び出し可能オブジェクト) によるソートが可能です。</p>\n<p>特定のカラムでのソートを無効化したい場合、 <code class=\"docutils literal notranslate\">sortable_by</code> に <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a> サブセットのコレクション (例: <code class=\"docutils literal notranslate\">list</code> 、 <code class=\"docutils literal notranslate\">tuple</code> 、 <code class=\"docutils literal notranslate\">set</code>) をセットしてください。空のコレクションを指定すると、すべてのカラムでソート不可となります。</p>\n<p>リストを動的に指定する必要があるときは、代わりに <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_sortable_by\" title=\"django.contrib.admin.ModelAdmin.get_sortable_by\"><code class=\"xref py py-meth docutils literal notranslate\">get_sortable_by()</code></a> メソッドを実装してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.view_on_site\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">view_on_site</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.view_on_site\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&quot;サイトで見る&quot; リンクを表示するか否かをコントロールするには、<code class=\"docutils literal notranslate\">view_on_site</code> をセットしてください。このリンクは保存されたオブジェクトを表示できる URL に誘導します。</p>\n<p>値は、真偽値か呼び出し可能オブジェクトで指定します。<code class=\"docutils literal notranslate\">True</code> (デフォルトです) の場合、オブジェクトの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.get_absolute_url\" title=\"django.db.models.Model.get_absolute_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_absolute_url()</code></a> メソッドが使われ、URLが生成されます。</p>\n<p>モデルが <a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.get_absolute_url\" title=\"django.db.models.Model.get_absolute_url\"><code class=\"xref py py-meth docutils literal notranslate\">get_absolute_url()</code></a> メソッドを持っていても &quot;サイトで見る&quot; ボタンを表示したくない場合は、<code class=\"docutils literal notranslate\">view_on_site</code> に <code class=\"docutils literal notranslate\">False</code> をセットしてください:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    view_on_site <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n<p>呼び出し可能オブジェクトの場合、引数にモデルのインスタンスを受け入れます。例えば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> reverse\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">view_on_site</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n        url <span class=\"o\">=</span> reverse<span class=\"p\">(</span><span class=\"s2\">&quot;person-detail&quot;</span><span class=\"p\">,</span> kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;slug&quot;</span><span class=\"p\">:</span> obj<span class=\"o\">.</span>slug<span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;https://example.com&quot;</span> <span class=\"o\">+</span> url\n</code></pre></div>\n</dd></dl>\n\n<section id=\"custom-template-options\">\n<h4>カスタムテンプレートのオプション<a class=\"heading-anchor\" href=\"#custom-template-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a class=\"reference internal\" href=\"#admin-overriding-templates\"><span class=\"std std-ref\">admin テンプレートをオーバーライドする</span></a> セクションでは、デフォルトの admin テンプレートをオーバーライドないし拡張する方法を説明しています。<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> ビューで使用されるデフォルトのテンプレートをオーバーライドするには、以下のオプションを使用してください:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.add_form_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">add_form_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.add_form_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.add_view\" title=\"django.contrib.admin.ModelAdmin.add_view\"><code class=\"xref py py-meth docutils literal notranslate\">add_view()</code></a> で使われます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.change_form_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">change_form_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.change_form_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.change_view\" title=\"django.contrib.admin.ModelAdmin.change_view\"><code class=\"xref py py-meth docutils literal notranslate\">change_view()</code></a> で使われます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.change_list_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">change_list_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.change_list_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.changelist_view\" title=\"django.contrib.admin.ModelAdmin.changelist_view\"><code class=\"xref py py-meth docutils literal notranslate\">changelist_view()</code></a> で使われます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.delete_confirmation_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">delete_confirmation_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.delete_confirmation_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、1 つ以上のオブジェクトを削除するときに確認ページを表示するために、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.delete_view\" title=\"django.contrib.admin.ModelAdmin.delete_view\"><code class=\"xref py py-meth docutils literal notranslate\">delete_view()</code></a> で使われます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.delete_selected_confirmation_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">delete_selected_confirmation_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.delete_selected_confirmation_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、1 つ以上のオブジェクトを削除するときに確認ページを表示するために、<code class=\"docutils literal notranslate\">delete_selected</code> アクションメソッドで使われます。<a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/actions/\"><span class=\"doc\">アクションのドキュメント</span></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.object_history_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">object_history_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.object_history_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.history_view\" title=\"django.contrib.admin.ModelAdmin.history_view\"><code class=\"xref py py-meth docutils literal notranslate\">history_view()</code></a> で使われます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.popup_response_template\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">popup_response_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.popup_response_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>カスタムンテンプレートの絶対パスで、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.response_add\" title=\"django.contrib.admin.ModelAdmin.response_add\"><code class=\"xref py py-meth docutils literal notranslate\">response_add()</code></a>、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.response_change\" title=\"django.contrib.admin.ModelAdmin.response_change\"><code class=\"xref py py-meth docutils literal notranslate\">response_change()</code></a>、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.response_delete\" title=\"django.contrib.admin.ModelAdmin.response_delete\"><code class=\"xref py py-meth docutils literal notranslate\">response_delete()</code></a> の 3 つで使われます。</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"modeladmin-methods\">\n<span id=\"model-admin-methods\"></span><h3><code class=\"docutils literal notranslate\">ModelAdmin</code> のメソッド<a class=\"heading-anchor\" href=\"#modeladmin-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.save_model\" title=\"django.contrib.admin.ModelAdmin.save_model\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.save_model()</code></a> や <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.delete_model\" title=\"django.contrib.admin.ModelAdmin.delete_model\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.delete_model()</code></a> をオーバーライドするときは、オブジェクトの保存や削除の処理を記述する必要があります。これは、制限を設けるためではなく、追加的な操作を可能にするための仕様です。</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.save_model\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">save_model</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em>, <em class=\"sig-param\">form</em>, <em class=\"sig-param\">change</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.save_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">save_model</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code>、モデルのインスタンス、<code class=\"docutils literal notranslate\">ModelForm</code> のインスタンス、追加か変更かを表す真偽値が渡されます。このメソッドをオーバーライドすると、保存の前後に操作を追加できます。<code class=\"docutils literal notranslate\">super().save_model()</code> を呼び出して、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">Model.save()</code></a> を使ってオブジェクトを保存してください。</p>\n<p>例えば、保存前にオブジェクトに <code class=\"docutils literal notranslate\">request.user</code> を追加するには:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">save_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"p\">,</span> form<span class=\"p\">,</span> change<span class=\"p\">):</span>\n        obj<span class=\"o\">.</span>user <span class=\"o\">=</span> request<span class=\"o\">.</span>user\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>save_model<span class=\"p\">(</span>request<span class=\"p\">,</span> obj<span class=\"p\">,</span> form<span class=\"p\">,</span> change<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.delete_model\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">delete_model</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.delete_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">delete_model</code> には、<code class=\"docutils literal notranslate\">HttpRequest</code> とモデルのインスタンスが渡されます。このメソッドをオーバーライドすると、削除の前後に操作を追加できます。<code class=\"docutils literal notranslate\">super().delete_model()</code> を呼び出して、<a class=\"reference internal\" href=\"/ja/5.0/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">Model.delete()</code></a> を使ってオブジェクトを削除してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.delete_queryset\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">delete_queryset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">queryset</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.delete_queryset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">delete_queryset()</code> には、<code class=\"docutils literal notranslate\">HttpRequest</code> と削除するオブジェクトの <code class=\"docutils literal notranslate\">QuerySet</code> が渡されます。このメソッドをオーバーライドすると、&quot;選択したオブジェクトの削除&quot; <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/actions/\"><span class=\"doc\">アクション</span></a> に対する削除のプロセスをカスタムできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.save_formset\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">save_formset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">form</em>, <em class=\"sig-param\">formset</em>, <em class=\"sig-param\">change</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.save_formset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">save_formset</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code>、親 <code class=\"docutils literal notranslate\">ModelForm</code> のインスタンス、親オブジェクトの追加か変更かを表す真偽値が与えられます。</p>\n<p>たとえば、変更のあったフォームセットのモデルのインスタンスそれぞれに <code class=\"docutils literal notranslate\">request.user</code> を追加するには、次のようにします。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">save_formset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> form<span class=\"p\">,</span> formset<span class=\"p\">,</span> change<span class=\"p\">):</span>\n        instances <span class=\"o\">=</span> formset<span class=\"o\">.</span>save<span class=\"p\">(</span>commit<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> obj <span class=\"ow\">in</span> formset<span class=\"o\">.</span>deleted_objects<span class=\"p\">:</span>\n            obj<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n        <span class=\"k\">for</span> instance <span class=\"ow\">in</span> instances<span class=\"p\">:</span>\n            instance<span class=\"o\">.</span>user <span class=\"o\">=</span> request<span class=\"o\">.</span>user\n            instance<span class=\"o\">.</span>save<span class=\"p\">()</span>\n        formset<span class=\"o\">.</span>save_m2m<span class=\"p\">()</span>\n</code></pre></div>\n<p>関連項目: <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#saving-objects-in-the-formset\"><span class=\"std std-ref\">フォームセット内のオブジェクトを保存する</span></a></p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_ordering\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_ordering</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_ordering\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_ordering</code> メソッドは引数に <code class=\"docutils literal notranslate\">request</code> を取り、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.ordering\" title=\"django.contrib.admin.ModelAdmin.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ordering</code></a> のときと同じような <code class=\"docutils literal notranslate\">list</code> か <code class=\"docutils literal notranslate\">tuple</code> を返すことが期待されます。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_ordering</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"k\">if</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_superuser<span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rank&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_search_results\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_search_results</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">queryset</em>, <em class=\"sig-param\">search_term</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_search_results\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_search_results</code> メソッドは、検索語と一致するオブジェクトを表示するための、オブジェクトのリストを修正します。リクエスト、現在のフィルタを適用するクエリセット、 ユーザーが入力した検索語を受け取ります。 検索を実行するために修正されたクエリセットと、結果に重複があるかどうかを表す真偽値を含むタプルを返します。</p>\n<p>デフォルトの実装では、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.search_fields\" title=\"django.contrib.admin.ModelAdmin.search_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.search_fields</code></a> に含まれるフィールドを検索します。</p>\n<p>このメソッドは、独自の検索方法でオーバーライドできます。例えば、数値のフィールドで検索したり、<a class=\"reference external\" href=\"https://solr.apache.org\">Solr</a> や <a class=\"reference external\" href=\"https://haystacksearch.org\">Haystack</a> といった外部のツールを使うことができます。独自の検索方法によって実装されたクエリセットの変更が結果に重複を生じさせるかを確認し、返値の 2 番目の要素に <code class=\"docutils literal notranslate\">True</code> を返す必要があります。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\">name</code> と <code class=\"docutils literal notranslate\">age</code> で検索するには、以下のように使います。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">]</span>\n    search_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_search_results</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> queryset<span class=\"p\">,</span> search_term<span class=\"p\">):</span>\n        queryset<span class=\"p\">,</span> may_have_duplicates <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_search_results<span class=\"p\">(</span>\n            request<span class=\"p\">,</span>\n            queryset<span class=\"p\">,</span>\n            search_term<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            search_term_as_int <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span>search_term<span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"ne\">ValueError</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            queryset <span class=\"o\">|=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>model<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>age<span class=\"o\">=</span>search_term_as_int<span class=\"p\">)</span>\n        <span class=\"k\">return</span> queryset<span class=\"p\">,</span> may_have_duplicates\n</code></pre></div>\n<p>この実装は、数値フィールドに対して文字列比較を行う <code class=\"docutils literal notranslate\">search_fields = ('name', '=age')</code> に比べて、はるかに効率的です... たとえば PostgreSQL では <code class=\"docutils literal notranslate\">... OR UPPER(&quot;polls_choice&quot;.&quot;votes&quot;::text) = UPPER('4')</code> となります。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.save_related\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">save_related</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">form</em>, <em class=\"sig-param\">formsets</em>, <em class=\"sig-param\">change</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.save_related\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">save_related</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code>、親 <code class=\"docutils literal notranslate\">ModelForm</code> のインスタンス、インラインフォームセットのリスト、親の追加か変更かを表す真偽値が与えられます。このメソッドで、保存の前後に親に対するリレーション先オブジェクトに対する操作を追加できます。この時点では親オブジェクトとそのフォームはすでに保存されていることに注意してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_autocomplete_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_autocomplete_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_autocomplete_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_autocomplete_fields()</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> が渡され、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.autocomplete_fields\" title=\"django.contrib.admin.ModelAdmin.autocomplete_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.autocomplete_fields</code></a> セクションで説明した通りオートコンプリートウィジェットで表示するフィールドの名前の <code class=\"docutils literal notranslate\">list</code> か <code class=\"docutils literal notranslate\">tuple</code> を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_readonly_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_readonly_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_readonly_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_readonly_fields</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> と編集対象の <code class=\"docutils literal notranslate\">obj</code> (ないし新規追加用の <code class=\"docutils literal notranslate\">None</code>) が渡され、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.readonly_fields</code></a> セクションで説明した通り、読み取り専用で表示するフィールドの名前の <code class=\"docutils literal notranslate\">list</code> か <code class=\"docutils literal notranslate\">tuple</code> を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_prepopulated_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_prepopulated_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_prepopulated_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_prepopulated_fields</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> と編集対象の <code class=\"docutils literal notranslate\">obj</code> (ないし新規追加用の <code class=\"docutils literal notranslate\">None</code>) が渡され、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.prepopulated_fields\" title=\"django.contrib.admin.ModelAdmin.prepopulated_fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.prepopulated_fields</code></a> セクションで説明した通り <code class=\"docutils literal notranslate\">dictionary</code> を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_list_display\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_list_display</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_list_display\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_list_display</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> が渡され、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.list_display</code></a> セクションで説明した通りチェンジリストビューで表示するフィールドの名前の <code class=\"docutils literal notranslate\">list</code> か <code class=\"docutils literal notranslate\">tuple</code> を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_list_display_links\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_list_display_links</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">list_display</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_list_display_links\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_list_display_links</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> と <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_list_display\" title=\"django.contrib.admin.ModelAdmin.get_list_display\"><code class=\"xref py py-meth docutils literal notranslate\">ModelAdmin.get_list_display()</code></a> によって返された <code class=\"docutils literal notranslate\">list</code> ないし <code class=\"docutils literal notranslate\">tuple</code> が渡されます。上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display_links\" title=\"django.contrib.admin.ModelAdmin.list_display_links\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.list_display_links</code></a> セクションで説明した通り、チェンジリストで変更ビューにリンクを貼りたいフィールドの名前の <code class=\"docutils literal notranslate\">list</code> か <code class=\"docutils literal notranslate\">tuple</code>、もしくは <code class=\"docutils literal notranslate\">None</code> を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_exclude\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_exclude</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_exclude\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_exclude</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> と編集対象の <code class=\"docutils literal notranslate\">obj</code> (ないし新規追加用の <code class=\"docutils literal notranslate\">None</code>) が渡され、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.exclude\" title=\"django.contrib.admin.ModelAdmin.exclude\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.exclude</code></a> セクションで説明した通りフィールドのリストを返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_fields</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> と編集対象の <code class=\"docutils literal notranslate\">obj</code> (ないし新規追加用の <code class=\"docutils literal notranslate\">None</code>) が渡され、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.fields</code></a> セクションで説明した通りフィールドのリストを返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_fieldsets\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_fieldsets</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_fieldsets\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_fieldsets</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> と編集対象の <code class=\"docutils literal notranslate\">obj</code> (ないし新規追加用の <code class=\"docutils literal notranslate\">None</code>) が渡され、2 値タプルのリストを返すことが期待されます。各 2 値タプルは、上述の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.fieldsets</code></a> セクションで説明した通り admin のフォームページ上の <code class=\"docutils literal notranslate\">&lt;fieldset&gt;</code> を表します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_list_filter\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_list_filter</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_list_filter\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_list_filter</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> が渡され、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_filter\" title=\"django.contrib.admin.ModelAdmin.list_filter\"><code class=\"xref py py-attr docutils literal notranslate\">list_filter</code></a> 属性のときと同じ種類のシーケンス型を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_list_select_related\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_list_select_related</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_list_select_related\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_list_select_related</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> が渡され、真偽値もしくは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_select_related\" title=\"django.contrib.admin.ModelAdmin.list_select_related\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.list_select_related</code></a> と同様のリストを返す必要があります。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_search_fields\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_search_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_search_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_search_fields</code> メソッドには、<code class=\"docutils literal notranslate\">HttpRequest</code> が渡され、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.search_fields\" title=\"django.contrib.admin.ModelAdmin.search_fields\"><code class=\"xref py py-attr docutils literal notranslate\">search_fields</code></a> 属性のときと同じ種類のシーケンス型を返すことが期待されます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_sortable_by\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_sortable_by</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_sortable_by\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_list_display</code> メソッドは <code class=\"docutils literal notranslate\">HttpRequest</code> を受け取り、チェンジリストページでソート可能なフィールドの名のコレクション (例: <code class=\"docutils literal notranslate\">list</code>、<code class=\"docutils literal notranslate\">tuple</code>、<code class=\"docutils literal notranslate\">set</code>) を返すことが期待されます。</p>\n<p>デフォルトの実装では、セットされている場合は <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.sortable_by\" title=\"django.contrib.admin.ModelAdmin.sortable_by\"><code class=\"xref py py-attr docutils literal notranslate\">sortable_by</code></a> を返します。セットされていなければ <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_list_display\" title=\"django.contrib.admin.ModelAdmin.get_list_display\"><code class=\"xref py py-meth docutils literal notranslate\">get_list_display()</code></a> を参照します。</p>\n<p>たとえば、1 つ以上のカラムを並び替え不可にするには:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_sortable_by</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span>get_list_display<span class=\"p\">(</span>request<span class=\"p\">)}</span> <span class=\"o\">-</span> <span class=\"p\">{</span><span class=\"s2\">&quot;rank&quot;</span><span class=\"p\">}</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_inline_instances\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_inline_instances</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_inline_instances\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_inline_instances</code> メソッドは、編集中の <code class=\"docutils literal notranslate\">HttpRequest</code> と <code class=\"docutils literal notranslate\">obj</code> (追加フォームの場合は <code class=\"docutils literal notranslate\">None</code>) を受け取り、以下の <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a> セクションで説明されているように、<a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a> オブジェクトの <code class=\"docutils literal notranslate\">list</code> または <code class=\"docutils literal notranslate\">tuple</code> を返すことが期待されます。例えば、以下は追加、変更、削除、閲覧の権限に基づくデフォルトのフィルタリングなしでインラインを返す方法です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>MyInline<span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_inline_instances</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span>inline<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>model<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>admin_site<span class=\"p\">)</span> <span class=\"k\">for</span> inline <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>inlines<span class=\"p\">]</span>\n</code></pre></div>\n<p>このメソッドをオーバーライドする場合、返値となるインラインは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.inlines\" title=\"django.contrib.admin.ModelAdmin.inlines\"><code class=\"xref py py-attr docutils literal notranslate\">inlines</code></a> で定義したクラスのインスタンスにしてください。間違えると、リレーション先オブジェクトを追加する際に &quot;Bad Request&quot; が発生する可能性があります。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_inlines\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_inlines</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_inlines\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">get_inlines</code> メソッドは、編集対象の <code class=\"docutils literal notranslate\">HttpRequest</code> と <code class=\"docutils literal notranslate\">obj</code> (追加フォームの場合は <code class=\"docutils literal notranslate\">None</code>) を受け取り、インラインのイテラブルを返すことが期待されます。 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.inlines\" title=\"django.contrib.admin.ModelAdmin.inlines\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.inlines</code></a> で指定する代わりに、このメソッドをオーバーライドすることで、リクエストやモデルインスタンスに基づいて動的にインラインを追加できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_urls\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_urls</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_urls\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">ModelAdmin</code> の <code class=\"docutils literal notranslate\">get_urls</code> メソッドは URLconf と同じようにその ModelAdmin で使用する URL を返します。 そのため、 <a class=\"reference internal\" href=\"/ja/5.0/topics/http/urls/\"><span class=\"doc\">URL ディスパッチャ</span></a> で説明されているように、ビューの <code class=\"docutils literal notranslate\">AdminSite.admin_view()</code> ラッパーを使って拡張できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.template.response</span> <span class=\"kn\">import</span> TemplateResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_urls</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        urls <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_urls<span class=\"p\">()</span>\n        my_urls <span class=\"o\">=</span> <span class=\"p\">[</span>path<span class=\"p\">(</span><span class=\"s2\">&quot;my_view/&quot;</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>admin_site<span class=\"o\">.</span>admin_view<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>my_view<span class=\"p\">))]</span>\n        <span class=\"k\">return</span> my_urls <span class=\"o\">+</span> urls\n\n    <span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        <span class=\"c1\"># ...</span>\n        context <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span>\n            <span class=\"c1\"># Include common variables for rendering the admin template.</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>admin_site<span class=\"o\">.</span>each_context<span class=\"p\">(</span>request<span class=\"p\">),</span>\n            <span class=\"c1\"># Anything else you want in the context...</span>\n            key<span class=\"o\">=</span>value<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">return</span> TemplateResponse<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;sometemplate.html&quot;</span><span class=\"p\">,</span> context<span class=\"p\">)</span>\n</code></pre></div>\n<p>admin のレイアウトを使用したい場合、<code class=\"docutils literal notranslate\">admin/base_site.html</code> を extend してください:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;admin/base_site.html&quot;</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">content</span> <span class=\"cp\">%}</span>\n...\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">self.my_view</code> 関数が <code class=\"docutils literal notranslate\">self.admin_site.admin_view</code> でラップされていることに注意してください。これは重要であり、次の2つのことを保証します:</p>\n<ol class=\"arabic simple\">\n<li><p>パーミッションチェックが実行され、アクティブなスタッフユーザーだけがビューにアクセスできるようにします。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.0/topics/http/decorators/#django.views.decorators.cache.never_cache\" title=\"django.views.decorators.cache.never_cache\"><code class=\"xref py py-func docutils literal notranslate\">django.views.decorators.cache.never_cache()</code></a> デコレータはキャッシュを防ぐために適用され、返される情報が最新であることを保証します。</p></li>\n</ol>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>カスタムパターンが通常の管理URLよりも <em>前に</em> 含まれていることに注意してください。管理URLのパターンは非常に許容範囲が広く、ほぼ何でも一致するため、通常はカスタムURLを組み込みのURLに前置したいと思うでしょう。</p>\n<p>この例では、 <code class=\"docutils literal notranslate\">my_view</code> は <code class=\"docutils literal notranslate\">/admin/myapp/mymodel/my_view/</code> にアクセスされます (管理画面の URL が <code class=\"docutils literal notranslate\">/admin/</code> に含まれていると仮定します)。</p>\n</aside>\n<p>ページがキャッシュ可能で、それでもパーミッションチェックを行いたい場合は、 <code class=\"docutils literal notranslate\">AdminSite.admin_view()</code> に <code class=\"docutils literal notranslate\">cacheable=True</code> 引数を渡します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>path<span class=\"p\">(</span><span class=\"s2\">&quot;my_view/&quot;</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>admin_site<span class=\"o\">.</span>admin_view<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>my_view<span class=\"p\">,</span> cacheable<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">ModelAdmin</code> ビューは <code class=\"docutils literal notranslate\">model_admin</code> 属性を持ちます。その他の <code class=\"docutils literal notranslate\">AdminSite</code> ビューは <code class=\"docutils literal notranslate\">admin_site</code> 属性を持ちます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_form\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_form</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin の追加と変更のビューで使うための <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> クラスを返します。<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.add_view\" title=\"django.contrib.admin.ModelAdmin.add_view\"><code class=\"xref py py-meth docutils literal notranslate\">add_view()</code></a> と <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.change_view\" title=\"django.contrib.admin.ModelAdmin.change_view\"><code class=\"xref py py-meth docutils literal notranslate\">change_view()</code></a> を参照してください。</p>\n<p>基本の実装は <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/models/#django.forms.models.modelform_factory\" title=\"django.forms.models.modelform_factory\"><code class=\"xref py py-func docutils literal notranslate\">modelform_factory()</code></a> を使用して <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.form\" title=\"django.contrib.admin.ModelAdmin.form\"><code class=\"xref py py-attr docutils literal notranslate\">form</code></a> をサブクラス化し、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">fields</code></a> や <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.exclude\" title=\"django.contrib.admin.ModelAdmin.exclude\"><code class=\"xref py py-attr docutils literal notranslate\">exclude</code></a> といった属性によって修正されます。なので、例えばスーパーユーザーに対して追加的なフィールドを与えたい場合は、以下のように基本のフォームを変更できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">if</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_superuser<span class=\"p\">:</span>\n            kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> MySuperuserForm\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_form<span class=\"p\">(</span>request<span class=\"p\">,</span> obj<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> クラスを直接返すこともできます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_formsets_with_inlines\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_formsets_with_inlines</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_formsets_with_inlines\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin の追加や変更のビューで使用するための (<code class=\"docutils literal notranslate\">FormSet</code>, <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a>) ペアを生成します。</p>\n<p>たとえば、変更ビューのみで特定のインラインを表示したい場合、以下のように <code class=\"docutils literal notranslate\">get_formsets_with_inlines</code> をオーバーライドできます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>MyInline<span class=\"p\">,</span> SomeOtherInline<span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_formsets_with_inlines</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> inline <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>get_inline_instances<span class=\"p\">(</span>request<span class=\"p\">,</span> obj<span class=\"p\">):</span>\n            <span class=\"c1\"># hide MyInline in the add view</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span>inline<span class=\"p\">,</span> MyInline<span class=\"p\">)</span> <span class=\"ow\">or</span> obj <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n                <span class=\"k\">yield</span> inline<span class=\"o\">.</span>get_formset<span class=\"p\">(</span>request<span class=\"p\">,</span> obj<span class=\"p\">),</span> inline\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.formfield_for_foreignkey\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">formfield_for_foreignkey</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">db_field</em>, <em class=\"sig-param\">request</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.formfield_for_foreignkey\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">ModelAdmin</code> の <code class=\"docutils literal notranslate\">formfield_for_foreignkey</code> を使うと、ForignKey フィールドに対するデフォルトのフォームフィールドをオーバーライドできます。たとえば、ユーザーに基づいてこの ForeignKey フィールドに対するオブジェクトのサブセットを返すには:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">if</span> db_field<span class=\"o\">.</span>name <span class=\"o\">==</span> <span class=\"s2\">&quot;car&quot;</span><span class=\"p\">:</span>\n            kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;queryset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> Car<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>owner<span class=\"o\">=</span>request<span class=\"o\">.</span>user<span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_foreignkey<span class=\"p\">(</span>db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n<p>これは、<code class=\"docutils literal notranslate\">HttpRequest</code> インスタンスを使って <code class=\"docutils literal notranslate\">Car</code> ForeignKey フィールドをフィルタし、特定の <code class=\"docutils literal notranslate\">User</code> インスタンスが所有する car のみを表示します。</p>\n<p>より複雑なフィルタを行うには、<code class=\"docutils literal notranslate\">ModelForm.__init__()</code> メソッドを使用することで、モデルの <code class=\"docutils literal notranslate\">instance</code> に基づいたフィルタを行うことができます (<a class=\"reference internal\" href=\"/ja/5.0/ref/forms/fields/#fields-which-handle-relationships\"><span class=\"std std-ref\">リレーションシップを扱うフィールド</span></a> を参照してください)。たとえば:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">CountryAdminForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>ModelForm<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>fields<span class=\"p\">[</span><span class=\"s2\">&quot;capital&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>queryset <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>instance<span class=\"o\">.</span>cities<span class=\"o\">.</span>all<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">CountryAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    form <span class=\"o\">=</span> CountryAdminForm\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.formfield_for_manytomany\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">formfield_for_manytomany</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">db_field</em>, <em class=\"sig-param\">request</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.formfield_for_manytomany\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">formfield_for_foreignkey</code> メソッドと同じように、<code class=\"docutils literal notranslate\">formfield_for_manytomany</code> メソッドをオーバーライドすると ManyToMany に対するデフォルトのフォームフィールドを変更できます。たとえば、あるオーナーは複数の car を所有でき、また car は複数のオーナーに所有されるとすると（多対多の関係です） <code class=\"docutils literal notranslate\">Car</code> のフィールドをフィルタして特定の <code class=\"docutils literal notranslate\">User</code> が所有する car だけを表示できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">if</span> db_field<span class=\"o\">.</span>name <span class=\"o\">==</span> <span class=\"s2\">&quot;cars&quot;</span><span class=\"p\">:</span>\n            kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;queryset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> Car<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>owner<span class=\"o\">=</span>request<span class=\"o\">.</span>user<span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_manytomany<span class=\"p\">(</span>db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.formfield_for_choice_field\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">formfield_for_choice_field</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">db_field</em>, <em class=\"sig-param\">request</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.formfield_for_choice_field\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">formfield_for_foreignkey</code> や <code class=\"docutils literal notranslate\">formfield_for_manytomany</code> メソッドと同じように、<code class=\"docutils literal notranslate\">formfield_for_choice_field</code> メソッドをオーバーライドすると選択肢として宣言されたフィールドに対するデフォルトのフォームフィールドを変更できます。 たとえば、スーパーユーザーと通常のスタッフで表示する選択肢を違うものにしたい場合、以下のように記述できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">formfield_for_choice_field</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">if</span> db_field<span class=\"o\">.</span>name <span class=\"o\">==</span> <span class=\"s2\">&quot;status&quot;</span><span class=\"p\">:</span>\n            kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;choices&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;accepted&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Accepted&quot;</span><span class=\"p\">),</span>\n                <span class=\"p\">(</span><span class=\"s2\">&quot;denied&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Denied&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">]</span>\n            <span class=\"k\">if</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_superuser<span class=\"p\">:</span>\n                kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;choices&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span>append<span class=\"p\">((</span><span class=\"s2\">&quot;ready&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Ready for deployment&quot;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>formfield_for_choice_field<span class=\"p\">(</span>db_field<span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-choices-limitations admonition\" role=\"note\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\">choices</code> の制限</p>\n<p>フォームフィールドにセットされたすべての <code class=\"docutils literal notranslate\">choices</code> 属性はそのフォームのフィールドのみに制限されます。モデル上の一致するフィールドに選択肢がセットされている場合、フォームに提供される選択肢はこの選択肢の有効なサブセットでなくてはなりません。そうでない場合、フォームの送信は、モデル自身の保存前のバリデーションで <a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> とともに失敗します。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_changelist\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_changelist</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_changelist\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>リスト作成に使われる <code class=\"docutils literal notranslate\">Changelist</code> を返します。デフォルトでは、<code class=\"docutils literal notranslate\">django.contrib.admin.views.main.ChangeList</code> が使われます。このクラスを継承することで、リスト作成の動作を変更できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_changelist_form\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_changelist_form</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_changelist_form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>チェンジリストページの <code class=\"docutils literal notranslate\">Formset</code> で使うための <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> クラスを返します。カスタムフォームを使うには、たとえば、次のようにします。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>ModelForm<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_changelist_form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"k\">return</span> MyForm\n</code></pre></div>\n<aside class=\"admonition-omit-the-meta-model-attribute admonition\" role=\"note\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\">Meta.model</code> 属性を省略する</p>\n<p><a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> で <code class=\"docutils literal notranslate\">Meta.model</code> 属性を定義した場合、<code class=\"docutils literal notranslate\">Meta.fields</code> 属性 (ないし <code class=\"docutils literal notranslate\">Meta.exclude</code> 属性) も定義する必要があります。しかし <code class=\"docutils literal notranslate\">ModelAdmin</code> はこの値を無視して、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_editable\" title=\"django.contrib.admin.ModelAdmin.list_editable\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.list_editable</code></a> 属性をオーバーライドします。最も簡単な解決方法は、<code class=\"docutils literal notranslate\">Meta.model</code> 属性を除外することです。これは <code class=\"docutils literal notranslate\">ModelAdmin</code> が使用する正しいモデルを提供するからです。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_changelist_formset\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_changelist_formset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_changelist_formset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_editable\" title=\"django.contrib.admin.ModelAdmin.list_editable\"><code class=\"xref py py-attr docutils literal notranslate\">list_editable</code></a> を使っている場合、チェンジリストページで使用するための <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#model-formsets\"><span class=\"std std-ref\">ModelFormSet</span></a> クラスを返します。カスタムのフォームセットを使うには、たとえば、次のようにします。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseModelFormSet\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyAdminFormSet</span><span class=\"p\">(</span>BaseModelFormSet<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_changelist_formset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;formset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> MyAdminFormSet\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_changelist_formset<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.lookup_allowed\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">lookup_allowed</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">lookup</em>, <em class=\"sig-param\">value</em>, <em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.lookup_allowed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>チェンジリストページのオブジェクトは URL のクエリ文字列からルックアップしてフィルタすることができます。たとえば、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_filter\" title=\"django.contrib.admin.ModelAdmin.list_filter\"><code class=\"xref py py-attr docutils literal notranslate\">list_filter</code></a> はその仕組みで動作します。ルックアップは <a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">QuerySet.filter()</code></a> (例 <code class=\"docutils literal notranslate\">user__email=user&#64;example.com</code>) で使われているものと似ています。クエリ文字列のルックアップはユーザによって操作される可能性があるため、無許可のデータ漏洩を防ぐためにサニタイズする必要があります。</p>\n<p><code class=\"docutils literal notranslate\">lookup_allowed()</code> メソッドには、クエリ文字列 (<code class=\"docutils literal notranslate\">'user__email'</code> など)、対応する値 (<code class=\"docutils literal notranslate\">'user&#64;example.com'</code> など)、リクエストからのルックアップパスが渡され、パラメータを使用したチェンジリストの <code class=\"docutils literal notranslate\">QuerySet</code> のフィルタリングが許可されているかどうかを示す真偽値を返します。 <code class=\"docutils literal notranslate\">lookup_allowed()</code> が <code class=\"docutils literal notranslate\">False</code> を返した場合、 <code class=\"docutils literal notranslate\">DisallowedModelAdminLookup</code> (<a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-exc docutils literal notranslate\">SuspiciousOperation</code></a> のサブクラス) が発生します。</p>\n<p>デフォルトでは、 <code class=\"docutils literal notranslate\">lookup_allowed()</code> はモデルのローカルフィールド、 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_filter\" title=\"django.contrib.admin.ModelAdmin.list_filter\"><code class=\"xref py py-attr docutils literal notranslate\">list_filter</code></a> で使用されるフィールドパス (ただし、 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_list_filter\" title=\"django.contrib.admin.ModelAdmin.get_list_filter\"><code class=\"xref py py-meth docutils literal notranslate\">get_list_filter()</code></a> からのパスは使用できません)、 <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ForeignKey.limit_choices_to\" title=\"django.db.models.ForeignKey.limit_choices_to\"><code class=\"xref py py-attr docutils literal notranslate\">limit_choices_to</code></a> が <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.raw_id_fields\" title=\"django.contrib.admin.ModelAdmin.raw_id_fields\"><code class=\"xref py py-attr docutils literal notranslate\">raw_id_fields</code></a> で正しく機能するために必要なルックアップへのアクセスを許可します。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> サブクラスで許可されるルックアップをカスタマイズするには、このメソッドをオーバーライドします。</p>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p><code class=\"docutils literal notranslate\">request</code> 引数が追加されました。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.has_view_permission\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">has_view_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.has_view_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">obj</code> の閲覧が許可されている場合は <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。obj が <code class=\"docutils literal notranslate\">None</code> の場合、この種類のオブジェクトの閲覧が一般的に許可されているかどうかを表すよう、<code class=\"docutils literal notranslate\">True</code> か <code class=\"docutils literal notranslate\">False</code> を指定します (たとえば、<code class=\"docutils literal notranslate\">False</code> は現在のユーザーがこの種類のすべてのオブジェクトを閲覧できないことを意味します)。</p>\n<p>デフォルトの実装では、ユーザーが &quot;change&quot; か &quot;view&quot; 権限を持っていれば <code class=\"docutils literal notranslate\">True</code> を返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.has_add_permission\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">has_add_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.has_add_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>オブジェクトの追加が許可されていれば <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.has_change_permission\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">has_change_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.has_change_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">obj</code> の編集が許可されている場合は <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。<code class=\"docutils literal notranslate\">obj</code> が <code class=\"docutils literal notranslate\">None</code> の場合、この種類のオブジェクトの編集が一般的に許可されているかどうかを表すよう、<code class=\"docutils literal notranslate\">True</code> か <code class=\"docutils literal notranslate\">False</code> を指定します (たとえば、<code class=\"docutils literal notranslate\">False</code> は現在のユーザーがこの種類のすべてのオブジェクトを編集できないことを意味します)。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.has_delete_permission\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">has_delete_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.has_delete_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">obj</code> の削除が許可されている場合は <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。<code class=\"docutils literal notranslate\">obj</code> が <code class=\"docutils literal notranslate\">None</code> の場合、この種類のオブジェクトの削除が一般的に許可されているかどうかを表すよう、<code class=\"docutils literal notranslate\">True</code> か <code class=\"docutils literal notranslate\">False</code> を指定します (たとえば、<code class=\"docutils literal notranslate\">False</code> は現在のユーザーがこの種類のすべてのオブジェクトを削除できないことを意味します)。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.has_module_permission\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">has_module_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.has_module_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin のインデックスページでモジュールを表示し、そのモジュールへのアクセスを許可する場合は <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。デフォルトでは <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/auth/#django.contrib.auth.models.User.has_module_perms\" title=\"django.contrib.auth.models.User.has_module_perms\"><code class=\"xref py py-meth docutils literal notranslate\">User.has_module_perms()</code></a> を使用します。 オーバーライドしても閲覧、追加、変更、削除のアクセス権は制限しません。アクセス権の制限には <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.has_view_permission\" title=\"django.contrib.admin.ModelAdmin.has_view_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_view_permission()</code></a>、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.has_add_permission\" title=\"django.contrib.admin.ModelAdmin.has_add_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_add_permission()</code></a>、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.has_change_permission\" title=\"django.contrib.admin.ModelAdmin.has_change_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_change_permission()</code></a>、<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.has_delete_permission\" title=\"django.contrib.admin.ModelAdmin.has_delete_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_delete_permission()</code></a> を使用してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_queryset\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_queryset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_queryset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">ModelAdmin</code> の <code class=\"docutils literal notranslate\">get_queryset</code> メソッドは admin サイトで編集可能なモデルインスタンスのすべての <a class=\"reference internal\" href=\"/ja/5.0/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\">QuerySet</code></a> を返します。このメソッドをオーバーライドする場面の 1 つは、ログイン中のユーザーが所有するオブジェクトを表示することです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n        qs <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_queryset<span class=\"p\">(</span>request<span class=\"p\">)</span>\n        <span class=\"k\">if</span> request<span class=\"o\">.</span>user<span class=\"o\">.</span>is_superuser<span class=\"p\">:</span>\n            <span class=\"k\">return</span> qs\n        <span class=\"k\">return</span> qs<span class=\"o\">.</span>filter<span class=\"p\">(</span>author<span class=\"o\">=</span>request<span class=\"o\">.</span>user<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.message_user\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">message_user</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">message</em>, <em class=\"sig-param\">level<span class=\"o\">=</span><span class=\"default_value\">messages.INFO</span></em>, <em class=\"sig-param\">extra_tags<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.message_user\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/messages/#module-django.contrib.messages\" title=\"django.contrib.messages: Provides cookie- and session-based temporary message storage.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.messages</code></a> バックエンドを使ってユーザーにメッセージを送ります。<a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/actions/#custom-admin-action\"><span class=\"std std-ref\">カスタムの ModelAdmin の例</span></a> を参照してください。</p>\n<p>キーワード引数を使うと、メッセージレベルを変更したり、余分な CSS タグを追加したり、 <code class=\"docutils literal notranslate\">contrib.message</code> フレームワークがインストールされていない場合にサイレントエラーにしたりすることができます。これらのキーワード引数は <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/messages/#django.contrib.messages.add_message\" title=\"django.contrib.messages.add_message\"><code class=\"xref py py-func docutils literal notranslate\">django.contrib.messages.add_message()</code></a> の引数と同じです。詳しくはその関数のドキュメントを参照してください。違いの一つは、レベルを整数/定数の他に文字列ラベルとして渡せる点です。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_paginator\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_paginator</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">queryset</em>, <em class=\"sig-param\">per_page</em>, <em class=\"sig-param\">orphans<span class=\"o\">=</span><span class=\"default_value\">0</span></em>, <em class=\"sig-param\">allow_empty_first_page<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_paginator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このビューで使用する paginator のインスタンスを返します。デフォルトでは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.paginator\" title=\"django.contrib.admin.ModelAdmin.paginator\"><code class=\"xref py py-attr docutils literal notranslate\">paginator</code></a> のインスタンスを返します。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.response_add\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">response_add</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em>, <em class=\"sig-param\">post_url_continue<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.response_add\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.add_view\" title=\"django.contrib.admin.ModelAdmin.add_view\"><code class=\"xref py py-meth docutils literal notranslate\">add_view()</code></a> ステージに対する <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> を決定します。</p>\n<p><code class=\"docutils literal notranslate\">response_add</code> は、admin フォームが送信され、オブジェクトとすべての関係インスタンスが作成および保存された直後に呼び出されます。オーバーライドすることで、オブジェクトが作成された後のデフォルトの動作を変更できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.response_change\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">response_change</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.response_change\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.change_view\" title=\"django.contrib.admin.ModelAdmin.change_view\"><code class=\"xref py py-meth docutils literal notranslate\">change_view()</code></a> ステージに対する <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> を決定します。</p>\n<p><code class=\"docutils literal notranslate\">response_change</code> は、admin フォームが送信され、オブジェクトとすべての関係インスタンスが保存された直後に呼び出されます。オーバーライドすることで、オブジェクトが変更された後のデフォルトの動作を変更できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.response_delete\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">response_delete</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj_display</em>, <em class=\"sig-param\">obj_id</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.response_delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.delete_view\" title=\"django.contrib.admin.ModelAdmin.delete_view\"><code class=\"xref py py-meth docutils literal notranslate\">delete_view()</code></a> ステージに対する <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> を決定します。</p>\n<p><code class=\"docutils literal notranslate\">response_delete</code> は、オブジェクトが削除された後に呼び出されます。オーバーライドすることで、オブジェクトが削除された後のデフォルトの動作を変更できます。</p>\n<p><code class=\"docutils literal notranslate\">obj_display</code> は削除されたオブジェクトの名前を表す文字列です。</p>\n<p><code class=\"docutils literal notranslate\">obj_id</code> は削除するオブジェクトを取得するために使用するシリアライズされた識別子です。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_formset_kwargs\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_formset_kwargs</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em>, <em class=\"sig-param\">inline</em>, <em class=\"sig-param\">prefix</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_formset_kwargs\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>フォームセットのコンストラクタに渡されるキーワード引数をカスタマイズするためのフックです。たとえばフォームセットのフォームに <code class=\"docutils literal notranslate\">request</code> を渡すには:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_formset_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"p\">,</span> inline<span class=\"p\">,</span> prefix<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">{</span>\n            <span class=\"o\">**</span><span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_formset_kwargs<span class=\"p\">(</span>request<span class=\"p\">,</span> obj<span class=\"p\">,</span> inline<span class=\"p\">,</span> prefix<span class=\"p\">),</span>\n            <span class=\"s2\">&quot;form_kwargs&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;request&quot;</span><span class=\"p\">:</span> request<span class=\"p\">},</span>\n        <span class=\"p\">}</span>\n</code></pre></div>\n<p>また、フォームセットのフォームに <code class=\"docutils literal notranslate\">initial</code> を指定するためにも使用できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_changeform_initial_data\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_changeform_initial_data</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_changeform_initial_data\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin の変更フォームの初期データに対するフックです。デフォルトでは、フィールドには <code class=\"docutils literal notranslate\">GET</code> パラメータで初期値が与えられます。たとえば、 <code class=\"docutils literal notranslate\">?name=initial_value</code> は <code class=\"docutils literal notranslate\">name</code> フィールドの初期値を <code class=\"docutils literal notranslate\">initial_value</code> にセットします。</p>\n<p>このメソッドは、<code class=\"docutils literal notranslate\">{'fieldname': 'fieldval'}</code> という形式のディクショナリを返します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">get_changeform_initial_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;custom_initial_value&quot;</span><span class=\"p\">}</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.get_deleted_objects\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">get_deleted_objects</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">objs</em>, <em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_deleted_objects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.delete_view\" title=\"django.contrib.admin.ModelAdmin.delete_view\"><code class=\"xref py py-meth docutils literal notranslate\">delete_view()</code></a> と &quot;delete selected&quot; <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/admin/actions/\"><span class=\"doc\">アクション</span></a> の削除処理をカスタマイズするフックです。</p>\n<p>引数 <code class=\"docutils literal notranslate\">objs</code> は削除するオブジェクト (<code class=\"docutils literal notranslate\">QuerySet</code> またはモデルインスタンスのリスト) の同型イテラブルで、 <code class=\"docutils literal notranslate\">request</code> は <a class=\"reference internal\" href=\"/ja/5.0/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> です。</p>\n<p>このメソッドは <code class=\"docutils literal notranslate\">(deleted_objects, model_count, perms_needed, protected)</code> の4タプルを返さなければなりません。</p>\n<p><code class=\"docutils literal notranslate\">deleted_objects</code> は削除されるすべてのオブジェクトを表す文字列のリストです。削除されるオブジェクトにリレーション先オブジェクトがある場合、リストはネストされ、それらのリレーション先オブジェクトも含まれます。リストはテンプレート内で <a class=\"reference internal\" href=\"/ja/5.0/ref/templates/builtins/#std-templatefilter-unordered_list\"><code class=\"xref std std-tfilter docutils literal notranslate\">unordered_list</code></a> フィルタを使ってフォーマットされます。</p>\n<p><code class=\"docutils literal notranslate\">model_count</code> は各モデルの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/options/#django.db.models.Options.verbose_name_plural\" title=\"django.db.models.Options.verbose_name_plural\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name_plural</code></a> と削除されるオブジェクトの数をマッピングした辞書です。</p>\n<p><code class=\"docutils literal notranslate\">perms_need</code> は <a class=\"reference internal\" href=\"/ja/5.0/ref/models/options/#django.db.models.Options.verbose_name\" title=\"django.db.models.Options.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name</code></a> のセットで、ユーザが削除する権限を持っていないモデルです。</p>\n<p><code class=\"docutils literal notranslate\">protected</code> は削除できない保護されたリレーション先オブジェクトを表す文字列のリストです。このリストはテンプレートに表示されます。</p>\n</dd></dl>\n\n<section id=\"other-methods\">\n<h4>その他のメソッド<a class=\"heading-anchor\" href=\"#other-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.add_view\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">add_view</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">form_url<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">extra_context<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.add_view\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデルインスタンスの追加ページに対する Django のビューです。以下のノートを参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.change_view\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">change_view</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">object_id</em>, <em class=\"sig-param\">form_url<span class=\"o\">=</span><span class=\"default_value\">''</span></em>, <em class=\"sig-param\">extra_context<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.change_view\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデルインスタンスの編集ページに対する Django のビューです。以下のノートを参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.changelist_view\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">changelist_view</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">extra_context<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.changelist_view\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデルインスタンスの変更リスト（チェンジリスト）およびアクションページに対する Django のビューです。以下のノートを参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.delete_view\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">delete_view</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">object_id</em>, <em class=\"sig-param\">extra_context<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.delete_view\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデルインスタンスの削除の確認ページに対する Django のビューです。以下のノートを参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.history_view\">\n<span class=\"sig-prename descclassname\">ModelAdmin.</span><span class=\"sig-name descname\">history_view</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">object_id</em>, <em class=\"sig-param\">extra_context<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.history_view\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与えられたモデルのインスタンスに対する修正履歴を表示するページに対する Django のビューです。</p>\n</dd></dl>\n\n<p>前の節で詳しく説明したフック型の <code class=\"docutils literal notranslate\">ModelAdmin</code> メソッドとは異なり、これら 5 つのメソッドは、実際には admin アプリケーションの URL ディスパッチハンドラから Django ビューとして呼び出され、モデルインスタンスの CRUD 操作を扱うページをレンダリングするように設計されています。そのため、これらのメソッドを完全にオーバーライドすると、 admin アプリケーションの動作が大きく変わってしまいます。</p>\n<p>これらのメソッドをオーバーライドする一般的な理由の 1 つは、ビューをレンダリングするテンプレートに提供されるコンテキスト・データを補強することです。以下の例では、change ビューがオーバーライドされ、レンダリングされるテンプレートに、他の方法では利用できないマッピング・データが提供されます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"c1\"># A template for a very customized change view:</span>\n    change_form_template <span class=\"o\">=</span> <span class=\"s2\">&quot;admin/myapp/extras/openstreetmap_change_form.html&quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_osm_info</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">change_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> object_id<span class=\"p\">,</span> form_url<span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> extra_context<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        extra_context <span class=\"o\">=</span> extra_context <span class=\"ow\">or</span> <span class=\"p\">{}</span>\n        extra_context<span class=\"p\">[</span><span class=\"s2\">&quot;osm_data&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>get_osm_info<span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>change_view<span class=\"p\">(</span>\n            request<span class=\"p\">,</span>\n            object_id<span class=\"p\">,</span>\n            form_url<span class=\"p\">,</span>\n            extra_context<span class=\"o\">=</span>extra_context<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>これらのビューは <a class=\"reference internal\" href=\"/ja/5.0/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\">TemplateResponse</code></a> インスタンスを返し、レンダリング前のレスポンスデータを簡単にカスタマイズできます。詳細は <a class=\"reference internal\" href=\"/ja/5.0/ref/template-response/\"><span class=\"doc\">TemplateResponse のドキュメント</span></a> を参照してください。</p>\n</section>\n</section>\n<section id=\"modeladmin-asset-definitions\">\n<span id=\"id1\"></span><h3><code class=\"docutils literal notranslate\">ModelAdmin</code> アセットの定義<a class=\"heading-anchor\" href=\"#modeladmin-asset-definitions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ビューを追加したり変更したりするために、CSS や JavaScript を追加したいことがあるかもしれません。そういうときには <code class=\"docutils literal notranslate\">ModelAdmin</code> の <code class=\"docutils literal notranslate\">Media</code> インナークラスを使用します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Media</span><span class=\"p\">:</span>\n        css <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;all&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;my_styles.css&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">}</span>\n        js <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;my_code.js&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/staticfiles/\"><span class=\"doc\">staticfiles アプリ</span></a> は、すべてのアセットのパスの前に <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> (<a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> が <code class=\"docutils literal notranslate\">None</code> の場合は <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a>) を付与します。 <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/media/#form-asset-paths\"><span class=\"std std-ref\">フォーム上の通常のアセット定義</span></a> と同じルールが適用されます。</p>\n<section id=\"jquery\">\n<span id=\"contrib-admin-jquery\"></span><h4>jQuery<a class=\"heading-anchor\" href=\"#jquery\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django admin の JavaScript は <a class=\"reference external\" href=\"https://jquery.com\">jQuery</a> ライブラリを使用します。</p>\n<p>ユーザが提供するスクリプトやライブラリとの衝突を避けるため、 Django の jQuery (version 3.7.1) は <code class=\"docutils literal notranslate\">django.jQuery</code> という名前空間になっています。自分の admin JavaScript で jQuery を使いたい場合、別のコピーを入れなくても、 <code class=\"docutils literal notranslate\">django.jQuery</code> オブジェクトをチェンジリストやadd/edit ビューで使用できます。また、 <code class=\"docutils literal notranslate\">django.jQuery</code> に依存する独自の管理フォームやウィジェットは、 <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/media/#assets-as-a-static-definition\"><span class=\"std std-ref\">フォーム メディア アセットの宣言</span></a> の際に <code class=\"docutils literal notranslate\">js=['admin/js/jquery.init.js', …]</code> を指定しなければなりません。</p>\n<aside class=\"version-note version-changed\" data-version=\"4.2\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 4.2</p><p>jQuery が 3.6.0 から 3.6.4 にアップグレードされました。</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>jQueryが 3.6.4 から 3.7.1 にアップグレードされました。</p>\n</aside>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> クラスはデフォルトで jQuery を要件とするので、特別なニーズがない限り jQuery をメディアリソースの <code class=\"docutils literal notranslate\">ModelAdmin</code> のリストに追加する必要はありません。たとえば、jQuery ライブラリがグローバルな名前空間を持つ必要がある場合 (たとえば、サードパーティの jQuery プラグインを使用する場合など)、もしくは jQuery の新しいバージョンを使いたい場合には、自分自身でコピーを用意する必要があります。</p>\n<p>Django には、非圧縮と 'minified' のバージョンのjQuery があり、それぞれ <code class=\"docutils literal notranslate\">jquery.js</code> と <code class=\"docutils literal notranslate\">jquery.min.js</code> となっています。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> と <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">InlineModelAdmin</code></a> には、フォームやフォームセットのJavaScriptファイルへのパスを格納する <code class=\"docutils literal notranslate\">Media</code> オブジェクトのリストを返す <code class=\"docutils literal notranslate\">media</code> プロパティがあります。 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> が <code class=\"docutils literal notranslate\">True</code> の場合、 <code class=\"docutils literal notranslate\">jquery.js</code> を含む様々な JavaScript ファイルの圧縮されていないバージョンを返します。そうでない場合は、 &quot;minify&quot; されたバージョンを返します。</p>\n</section>\n</section>\n<section id=\"adding-custom-validation-to-the-admin\">\n<span id=\"admin-custom-validation\"></span><h3>カスタムのバリデーションを admin に追加する<a class=\"heading-anchor\" href=\"#adding-custom-validation-to-the-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>また、管理画面でデータのカスタムバリデーションを追加することもできます。自動管理インターフェイスは <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/api/#module-django.forms\" title=\"django.forms\"><code class=\"xref py py-mod docutils literal notranslate\">django.forms</code></a> を再利用し、 <code class=\"docutils literal notranslate\">ModelAdmin</code> クラスは独自のフォームを定義する機能を提供します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    form <span class=\"o\">=</span> MyArticleAdminForm\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">MyArticleAdminForm</code> は必要な場所をインポートすればどこでも定義できます。これでフォームの中で任意のフィールドに対して独自のカスタムバリデーションを追加できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyArticleAdminForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>ModelForm<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">clean_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># do something that validates your data</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>ここで <code class=\"docutils literal notranslate\">ModelForm</code> を使用することは重要です。そうしないと問題が発生する可能性があります。 <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/validation/\"><span class=\"doc\">カスタムバリデーション</span></a> に関する <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/\"><span class=\"doc\">フォーム</span></a> のドキュメント、そしてより具体的には <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#overriding-modelform-clean-method\"><span class=\"std std-ref\">モデルフォームのバリデーションに関する注意事項</span></a> を参照してください。</p>\n</section>\n</section>\n<section id=\"inlinemodeladmin-objects\">\n<span id=\"admin-inlines\"></span><h2><code class=\"docutils literal notranslate\">InlineModelAdmin</code> オブジェクト<a class=\"heading-anchor\" href=\"#inlinemodeladmin-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">InlineModelAdmin</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.TabularInline\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TabularInline</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.TabularInline\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.StackedInline\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">StackedInline</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.StackedInline\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin インターフェースには、親モデルと同じページでモデルを編集する機能があります。この機能をインラインと呼びます。以下の 2 つのモデルがあるとしましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Book</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    author <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Author<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>author のページで、author が書いた book を編集できます。<code class=\"docutils literal notranslate\">ModelAdmin.inlines</code> 内でモデルに対するインラインを追加します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">BookInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Book\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>\n        BookInline<span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Django には、以下の通り <code class=\"docutils literal notranslate\">InlineModelAdmin</code> のサブクラスが 2 つあります:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.TabularInline\" title=\"django.contrib.admin.TabularInline\"><code class=\"xref py py-class docutils literal notranslate\">TabularInline</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.StackedInline\" title=\"django.contrib.admin.StackedInline\"><code class=\"xref py py-class docutils literal notranslate\">StackedInline</code></a></p></li>\n</ul>\n<p>この 2 つの違いは、単にレンダリングするために使われるテンプレートの違いです。</p>\n</dd></dl>\n\n<section id=\"inlinemodeladmin-options\">\n<h3><code class=\"docutils literal notranslate\">InlineModelAdmin</code> のオプション<a class=\"heading-anchor\" href=\"#inlinemodeladmin-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">InlineModelAdmin</code> は <code class=\"docutils literal notranslate\">ModelAdmin</code> と多くの機能を共有しており、さらにいくつかの独自の機能を有しています (共有の機能は実際には <code class=\"docutils literal notranslate\">BaseModelAdmin</code> 基底クラスで定義されています)。共有の機能は下記です:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.form\" title=\"django.contrib.admin.InlineModelAdmin.form\"><code class=\"xref py py-attr docutils literal notranslate\">form</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">fieldsets</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fields\" title=\"django.contrib.admin.ModelAdmin.fields\"><code class=\"xref py py-attr docutils literal notranslate\">fields</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.formfield_overrides\" title=\"django.contrib.admin.ModelAdmin.formfield_overrides\"><code class=\"xref py py-attr docutils literal notranslate\">formfield_overrides</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.exclude\" title=\"django.contrib.admin.ModelAdmin.exclude\"><code class=\"xref py py-attr docutils literal notranslate\">exclude</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.filter_horizontal\" title=\"django.contrib.admin.ModelAdmin.filter_horizontal\"><code class=\"xref py py-attr docutils literal notranslate\">filter_horizontal</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.filter_vertical\" title=\"django.contrib.admin.ModelAdmin.filter_vertical\"><code class=\"xref py py-attr docutils literal notranslate\">filter_vertical</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.ordering\" title=\"django.contrib.admin.ModelAdmin.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ordering</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.prepopulated_fields\" title=\"django.contrib.admin.ModelAdmin.prepopulated_fields\"><code class=\"xref py py-attr docutils literal notranslate\">prepopulated_fields</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_fieldsets\" title=\"django.contrib.admin.ModelAdmin.get_fieldsets\"><code class=\"xref py py-meth docutils literal notranslate\">get_fieldsets()</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_queryset\" title=\"django.contrib.admin.ModelAdmin.get_queryset\"><code class=\"xref py py-meth docutils literal notranslate\">get_queryset()</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.radio_fields\" title=\"django.contrib.admin.ModelAdmin.radio_fields\"><code class=\"xref py py-attr docutils literal notranslate\">radio_fields</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">readonly_fields</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.raw_id_fields\" title=\"django.contrib.admin.InlineModelAdmin.raw_id_fields\"><code class=\"xref py py-attr docutils literal notranslate\">raw_id_fields</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.formfield_for_choice_field\" title=\"django.contrib.admin.ModelAdmin.formfield_for_choice_field\"><code class=\"xref py py-meth docutils literal notranslate\">formfield_for_choice_field()</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.formfield_for_foreignkey\" title=\"django.contrib.admin.ModelAdmin.formfield_for_foreignkey\"><code class=\"xref py py-meth docutils literal notranslate\">formfield_for_foreignkey()</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.formfield_for_manytomany\" title=\"django.contrib.admin.ModelAdmin.formfield_for_manytomany\"><code class=\"xref py py-meth docutils literal notranslate\">formfield_for_manytomany()</code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.has_module_permission\" title=\"django.contrib.admin.ModelAdmin.has_module_permission\"><code class=\"xref py py-meth docutils literal notranslate\">has_module_permission()</code></a></p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\">InlineModelAdmin</code> クラスは、以下を追加またはカスタマイズしています:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.model\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">model</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインが使用するモデルです。これは必須です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.fk_name\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">fk_name</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.fk_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデルの外部キーの名前です。多くの場合、これは自動的に処理されますが、同じ親モデルに対して複数の外部キーがある場合には <code class=\"docutils literal notranslate\">fk_name</code> を明示的に指定する必要があります。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.formset\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">formset</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.formset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>これはデフォルトでは <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.models.BaseInlineFormSet\" title=\"django.forms.models.BaseInlineFormSet\"><code class=\"xref py py-class docutils literal notranslate\">BaseInlineFormSet</code></a> です。自分自身のフォームセットを使用すると、カスタマイズの幅が広がります。インラインは <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#model-formsets\"><span class=\"std std-ref\">モデル フォームセット</span></a> で構築されます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.form\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">form</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">form</code> に対する値で、デフォルトは <code class=\"docutils literal notranslate\">ModelForm</code> です。これは、このインラインに対してフォームセットが生成される際に <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/models/#django.forms.models.inlineformset_factory\" title=\"django.forms.models.inlineformset_factory\"><code class=\"xref py py-func docutils literal notranslate\">inlineformset_factory()</code></a> に渡されるものです。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p><code class=\"docutils literal notranslate\">InlineModelAdmin</code> フォーム用のカスタムバリデーションを書く際には、親モデルの機能に依存したバリデーションを書くことに注意してください。親モデルがバリデーションに失敗した場合、 <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#validation-on-modelform\"><span class=\"std std-ref\">ModelForm の検証 (バリデーション)</span></a> の警告に記述されているように、一貫性のない状態で放置される可能性があります。</p>\n</aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.classes\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">classes</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.classes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインに対してレンダリングするフォームセットに適用する、追加的な CSS クラスのリストないしタプルです。デフォルトは <code class=\"docutils literal notranslate\">None</code> です。<a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.fieldsets\" title=\"django.contrib.admin.ModelAdmin.fieldsets\"><code class=\"xref py py-attr docutils literal notranslate\">fieldsets</code></a> で設定したクラスと同様に、<code class=\"docutils literal notranslate\">collapse</code> クラスを伴うインラインは最初は折りたたまれており小さな &quot;show&quot; リンクを持ちます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.extra\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">extra</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.extra\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>フォームセットが初期のフォームに加えて表示する追加的なフォームの数をコントロールします。デフォルトは 3 です。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/formsets/\"><span class=\"doc\">フォームセットのドキュメント</span></a> を参照してください。</p>\n<p>JavaScript が有効なブラウザを使っているユーザーに対しては、&quot;1 つ追加&quot; のリンクが提供され、<code class=\"docutils literal notranslate\">extra</code> 引数の結果提供されるインラインに加えていくつでもインラインを追加できます。</p>\n<p>現在表示されているフォームの数が <code class=\"docutils literal notranslate\">max_num</code> を超えている場合、またはユーザーが JavaScript を有効にしていない場合、ダイナミックリンクは表示されません。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.get_extra\" title=\"django.contrib.admin.InlineModelAdmin.get_extra\"><code class=\"xref py py-meth docutils literal notranslate\">InlineModelAdmin.get_extra()</code></a> でも追加フォームの数をカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.max_num\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">max_num</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.max_num\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインに表示するフォームの最大数をコントロールします。オブジェクトの数と直接関係はありませんが、値が小さい場合には関係する可能性があります。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#model-formsets-max-num\"><span class=\"std std-ref\">編集可能なオブジェクトの数を制限する</span></a> を参照してください。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.get_max_num\" title=\"django.contrib.admin.InlineModelAdmin.get_max_num\"><code class=\"xref py py-meth docutils literal notranslate\">InlineModelAdmin.get_max_num()</code></a> でも追加フォームの最大数をカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.min_num\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">min_num</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.min_num\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインに表示するフォームの最小数をコントロールします。詳しくは <a class=\"reference internal\" href=\"/ja/5.0/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\">modelformset_factory()</code></a> を参照してください。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.get_min_num\" title=\"django.contrib.admin.InlineModelAdmin.get_min_num\"><code class=\"xref py py-meth docutils literal notranslate\">InlineModelAdmin.get_min_num()</code></a> でも追加フォームの最小数をカスタマイズできます。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.raw_id_fields\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">raw_id_fields</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.raw_id_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトでは、<code class=\"docutils literal notranslate\">ForeignKey</code> のフィールドに対して Django の admin はセレクトボックスのインターフェース (<code class=\"docutils literal notranslate\">&lt;select&gt;</code>) を使用します。ドロップダウン内に表示する関係インスタンスをすべて選択するオーバーヘッドから逃れたいこともあるでしょう。</p>\n<p><code class=\"docutils literal notranslate\">raw_id_fields</code> は、<code class=\"docutils literal notranslate\">ForeignKey</code> や <code class=\"docutils literal notranslate\">ManyToManyField</code> に対する <code class=\"docutils literal notranslate\">Input</code> ウィジェットを適用したいフィールドのリストです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">BookInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Book\n    raw_id_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;pages&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.template\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ページ上でインラインをレンダリングするのに使われるテンプレートです。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.verbose_name\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">verbose_name</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.verbose_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデル内部の <code class=\"docutils literal notranslate\">Meta</code> クラスの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/options/#django.db.models.Options.verbose_name\" title=\"django.db.models.Options.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name</code></a> のオーバーライドです。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.verbose_name_plural\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">verbose_name_plural</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.verbose_name_plural\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>モデル内部の <code class=\"docutils literal notranslate\">Meta</code> クラスの <a class=\"reference internal\" href=\"/ja/5.0/ref/models/options/#django.db.models.Options.verbose_name_plural\" title=\"django.db.models.Options.verbose_name_plural\"><code class=\"xref py py-attr docutils literal notranslate\">verbose_name_plural</code></a> をオーバーライドします。これが与えられず、 <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.verbose_name\" title=\"django.contrib.admin.InlineModelAdmin.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">InlineModelAdmin.verbose_name</code></a> が定義されている場合、 Django は <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.verbose_name\" title=\"django.contrib.admin.InlineModelAdmin.verbose_name\"><code class=\"xref py py-attr docutils literal notranslate\">InlineModelAdmin.verbose_name</code></a> + <code class=\"docutils literal notranslate\">'s'</code> を使用します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.can_delete\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">can_delete</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.can_delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インライン内でインラインオブジェクトを削除可能にするかどうかを指定します。デフォルトは <code class=\"docutils literal notranslate\">True</code> です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.show_change_link\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">show_change_link</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.show_change_link\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin 内で変更可能なインラインオブジェクトをが変更フォームへのリンクを持つかどうかを指定します。デフォルトは <code class=\"docutils literal notranslate\">False</code> です。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.get_formset\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">get_formset</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.get_formset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin の追加/変更ビューで使用する <a class=\"reference internal\" href=\"/ja/5.0/topics/forms/modelforms/#django.forms.models.BaseInlineFormSet\" title=\"django.forms.models.BaseInlineFormSet\"><code class=\"xref py py-class docutils literal notranslate\">BaseInlineFormSet</code></a> クラスを返します。 <code class=\"docutils literal notranslate\">obj</code> は編集対象の親オブジェクト、または新しい親オブジェクトを追加する場合は <code class=\"docutils literal notranslate\">None</code> です。 <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_formsets_with_inlines\" title=\"django.contrib.admin.ModelAdmin.get_formsets_with_inlines\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin.get_formsets_with_inlines</code></a> の例を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.get_extra\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">get_extra</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.get_extra\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>使用する追加インラインフォームの数を返します。デフォルトでは、<a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.extra\" title=\"django.contrib.admin.InlineModelAdmin.extra\"><code class=\"xref py py-attr docutils literal notranslate\">InlineModelAdmin.extra</code></a> 属性を返します。</p>\n<p>プログラムに従って追加インラインフォームの数を決めたい場合、このメソッドをオーバーライドしてください。たとえば、モデルインスタンス (キーワード引数の <code class=\"docutils literal notranslate\">obj</code> で渡されています) に基づいて数を決められます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">BinaryTreeAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> BinaryTree\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_extra</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        extra <span class=\"o\">=</span> <span class=\"mi\">2</span>\n        <span class=\"k\">if</span> obj<span class=\"p\">:</span>\n            <span class=\"k\">return</span> extra <span class=\"o\">-</span> obj<span class=\"o\">.</span>binarytree_set<span class=\"o\">.</span>count<span class=\"p\">()</span>\n        <span class=\"k\">return</span> extra\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.get_max_num\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">get_max_num</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.get_max_num\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>使用する追加インラインフォームの最大数を返します。デフォルトでは、<a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.max_num\" title=\"django.contrib.admin.InlineModelAdmin.max_num\"><code class=\"xref py py-attr docutils literal notranslate\">InlineModelAdmin.max_num</code></a> 属性を返します。</p>\n<p>プログラムに従ってインラインフォームの最大数を決めたい場合、このメソッドをオーバーライドしてください。たとえば、モデルインスタンス (キーワード引数の <code class=\"docutils literal notranslate\">obj</code> で渡されています) に基づいて最大数を決められます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">BinaryTreeAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> BinaryTree\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_max_num</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> obj<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        max_num <span class=\"o\">=</span> <span class=\"mi\">10</span>\n        <span class=\"k\">if</span> obj <span class=\"ow\">and</span> obj<span class=\"o\">.</span>parent<span class=\"p\">:</span>\n            <span class=\"k\">return</span> max_num <span class=\"o\">-</span> <span class=\"mi\">5</span>\n        <span class=\"k\">return</span> max_num\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.get_min_num\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">get_min_num</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.get_min_num\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>使用する追加インラインフォームの最小数を返します。デフォルトでは、<a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin.min_num\" title=\"django.contrib.admin.InlineModelAdmin.min_num\"><code class=\"xref py py-attr docutils literal notranslate\">InlineModelAdmin.min_num</code></a> 属性を返します。</p>\n<p>プログラムに従ってインラインフォームの最小数を決めたい場合、このメソッドをオーバーライドしてください。たとえば、モデルインスタンス (キーワード引数の <code class=\"docutils literal notranslate\">obj</code> で渡されています) に基づいて最小数を決められます:</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.has_add_permission\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">has_add_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.has_add_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインオブジェクトの追加が許可されている場合 <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。<code class=\"docutils literal notranslate\">obj</code> は編集される親オブジェクトか、新規追加の場合には <code class=\"docutils literal notranslate\">None</code> となります。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.has_change_permission\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">has_change_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.has_change_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインオブジェクトの編集が許可されている場合 <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。<code class=\"docutils literal notranslate\">obj</code> は編集される親オブジェクトです。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.InlineModelAdmin.has_delete_permission\">\n<span class=\"sig-prename descclassname\">InlineModelAdmin.</span><span class=\"sig-name descname\">has_delete_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">obj<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.InlineModelAdmin.has_delete_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>インラインオブジェクトの削除が許可されている場合 <code class=\"docutils literal notranslate\">True</code> を、そうでなければ <code class=\"docutils literal notranslate\">False</code> を返します。<code class=\"docutils literal notranslate\">obj</code> は編集される親オブジェクトです。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">InlineModelAdmin</code> メソッドに渡される <code class=\"docutils literal notranslate\">obj</code> 引数は編集対象の親オブジェクト、または新しい親オブジェクトを追加する場合は <code class=\"docutils literal notranslate\">None</code> です。</p>\n</aside>\n</section>\n<section id=\"working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model\">\n<h3>同じ親モデルへの複数の外部キーを持つモデルを扱う<a class=\"heading-anchor\" href=\"#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>同じモデルに対する複数の外部キーを持つこともあり得ます。例として以下のモデルを見てみましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Friendship</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    to_person <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n        Person<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span> related_name<span class=\"o\">=</span><span class=\"s2\">&quot;friends&quot;</span>\n    <span class=\"p\">)</span>\n    from_person <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n        Person<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">,</span> related_name<span class=\"o\">=</span><span class=\"s2\">&quot;from_friends&quot;</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">Person</code> の admin の追加や変更ページでインラインを表示したい場合は、自動的に判別することができないため、外部キーを明示的に定義する必要があります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Friendship\n\n\n<span class=\"k\">class</span> <span class=\"nc\">FriendshipInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Friendship\n    fk_name <span class=\"o\">=</span> <span class=\"s2\">&quot;to_person&quot;</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>\n        FriendshipInline<span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"working-with-many-to-many-models\">\n<h3>多対多のモデルを扱う<a class=\"heading-anchor\" href=\"#working-with-many-to-many-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>デフォルトでは、多対多のリレーションに対する管理ウィジェットは、実際に <a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> への参照を含むモデルに表示されます。 <code class=\"docutils literal notranslate\">ModelAdmin</code> の定義に応じて、モデル内の各多対多フィールドは標準のHTML <code class=\"docutils literal notranslate\">&lt;select multiple&gt;</code>, 水平または垂直フィルタ、または <code class=\"docutils literal notranslate\">raw_id_fields</code> ウィジェットによって表されます。しかし、これらのウィジェットをインラインで置き換えることもできます。</p>\n<p>次のようなモデルがあるとします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Group</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    members <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Person<span class=\"p\">,</span> related_name<span class=\"o\">=</span><span class=\"s2\">&quot;groups&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>インラインを使用して多対多のリレーションを表示したい場合、リレーションシップに <code class=\"docutils literal notranslate\">InlineModelAdmin</code> オブジェクトを定義することで表示できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MembershipInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Group<span class=\"o\">.</span>members<span class=\"o\">.</span>through\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>\n        MembershipInline<span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">GroupAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>\n        MembershipInline<span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n    exclude <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;members&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>この例で注目すべき点は2つです。</p>\n<p>まず、 <code class=\"docutils literal notranslate\">MembershipInline</code> クラスは <code class=\"docutils literal notranslate\">Group.members.through</code> を参照しています。 <code class=\"docutils literal notranslate\">through</code> 属性は多対多のリレーションを管理するモデルへの参照です。このモデルは、多対多のフィールドを定義したときに Django が自動的に作成します。</p>\n<p>次に、 <code class=\"docutils literal notranslate\">GroupAdmin</code> は手動で <code class=\"docutils literal notranslate\">members</code> フィールドを除外する必要があります。Django は多対多のフィールドの管理ウィジェットを、リレーションを定義するモデル (この場合は <code class=\"docutils literal notranslate\">Group</code>) 上に表示します。インラインモデルを使って多対多のリレーションを表現したい場合は、 Django の admin に、このウィジェットを <em>表示しない</em> ように指示しなければなりません。</p>\n<p>このテクニックを使う場合、 <a class=\"reference internal\" href=\"/ja/5.0/ref/signals/#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\">m2m_changed</code></a> シグナルはトリガーされないことに注意してください。これは、admin にとっては <code class=\"docutils literal notranslate\">through</code> は多対多のリレーションではなく、2つの外部キーフィールドを持つモデルに過ぎないからです。</p>\n<p>その他の点では <code class=\"docutils literal notranslate\">InlineModelAdmin</code> は他のものと全く同じです。通常の <code class=\"docutils literal notranslate\">ModelAdmin</code> プロパティを使用して外観をカスタマイズできます。</p>\n</section>\n<section id=\"working-with-many-to-many-intermediary-models\">\n<h3>多対多の中間モデルとともに使う<a class=\"heading-anchor\" href=\"#working-with-many-to-many-intermediary-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/5.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> の <code class=\"docutils literal notranslate\">through</code> 引数で中間モデルを指定した場合、管理画面はデフォルトではウィジェットを表示しません。これは、その中間モデルの各インスタンスは、単一のウィジェットで表示できる以上の情報を必要とし、複数のウィジェットに必要なレイアウトは中間モデルによって異なるからです。</p>\n<p>しかし、インラインで情報を編集できるようにしたいと思うでしょう。幸いなことに、インライン admin モデルでこれを実現できます。次のようなモデルがあるとします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Group</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    members <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Person<span class=\"p\">,</span> through<span class=\"o\">=</span><span class=\"s2\">&quot;Membership&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Membership</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    person <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Person<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    group <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Group<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    date_joined <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    invite_reason <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">64</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>この中間モデルを管理画面に表示するための最初のステップは <code class=\"docutils literal notranslate\">Membership</code> モデルのインラインクラスを定義することです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">MembershipInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>TabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Membership\n    extra <span class=\"o\">=</span> <span class=\"mi\">1</span>\n</code></pre></div>\n<p>この例では <code class=\"docutils literal notranslate\">Membership</code> モデルにデフォルトの <code class=\"docutils literal notranslate\">InlineModelAdmin</code> の値を使用し、追加の追加フォームを 1 つに制限しています。これは <code class=\"docutils literal notranslate\">InlineModelAdmin</code> クラスで利用可能なオプションを使ってカスタマイズできます。</p>\n<p>次に <code class=\"docutils literal notranslate\">Person</code> と <code class=\"docutils literal notranslate\">Group</code> モデルの管理ビューを作成します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>MembershipInline<span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">GroupAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>MembershipInline<span class=\"p\">]</span>\n</code></pre></div>\n<p>最後に、 <code class=\"docutils literal notranslate\">Person</code> と <code class=\"docutils literal notranslate\">Group</code> のモデルを管理サイトに登録します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>admin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Person<span class=\"p\">,</span> PersonAdmin<span class=\"p\">)</span>\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Group<span class=\"p\">,</span> GroupAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p>これであなたの管理サイトは <code class=\"docutils literal notranslate\">Person</code> または <code class=\"docutils literal notranslate\">Group</code> の詳細ページから <code class=\"docutils literal notranslate\">Membership</code> オブジェクトをインラインで編集できるように設定されました。</p>\n</section>\n<section id=\"using-generic-relations-as-an-inline\">\n<span id=\"id3\"></span><h3>ジェネリックリレーションをインラインとして使う<a class=\"heading-anchor\" href=\"#using-generic-relations-as-an-inline\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ジェネリックリレーションを定義されたオブジェクトでインラインを使用することもできます。以下のようなモデルがあるとします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"kn\">import</span> GenericForeignKey\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Image</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    image <span class=\"o\">=</span> models<span class=\"o\">.</span>ImageField<span class=\"p\">(</span>upload_to<span class=\"o\">=</span><span class=\"s2\">&quot;images&quot;</span><span class=\"p\">)</span>\n    content_type <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>ContentType<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    object_id <span class=\"o\">=</span> models<span class=\"o\">.</span>PositiveIntegerField<span class=\"p\">()</span>\n    content_object <span class=\"o\">=</span> GenericForeignKey<span class=\"p\">(</span><span class=\"s2\">&quot;content_type&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;object_id&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Product</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">Product</code> の追加/変更ビューで <code class=\"docutils literal notranslate\">Image</code> インスタンスの編集や作成を可能にしたい場合、 <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/#module-django.contrib.contenttypes.admin\" title=\"django.contrib.contenttypes.admin\"><code class=\"xref py py-mod docutils literal notranslate\">admin</code></a> によって提供される <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericTabularInline\" title=\"django.contrib.contenttypes.admin.GenericTabularInline\"><code class=\"xref py py-class docutils literal notranslate\">GenericTabularInline</code></a> や <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericStackedInline\" title=\"django.contrib.contenttypes.admin.GenericStackedInline\"><code class=\"xref py py-class docutils literal notranslate\">GenericStackedInline</code></a> （どちらも <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericInlineModelAdmin\" title=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GenericInlineModelAdmin</code></a> のサブクラス）を使用できます。これらはそれぞれ、インラインオブジェクトを表すフォームのための tabular 形式と stack 形式のビジュアルレイアウトを実装しており、ジェネリックでないものと同様です。これらは他のインラインと全く同じように動作します。この例のアプリのための <code class=\"docutils literal notranslate\">admin.py</code> では次のようにします:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.admin</span> <span class=\"kn\">import</span> GenericTabularInline\n\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.models</span> <span class=\"kn\">import</span> Image<span class=\"p\">,</span> Product\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ImageInline</span><span class=\"p\">(</span>GenericTabularInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Image\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ProductAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>\n        ImageInline<span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Product<span class=\"p\">,</span> ProductAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p>詳しくは <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/\"><span class=\"doc\">contenttypes のドキュメント</span></a> を参照してください。</p>\n</section>\n</section>\n<section id=\"overriding-admin-templates\">\n<span id=\"admin-overriding-templates\"></span><h2>admin テンプレートをオーバーライドする<a class=\"heading-anchor\" href=\"#overriding-admin-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>admin モジュールが admin サイトの様々なページを生成するために使用するテンプレートの多くはオーバーライドできます。特定のアプリや特定のモデルのためにこれらのテンプレートの一部をオーバーライドすることもできます。</p>\n<section id=\"set-up-your-projects-admin-template-directories\">\n<h3>プロジェクトの admin テンプレートディレクトリを設定する<a class=\"heading-anchor\" href=\"#set-up-your-projects-admin-template-directories\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>admin テンプレートファイルは <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/contrib/admin/templates/admin\">django/contrib/admin/templates/admin</a> ディレクトリにあります。</p>\n<p>そのうちの一つ以上を上書きするには、まずプロジェクトの <code class=\"docutils literal notranslate\">templates</code> ディレクトリに <code class=\"docutils literal notranslate\">admin</code> ディレクトリを作成してください。これは <code class=\"docutils literal notranslate\">DjangoTemplates</code> バックエンドの <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> オプションの <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> 設定で指定したディレクトリのどれでもかまいません。 <code class=\"docutils literal notranslate\">'loaders'</code> オプションをカスタマイズしている場合は、 <code class=\"docutils literal notranslate\">'django.template.loaders.app_directories.Loader'</code> の前に <code class=\"docutils literal notranslate\">'django.template.loaders.filesystem.Loader'</code> が表示されていることを確認してください。そうすれば、 <a class=\"reference internal\" href=\"#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.admin</code></a> でインクルードされているテンプレートよりも先に、カスタムテンプレートがテンプレート読み込みシステムによって検出されます。</p>\n<p>この <code class=\"docutils literal notranslate\">admin</code> ディレクトリの中に、アプリに対応した名前のサブディレクトリを作成します。これらのアプリのサブディレクトリの中に、モデルに対応した名前のサブディレクトリを作成します。 大文字と小文字を区別するファイルシステム上でアプリを実行する場合は、ディレクトリ名をすべて小文字にしてください、adminアプリはディレクトリを探すときにモデル名を小文字にします。</p>\n<p>特定のアプリの管理テンプレートを上書きするには、 <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/contrib/admin/templates/admin\">django/contrib/admin/templates/admin</a> ディレクトリからテンプレートをコピーして編集し、先ほど作成したディレクトリのいずれかに保存します。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\">my_app</code> という名前のアプリのすべてのモデルのチェンジリストビューにツールを追加したい場合、<code class=\"docutils literal notranslate\">contrib/admin/templates/admin/change_list.html</code> をプロジェクトの <code class=\"docutils literal notranslate\">templates/admin/my_app/</code> ディレクトリにコピーし、必要な変更を加えます。</p>\n<p>もし、 &quot;Page&quot; という特定のモデルだけのチェンジリストビューにツールを追加したい場合、同じファイルをプロジェクトの <code class=\"docutils literal notranslate\">templates/admin/my_app/page</code> ディレクトリにコピーします。</p>\n</section>\n<section id=\"overriding-vs-replacing-an-admin-template\">\n<h3>admin テンプレートをオーバーライドするか、それとも置き換えるか<a class=\"heading-anchor\" href=\"#overriding-vs-replacing-an-admin-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>管理画面のテンプレートはモジュール化されているため、通常はテンプレート全体を置き換える必要はありません。ほとんどの場合、変更する必要があるテンプレートのセクションだけをオーバーライドする方がよいでしょう。</p>\n<p>上記の例の続きとして、<code class=\"docutils literal notranslate\">Page</code> モデルの <code class=\"docutils literal notranslate\">History</code> ツールの隣に新しいリンクを追加したいとします。 <code class=\"docutils literal notranslate\">change_form.html</code> を見ると、 <code class=\"docutils literal notranslate\">object-tools-items</code> ブロックをオーバーライドするだけでよいことがわかります。そこで、以下に新しい <code class=\"docutils literal notranslate\">change_form.html</code> の例を示します:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s2\">&quot;admin/change_form.html&quot;</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">i18n</span> <span class=\"nv\">admin_urls</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">object-tools-items</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"nv\">opts</span><span class=\"o\">|</span><span class=\"nf\">admin_urlname</span><span class=\"s1\">:&#39;history&#39;</span> <span class=\"nv\">original.pk</span><span class=\"o\">|</span><span class=\"nf\">admin_urlquote</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;historylink&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">translate</span> <span class=\"s2\">&quot;History&quot;</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;mylink/&quot;</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;historylink&quot;</span><span class=\"p\">&gt;</span>My Link<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">has_absolute_url</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;admin:view_on_site&#39;</span> <span class=\"nv\">content_type_id</span> <span class=\"nv\">original.pk</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;viewsitelink&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">translate</span> <span class=\"s2\">&quot;View on site&quot;</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>これで完了です！このファイルを <code class=\"docutils literal notranslate\">templates/admin/my_app</code> ディレクトリに置くと、my_app 内のすべてのモデルの変更フォームにリンクが表示されます。</p>\n</section>\n<section id=\"templates-which-may-be-overridden-per-app-or-model\">\n<span id=\"admin-templates-overridden-per-app-or-model\"></span><h3>アプリやモデルごとにオーバーライド可能なテンプレート<a class=\"heading-anchor\" href=\"#templates-which-may-be-overridden-per-app-or-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">contrib/admin/templates/admin</code> にある全てのテンプレートがアプリやモデルごとにオーバーライドできるわけではありません。以下のものは可能です:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">actions.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">app_index.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">change_form.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">change_form_object_tools.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">change_list.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">change_list_object_tools.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">change_list_results.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">date_hierarchy.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">delete_confirmation.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">object_history.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">pagination.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">popup_response.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">prepopulated_fields_js.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">search_form.html</code></p></li>\n<li><p><code class=\"docutils literal notranslate\">submit_line.html</code></p></li>\n</ul>\n<p>この方法でオーバーライドできないテンプレートについては、 <code class=\"docutils literal notranslate\">templates/admin</code> ディレクトリに新しいバージョンを置くことで、プロジェクト全体でオーバーライドできます。これは特に独自の404ページや500ページを作成するのに便利です。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">change_list_results.html</code> のようないくつかの管理用テンプレートはカスタムインクルージョンタグのレンダリングに使用されます。これらはオーバーライドできますが、そのような場合、おそらく問題のタグの独自のバージョンを作成し、別の名前を付けた方が良いでしょう。そうすれば、選択的に使用できます。</p>\n</aside>\n</section>\n<section id=\"root-and-login-templates\">\n<h3>ルートテンプレートとログインテンプレート<a class=\"heading-anchor\" href=\"#root-and-login-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>インデックス、ログイン、ログアウトのテンプレートを変更したい場合は、独自の <code class=\"docutils literal notranslate\">AdminSite</code> インスタンス（下記参照）を作成し、 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.index_template\" title=\"django.contrib.admin.AdminSite.index_template\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.index_template</code></a> 、 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.login_template\" title=\"django.contrib.admin.AdminSite.login_template\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.login_template</code></a> 、 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.logout_template\" title=\"django.contrib.admin.AdminSite.logout_template\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.logout_template</code></a> プロパティを変更した方が良いでしょう。</p>\n</section>\n</section>\n<section id=\"theming-support\">\n<span id=\"admin-theming\"></span><h2>テーマのサポート<a class=\"heading-anchor\" href=\"#theming-support\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>管理画面では、CSS 変数を使用して色とフォントを定義します。これにより、多くの個別の CSS ルールを上書きすることなくテーマを変更できます。たとえば、青の代わりに紫を使うには、以下のような <code class=\"docutils literal notranslate\">admin/base.html</code> テンプレートをプロジェクトに追加します。</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">extends</span> <span class=\"s1\">&#39;admin/base.html&#39;</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">block</span> <span class=\"nv\">extrastyle</span> <span class=\"cp\">%}{{</span> <span class=\"nb\">block</span><span class=\"nv\">.super</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">style</span><span class=\"p\">&gt;</span>\n<span class=\"nt\">html</span><span class=\"o\">[</span><span class=\"nt\">data-theme</span><span class=\"o\">=</span><span class=\"s2\">&quot;light&quot;</span><span class=\"o\">],</span> <span class=\"p\">:</span><span class=\"nd\">root</span> <span class=\"p\">{</span>\n  <span class=\"nv\">--primary</span><span class=\"p\">:</span> <span class=\"mh\">#9774d5</span><span class=\"p\">;</span>\n  <span class=\"nv\">--secondary</span><span class=\"p\">:</span> <span class=\"mh\">#785cab</span><span class=\"p\">;</span>\n  <span class=\"nv\">--link-fg</span><span class=\"p\">:</span> <span class=\"mh\">#7c449b</span><span class=\"p\">;</span>\n  <span class=\"nv\">--link-selected-fg</span><span class=\"p\">:</span> <span class=\"mh\">#8f5bb2</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">style</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endblock</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>CSS 変数のリストは <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/contrib/admin/static/admin/css/base.css\">django/contrib/admin/static/admin/css/base.css</a> で定義されています。</p>\n<p><a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/&#64;media/prefers-color-scheme\">prefers-color-scheme</a> メディアクエリを尊重したダークモード変数は <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.0.x/django/contrib/admin/static/admin/css/dark_mode.css\">django/contrib/admin/static/admin/css/dark_mode.css</a> で定義されています。これは <code class=\"docutils literal notranslate\">{% block dark-mode-vars %}</code> のドキュメントにリンクされています。</p>\n</section>\n<section id=\"adminsite-objects\">\n<h2><code class=\"docutils literal notranslate\">AdminSite</code> オブジェクト<a class=\"heading-anchor\" href=\"#adminsite-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AdminSite</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name<span class=\"o\">=</span><span class=\"default_value\">'admin'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Django の admin サイトは <code class=\"docutils literal notranslate\">django.contrib.admin.sites.AdminSite</code> のインスタンスで表現されます。デフォルトでは、このクラスのインスタンスは <code class=\"docutils literal notranslate\">django.contrib.admin.site</code> として作成され、モデルや <code class=\"docutils literal notranslate\">ModelAdmin</code> インスタンスを登録できます。</p>\n<p>デフォルトのadminサイトをカスタマイズしたい場合は、 <a class=\"reference internal\" href=\"#overriding-default-admin-site\"><span class=\"std std-ref\">オーバーライド</span></a> することができます。</p>\n<p>管理サイト <code class=\"docutils literal notranslate\">AdminSite</code> のインスタンスを作成する際には、コンストラクタの <code class=\"docutils literal notranslate\">name</code> 引数に一意なインスタンス名を指定できます。このインスタンス名はインスタンスを識別するために使用され、特に <a class=\"reference internal\" href=\"#admin-reverse-urls\"><span class=\"std std-ref\">管理用URL</span></a> を逆引きするときに使用されます。インスタンス名を指定しなかった場合、デフォルトのインスタンス名 <code class=\"docutils literal notranslate\">admin</code> が使用されます。 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a> クラスをカスタマイズする例については <a class=\"reference internal\" href=\"#customizing-adminsite\"><span class=\"std std-ref\">AdminSite クラスのカスタマイズ</span></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.django.contrib.admin.sites.all_sites\">\n<span class=\"sig-prename descclassname\">django.contrib.admin.sites.</span><span class=\"sig-name descname\">all_sites</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.django.contrib.admin.sites.all_sites\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference external\" href=\"https://docs.python.org/3/library/weakref.html#weakref.WeakSet\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">WeakSet</code></a> は全ての管理サイトのインスタンスを含んでいます。</p>\n</dd></dl>\n\n<section id=\"adminsite-attributes\">\n<h3><code class=\"docutils literal notranslate\">AdminSite</code> の属性<a class=\"heading-anchor\" href=\"#adminsite-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テンプレートは <a class=\"reference internal\" href=\"#admin-overriding-templates\"><span class=\"std std-ref\">admin テンプレートをオーバーライドする</span></a> で説明されているように、基本管理テンプレートを上書きしたり拡張したりすることができます。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.site_header\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">site_header</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.site_header\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>各管理ページの上部に表示するテキストを <code class=\"docutils literal notranslate\">&lt;div&gt;</code> (文字列) で指定します。デフォルトでは &quot;Django administration&quot; です。</p>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>古いバージョンでは <code class=\"docutils literal notranslate\">site_header</code> は <code class=\"docutils literal notranslate\">&lt;h1&gt;</code> タグを使用していました。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.site_title\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">site_title</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.site_title\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>各管理ページの <code class=\"docutils literal notranslate\">&lt;title&gt;</code> の末尾に付けるテキスト (文字列)。デフォルトでは &quot;Django site admin&quot; です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.site_url\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">site_url</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.site_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>各管理ページの上部にある &quot;サイトを見る &quot;リンクのURL。デフォルトでは <code class=\"docutils literal notranslate\">site_url</code> は <code class=\"docutils literal notranslate\">/</code> です。リンクを削除するには <code class=\"docutils literal notranslate\">None</code> を指定してください。</p>\n<p>サブパス上で動作しているサイトでは、 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.each_context\" title=\"django.contrib.admin.AdminSite.each_context\"><code class=\"xref py py-meth docutils literal notranslate\">each_context()</code></a> メソッドは現在のリクエストに <code class=\"docutils literal notranslate\">request.META['SCRIPT_NAME']</code> が設定されているかどうかをチェックし、 <code class=\"docutils literal notranslate\">site_url</code> に <code class=\"docutils literal notranslate\">/</code> 以外の値が設定されていなければ、その値を使用します。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.index_title\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">index_title</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.index_title\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>管理インデックスページのトップに表示するテキスト（文字列）。デフォルトでは &quot;Site administration &quot;です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.index_template\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">index_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.index_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのメインインデックスビューで使用されるカスタムテンプレートへのパス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.app_index_template\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">app_index_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.app_index_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのアプリ インデックスビューで使用されるカスタムテンプレートへのパス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.empty_value_display\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">empty_value_display</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.empty_value_display\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのチェンジリストで空の値を表示する際に使用する文字列。デフォルトはダッシュです。この値はフィールドに <code class=\"docutils literal notranslate\">empty_value_display</code> 属性を指定することで、 <code class=\"docutils literal notranslate\">ModelAdmin</code> ごとや <code class=\"docutils literal notranslate\">ModelAdmin</code> 内のカスタムフィールドごとにオーバーライドできます。例については <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.empty_value_display\" title=\"django.contrib.admin.ModelAdmin.empty_value_display\"><code class=\"xref py py-attr docutils literal notranslate\">ModelAdmin.empty_value_display</code></a> を参照してください。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.enable_nav_sidebar\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">enable_nav_sidebar</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.enable_nav_sidebar\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>大きな画面でナビゲーションサイドバーを表示するかどうかを決定する真偽値。デフォルトでは <code class=\"docutils literal notranslate\">True</code> に設定されています。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.final_catch_all_view\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">final_catch_all_view</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.final_catch_all_view\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>認証されていないユーザーをログインページにリダイレクトさせる最終キャッチオールビューを管理画面に追加するかどうかを決定する真偽値。デフォルトでは <code class=\"docutils literal notranslate\">True</code> に設定されています。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>このビューはモデル列挙のプライバシーに関する潜在的な問題から保護するため、これを <code class=\"docutils literal notranslate\">False</code> に設定することは推奨されません。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.login_template\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">login_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.login_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのログインビューで使用されるカスタムテンプレートへのパス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.login_form\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">login_form</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.login_form\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのログインビューで使用される <a class=\"reference internal\" href=\"/ja/5.0/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\">AuthenticationForm</code></a> のサブクラス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.logout_template\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">logout_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.logout_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのログアウトビューで使用されるカスタムテンプレートへのパス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.password_change_template\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">password_change_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.password_change_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトのパスワード変更ビューで使用されるカスタムテンプレートへのパス。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.password_change_done_template\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">password_change_done_template</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.password_change_done_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>adminサイトのパスワード変更完了ビューで使用されるカスタムテンプレートへのパス。</p>\n</dd></dl>\n\n</section>\n<section id=\"adminsite-methods\">\n<h3><code class=\"docutils literal notranslate\">AdminSite</code> のメソッド<a class=\"heading-anchor\" href=\"#adminsite-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.each_context\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">each_context</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.each_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>admin サイトの各ページのテンプレートコンテキストに置く変数の辞書を返します。</p>\n<p>デフォルトで以下の変数と値が含まれています：</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">site_header</code>: <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.site_header\" title=\"django.contrib.admin.AdminSite.site_header\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.site_header</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">site_title</code>: <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.site_title\" title=\"django.contrib.admin.AdminSite.site_title\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.site_title</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">site_url</code>: <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.site_url\" title=\"django.contrib.admin.AdminSite.site_url\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.site_url</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">has_permission</code>: <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.has_permission\" title=\"django.contrib.admin.AdminSite.has_permission\"><code class=\"xref py py-meth docutils literal notranslate\">AdminSite.has_permission()</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">available_apps</code>: <a class=\"reference internal\" href=\"/ja/5.0/ref/applications/\"><span class=\"doc\">アプリケーションレジストリ</span></a> から現在のユーザーが利用できるアプリケーションのリストです。リストの各エントリは以下のキーを持つアプリケーションを表す dict です:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">app_label</code>: アプリケーションのラベル</p></li>\n<li><p><code class=\"docutils literal notranslate\">app_url</code>: admin のアプリケーションインデックスの URL</p></li>\n<li><p><code class=\"docutils literal notranslate\">has_module_perms</code>: 現在のユーザーに対して、モジュールのインデックスページの表示とアクセスが許可されているかどうかを示す真偽値。</p></li>\n<li><p><code class=\"docutils literal notranslate\">models</code>: アプリケーションで利用可能なモデルのリスト。</p></li>\n</ul>\n<p>各 model は以下のキーを持つ dict です:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">model</code>: モデルクラス</p></li>\n<li><p><code class=\"docutils literal notranslate\">object_name</code>: モデルのクラス名</p></li>\n<li><p><code class=\"docutils literal notranslate\">name</code>: 複数形のモデル名</p></li>\n<li><p><code class=\"docutils literal notranslate\">perms</code>: <code class=\"docutils literal notranslate\">add</code>, <code class=\"docutils literal notranslate\">change</code>, <code class=\"docutils literal notranslate\">delete</code>, <code class=\"docutils literal notranslate\">view</code> のパーミッションをトラッキングする <code class=\"docutils literal notranslate\">dict</code>。</p></li>\n<li><p><code class=\"docutils literal notranslate\">admin_url</code>: モデルの管理用チェンジリストのURL</p></li>\n<li><p><code class=\"docutils literal notranslate\">add_url</code>: 新しいモデルインスタンスを追加するための管理用URL</p></li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\">is_popup</code>: 現在のページがポップアップウィンドウで表示されるかどうか</p></li>\n<li><p><code class=\"docutils literal notranslate\">is_nav_sidebar_enabled</code>: <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.enable_nav_sidebar\" title=\"django.contrib.admin.AdminSite.enable_nav_sidebar\"><code class=\"xref py py-attr docutils literal notranslate\">AdminSite.enable_nav_sidebar</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">log_entries</code>: <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite.get_log_entries\" title=\"django.contrib.admin.AdminSite.get_log_entries\"><code class=\"xref py py-meth docutils literal notranslate\">AdminSite.get_log_entries()</code></a></p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.get_app_list\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">get_app_list</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em>, <em class=\"sig-param\">app_label<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.get_app_list\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"/ja/5.0/ref/applications/\"><span class=\"doc\">アプリケーションレジストリ</span></a> から、現在のユーザーが利用できるアプリケーションのリストを返します。オプションで <code class=\"docutils literal notranslate\">app_label</code> 引数を渡すことで、単一のアプリケーションの詳細を取得できます。リストの各エントリは以下のキーを持つアプリケーションを表す辞書です:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">app_label</code>: アプリケーションのラベル</p></li>\n<li><p><code class=\"docutils literal notranslate\">app_url</code>: admin のアプリケーションインデックスの URL</p></li>\n<li><p><code class=\"docutils literal notranslate\">has_module_perms</code>: 現在のユーザーに対して、モジュールのインデックスページの表示とアクセスが許可されているかどうかを示す真偽値。</p></li>\n<li><p><code class=\"docutils literal notranslate\">models</code>: アプリケーションで利用可能なモデルのリスト。</p></li>\n<li><p><code class=\"docutils literal notranslate\">name</code>: アプリケーションの名前</p></li>\n</ul>\n<p>各 model は以下のキーを持つ辞書です:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">model</code>: モデルクラス</p></li>\n<li><p><code class=\"docutils literal notranslate\">object_name</code>: モデルのクラス名</p></li>\n<li><p><code class=\"docutils literal notranslate\">name</code>: 複数形のモデル名</p></li>\n<li><p><code class=\"docutils literal notranslate\">perms</code>: <code class=\"docutils literal notranslate\">add</code>, <code class=\"docutils literal notranslate\">change</code>, <code class=\"docutils literal notranslate\">delete</code>, <code class=\"docutils literal notranslate\">view</code> のパーミッションをトラッキングする <code class=\"docutils literal notranslate\">dict</code>。</p></li>\n<li><p><code class=\"docutils literal notranslate\">admin_url</code>: モデルの管理用チェンジリストのURL</p></li>\n<li><p><code class=\"docutils literal notranslate\">add_url</code>: 新しいモデルインスタンスを追加するための管理用URL</p></li>\n</ul>\n<p>アプリケーションとモデルのリストはそれらの名前によってアルファベット順にソートされます。このメソッドをオーバーライドして、管理インデックスページのデフォルトの並び順を変更できます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.has_permission\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">has_permission</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.has_permission\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された <code class=\"docutils literal notranslate\">HttpRequest</code> のユーザが admin サイトの少なくとも1つのページを閲覧する権限を持っている場合に <code class=\"docutils literal notranslate\">True</code> を返します。デフォルトは <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/auth/#django.contrib.auth.models.User.is_active\" title=\"django.contrib.auth.models.User.is_active\"><code class=\"xref py py-attr docutils literal notranslate\">User.is_active</code></a> と <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/auth/#django.contrib.auth.models.User.is_staff\" title=\"django.contrib.auth.models.User.is_staff\"><code class=\"xref py py-attr docutils literal notranslate\">User.is_staff</code></a> の両方が <code class=\"docutils literal notranslate\">True</code> である必要があります。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.register\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">register</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_or_iterable</em>, <em class=\"sig-param\">admin_class<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.register\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定された model クラス (またはクラスのイテラブル) を指定された <code class=\"docutils literal notranslate\">admin_class</code> とともに登録します。<code class=\"docutils literal notranslate\">admin_class</code> はデフォルトで <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> (デフォルトの管理オプション) になります。キーワード引数 (たとえば <code class=\"docutils literal notranslate\">list_display</code>) が与えられた場合、それらは admin クラスのオプションとして適用されます。</p>\n<p>モデルが抽象クラスの場合は <a class=\"reference internal\" href=\"/ja/5.0/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-class docutils literal notranslate\">ImproperlyConfigured</code></a> を、モデルが既に登録されている場合は <code class=\"docutils literal notranslate\">django.contrib.admin.exceptions.AlreadyRegistered</code> を発生させます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.unregister\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">unregister</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_or_iterable</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.unregister\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>指定されたモデルクラス（またはクラスのイテラブル）の登録を解除します。</p>\n<p>モデルが登録されていない場合、 <code class=\"docutils literal notranslate\">django.contrib.admin.exceptions.NotRegistered</code> を発生させます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.get_model_admin\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">get_model_admin</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.get_model_admin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p>与えられた model クラスの admin クラスを返します。モデルが登録されていない場合は <code class=\"docutils literal notranslate\">django.contrib.admin.exceptions.NotRegistered</code> を発生させます。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.AdminSite.get_log_entries\">\n<span class=\"sig-prename descclassname\">AdminSite.</span><span class=\"sig-name descname\">get_log_entries</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">request</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.AdminSite.get_log_entries\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p>サイトインデックスページに表示される、関連する <a class=\"reference internal\" href=\"#django.contrib.admin.models.LogEntry\" title=\"django.contrib.admin.models.LogEntry\"><code class=\"xref py py-class docutils literal notranslate\">LogEntry</code></a> インスタンスのクエリセットを返します。このメソッドは、他の条件でログエントリをフィルタするためにオーバーライドできます。</p>\n</dd></dl>\n\n</section>\n<section id=\"hooking-adminsite-instances-into-your-urlconf\">\n<span id=\"hooking-adminsite-to-urlconf\"></span><h3>URLconf に <code class=\"docutils literal notranslate\">AdminSite</code> インスタンスをフックします。<a class=\"heading-anchor\" href=\"#hooking-adminsite-instances-into-your-urlconf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django admin のセットアップの最後のステップは、 <code class=\"docutils literal notranslate\">AdminSite</code> インスタンスを URLconf にフックすることです。指定した URL を <code class=\"docutils literal notranslate\">AdminSite.urls</code> メソッドで指定します。 <a class=\"reference internal\" href=\"/ja/5.0/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> を使う必要はありません。</p>\n<p>このインスタンスでは、デフォルトの <code class=\"docutils literal notranslate\">AdminSite</code> インスタンス <code class=\"docutils literal notranslate\">django.contrib.admin.site</code> を URL <code class=\"docutils literal notranslate\">/admin/</code> に登録します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># urls.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;admin/&quot;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"customizing-the-adminsite-class\">\n<span id=\"customizing-adminsite\"></span><h3><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code> クラスのカスタマイズ<a class=\"heading-anchor\" href=\"#customizing-the-adminsite-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>カスタムの動作で独自の admin サイトを設定したい場合は、自由に <code class=\"docutils literal notranslate\">AdminSite</code> をサブクラス化し、好きなものをオーバーライドしたり追加したりすることができます。そして、 <code class=\"docutils literal notranslate\">AdminSite</code> サブクラスのインスタンスを作成し (他の Python クラスと同じようにインスタンスを作成します)、モデルや <code class=\"docutils literal notranslate\">ModelAdmin</code> サブクラスをデフォルトのサイトではなく、サブクラスに登録します。最後に、 <code class=\"file docutils literal notranslate\">myproject/urls.py</code> を更新して、 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a> サブクラスを参照するようにします。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myapp/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> MyModel\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyAdminSite</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>AdminSite<span class=\"p\">):</span>\n    site_header <span class=\"o\">=</span> <span class=\"s2\">&quot;Monty Python administration&quot;</span>\n\n\nadmin_site <span class=\"o\">=</span> MyAdminSite<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;myadmin&quot;</span><span class=\"p\">)</span>\nadmin_site<span class=\"o\">.</span>register<span class=\"p\">(</span>MyModel<span class=\"p\">)</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myproject/urls.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.admin</span> <span class=\"kn\">import</span> admin_site\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;myadmin/&quot;</span><span class=\"p\">,</span> admin_site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>自分の <code class=\"docutils literal notranslate\">AdminSite</code> インスタンスを使う場合、アプリごとの <code class=\"docutils literal notranslate\">admin</code> モジュールを全て <code class=\"docutils literal notranslate\">myproject.admin</code> モジュールにインポートする可能性が高いので、 <code class=\"docutils literal notranslate\">admin</code> モジュールを自動検出させたくないかも知れないことに注意してください。つまり、 <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 設定に <code class=\"docutils literal notranslate\">'django.contrib.admin'</code> の代わりに <code class=\"docutils literal notranslate\">'django.contrib.admin.apps.SimpleAdminConfig'</code> を記述する必要があります。</p>\n</section>\n<section id=\"overriding-the-default-admin-site\">\n<span id=\"overriding-default-admin-site\"></span><h3>デフォルトの admin サイトをオーバーライドする<a class=\"heading-anchor\" href=\"#overriding-the-default-admin-site\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>デフォルトの <code class=\"docutils literal notranslate\">django.contrib.admin.site</code> をオーバーライドするには、カスタム <code class=\"docutils literal notranslate\">AppConfig</code> の <a class=\"reference internal\" href=\"#django.contrib.admin.apps.SimpleAdminConfig.default_site\" title=\"django.contrib.admin.apps.SimpleAdminConfig.default_site\"><code class=\"xref py py-attr docutils literal notranslate\">default_site</code></a> 属性に <code class=\"docutils literal notranslate\">AdminSite</code> サブクラスまたはサイトのインスタンスを返す呼び出し可能オブジェクトのドット区切りインポートパスを指定します。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myproject/admin.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyAdminSite</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>AdminSite<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myproject/apps.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.admin.apps</span> <span class=\"kn\">import</span> AdminConfig\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyAdminConfig</span><span class=\"p\">(</span>AdminConfig<span class=\"p\">):</span>\n    default_site <span class=\"o\">=</span> <span class=\"s2\">&quot;myproject.admin.MyAdminSite&quot;</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myproject/settings.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code>INSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"s2\">&quot;myproject.apps.MyAdminConfig&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># replaces &#39;django.contrib.admin&#39;</span>\n    <span class=\"c1\"># ...</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n</section>\n<section id=\"multiple-admin-sites-in-the-same-urlconf\">\n<span id=\"multiple-admin-sites\"></span><h3>同じ URLconf に複数の admin サイトを置く<a class=\"heading-anchor\" href=\"#multiple-admin-sites-in-the-same-urlconf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>同じ Django を使った Web サイトに、複数の admin サイトのインスタンスを作成できます。 <code class=\"docutils literal notranslate\">AdminSite</code> のインスタンスを複数作成し、それぞれを異なる URL に配置します。</p>\n<p>このインスタンスでは、 <code class=\"docutils literal notranslate\">/basic-admin/</code> と <code class=\"docutils literal notranslate\">/advanced-admin/</code> はそれぞれ <code class=\"docutils literal notranslate\">AdminSite</code> インスタンス <code class=\"docutils literal notranslate\">myproject.admin.basic_site</code> と <code class=\"docutils literal notranslate\">myproject.admin.advanced_site</code> を使用した別々のバージョンの admin サイトです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># urls.py</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> path\n<span class=\"kn\">from</span> <span class=\"nn\">myproject.admin</span> <span class=\"kn\">import</span> advanced_site<span class=\"p\">,</span> basic_site\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;basic-admin/&quot;</span><span class=\"p\">,</span> basic_site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;advanced-admin/&quot;</span><span class=\"p\">,</span> advanced_site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">AdminSite</code> インスタンスはコンストラクタに一つの引数、名前を渡します。この引数は <a class=\"reference internal\" href=\"#admin-reverse-urls\"><span class=\"std std-ref\">逆引き</span></a> のためにURL名のプレフィックスとなります。これは複数の <code class=\"docutils literal notranslate\">AdminSite</code> を使用する場合にのみ必要です。</p>\n</section>\n<section id=\"adding-views-to-admin-sites\">\n<h3>admin サイトにビューを追加する<a class=\"heading-anchor\" href=\"#adding-views-to-admin-sites\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> と同様に、 <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a> は <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_urls\" title=\"django.contrib.admin.ModelAdmin.get_urls\"><code class=\"xref py py-meth docutils literal notranslate\">get_urls()</code></a> メソッドを提供し、このメソッドをオーバーライドすることでサイトに追加のビューを定義できます。admin サイトに新しいビューを追加するには、ベースとなる <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_urls\" title=\"django.contrib.admin.ModelAdmin.get_urls\"><code class=\"xref py py-meth docutils literal notranslate\">get_urls()</code></a> メソッドを拡張して、新しいビューのパターンを追加します。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>admin テンプレートを使用する、またはベースとなる admin テンプレートを拡張するビューは、テンプレートをレンダリングする前に <code class=\"docutils literal notranslate\">request.current_app</code> を設定する必要があります。ビューが <code class=\"docutils literal notranslate\">AdminSite</code> にある場合は <code class=\"docutils literal notranslate\">self.name</code> を、ビューが <code class=\"docutils literal notranslate\">ModelAdmin</code> にある場合は <code class=\"docutils literal notranslate\">self.admin_site.name</code> を設定します。</p>\n</aside>\n</section>\n<section id=\"adding-a-password-reset-feature\">\n<span id=\"auth-password-reset\"></span><h3>パスワードリセット機能を追加する<a class=\"heading-anchor\" href=\"#adding-a-password-reset-feature\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URLconfに数行を追加することで、admin サイトにパスワードリセット機能を追加できます。具体的には、以下の4つのパターンを追加します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> auth_views\n\npath<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;admin/password_reset/&quot;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>\n        extra_context<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;site_header&quot;</span><span class=\"p\">:</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>site_header<span class=\"p\">}</span>\n    <span class=\"p\">),</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;admin_password_reset&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\npath<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;admin/password_reset/done/&quot;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetDoneView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>\n        extra_context<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;site_header&quot;</span><span class=\"p\">:</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>site_header<span class=\"p\">}</span>\n    <span class=\"p\">),</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;password_reset_done&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\npath<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;reset/&lt;uidb64&gt;/&lt;token&gt;/&quot;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetConfirmView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>\n        extra_context<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;site_header&quot;</span><span class=\"p\">:</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>site_header<span class=\"p\">}</span>\n    <span class=\"p\">),</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;password_reset_confirm&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\npath<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;reset/done/&quot;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetCompleteView<span class=\"o\">.</span>as_view<span class=\"p\">(</span>\n        extra_context<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;site_header&quot;</span><span class=\"p\">:</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>site_header<span class=\"p\">}</span>\n    <span class=\"p\">),</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;password_reset_complete&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\n</code></pre></div>\n<p>（上記は <code class=\"docutils literal notranslate\">admin/</code> に admin を追加していることを前提としており、admin アプリ自体を含む行の前に <code class=\"docutils literal notranslate\">^admin/</code> で始まるURLを配置することが必要です）</p>\n<p><code class=\"docutils literal notranslate\">admin_password_reset</code> という名前のURLがあると、デフォルトの admin ログインページのパスワードボックスの下に &quot;forgot your password? &quot;というリンクが表示されます。</p>\n</section>\n</section>\n<section id=\"logentry-objects\">\n<h2><code class=\"docutils literal notranslate\">LogEntry</code> オブジェクト<a class=\"heading-anchor\" href=\"#logentry-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">models.</span><span class=\"sig-name descname\">LogEntry</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\">LogEntry</code> クラスは管理画面を通して行われたオブジェクトの追加、変更、削除を記録します。</p>\n</dd></dl>\n\n<section id=\"logentry-attributes\">\n<h3><code class=\"docutils literal notranslate\">LogEntry</code> の属性<a class=\"heading-anchor\" href=\"#logentry-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.action_time\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">action_time</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.action_time\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>アクションの日時。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.user\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">user</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.user\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>アクションを実行したユーザー（ <a class=\"reference internal\" href=\"/ja/5.0/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\">AUTH_USER_MODEL</code></a> インスタンス）。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.content_type\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">content_type</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.content_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>変更されたオブジェクトの <a class=\"reference internal\" href=\"/ja/5.0/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\">ContentType</code></a> 。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.object_id\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">object_id</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.object_id\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>変更されたオブジェクトの主キーのテキスト表現。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.object_repr\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">object_repr</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.object_repr\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>変更後のオブジェクトの <code class=\"docutils literal notranslate\">repr()</code> 。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.action_flag\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">action_flag</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.action_flag\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ログに記録されたアクションの種類: <code class=\"docutils literal notranslate\">ADDITION</code>, <code class=\"docutils literal notranslate\">CHANGE</code>, <code class=\"docutils literal notranslate\">DELETION</code> 。</p>\n<p>たとえば、admin を通して行われたすべての追加操作のリストを取得する場合:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.admin.models</span> <span class=\"kn\">import</span> ADDITION<span class=\"p\">,</span> LogEntry\n\nLogEntry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>action_flag<span class=\"o\">=</span>ADDITION<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.change_message\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">change_message</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.change_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>変更の詳細。たとえば編集の場合、メッセージには編集されたフィールドのリストが含まれます。Django の admin サイトでは、この内容を JSON 構造として整形し、<a class=\"reference internal\" href=\"#django.contrib.admin.models.LogEntry.get_change_message\" title=\"django.contrib.admin.models.LogEntry.get_change_message\"><code class=\"xref py py-meth docutils literal notranslate\">get_change_message()</code></a> が現在のユーザ言語で翻訳されたメッセージを再構成できるようにしています。カスタムコードではこれをプレーンな文字列として設定するかもしれません。この値を取得するには、直接アクセスするのではなく <a class=\"reference internal\" href=\"#django.contrib.admin.models.LogEntry.get_change_message\" title=\"django.contrib.admin.models.LogEntry.get_change_message\"><code class=\"xref py py-meth docutils literal notranslate\">get_change_message()</code></a> メソッドを使用することをお勧めします。</p>\n</dd></dl>\n\n</section>\n<section id=\"logentry-methods\">\n<h3><code class=\"docutils literal notranslate\">LogEntry</code> メソッド<a class=\"heading-anchor\" href=\"#logentry-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.get_edited_object\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">get_edited_object</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.get_edited_object\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>参照されているオブジェクトを返すショートカット。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.models.LogEntry.get_change_message\">\n<span class=\"sig-prename descclassname\">LogEntry.</span><span class=\"sig-name descname\">get_change_message</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.models.LogEntry.get_change_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.contrib.admin.models.LogEntry.change_message\" title=\"django.contrib.admin.models.LogEntry.change_message\"><code class=\"xref py py-attr docutils literal notranslate\">change_message</code></a> を現在のユーザ言語に変換します。Django 1.10 より前に作成されたメッセージは、常にログに記録された言語で表示されます。</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"reversing-admin-urls\">\n<span id=\"admin-reverse-urls\"></span><h2>admin の URL を逆引きする<a class=\"heading-anchor\" href=\"#reversing-admin-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a> がデプロイされると、そのサイトが提供するビューは Django の <a class=\"reference internal\" href=\"/ja/5.0/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">URL 逆引きシステム</span></a> を使ってアクセスできるようになります。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\">AdminSite</code></a> は以下のURLパターンを提供します:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>ページ</p></th>\n<th class=\"head\"><p>URL 名</p></th>\n<th class=\"head\"><p>パラメータ</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>インデックス</p></td>\n<td><p><code class=\"docutils literal notranslate\">index</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-odd\"><td><p>ログイン</p></td>\n<td><p><code class=\"docutils literal notranslate\">login</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-even\"><td><p>ログアウト</p></td>\n<td><p><code class=\"docutils literal notranslate\">logout</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-odd\"><td><p>パスワードの変更</p></td>\n<td><p><code class=\"docutils literal notranslate\">password_change</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-even\"><td><p>パスワード変更完了</p></td>\n<td><p><code class=\"docutils literal notranslate\">password_change_done</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-odd\"><td><p>国際化 JavaScript</p></td>\n<td><p><code class=\"docutils literal notranslate\">jsi18n</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-even\"><td><p>アプリケーションのインデックスページ</p></td>\n<td><p><code class=\"docutils literal notranslate\">app_list</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">app_label</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>オブジェクトのページへのリダイレクト</p></td>\n<td><p><code class=\"docutils literal notranslate\">view_on_site</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">content_type_id</code>, <code class=\"docutils literal notranslate\">object_id</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>それぞれの <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> インスタンスは追加の名前付き URL のセットを提供します:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>ページ</p></th>\n<th class=\"head\"><p>URL 名</p></th>\n<th class=\"head\"><p>パラメータ</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>チェンジリスト</p></td>\n<td><p><code class=\"docutils literal notranslate\">{{ app_label }}_{{ model_name }}_changelist</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-odd\"><td><p>追加</p></td>\n<td><p><code class=\"docutils literal notranslate\">{{ app_label }}_{{ model_name }}_add</code></p></td>\n<td></td>\n</tr>\n<tr class=\"row-even\"><td><p>履歴</p></td>\n<td><p><code class=\"docutils literal notranslate\">{{ app_label }}_{{ model_name }}_history</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">object_id</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>削除</p></td>\n<td><p><code class=\"docutils literal notranslate\">{{ app_label }}_{{ model_name }}_delete</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">object_id</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p>変更</p></td>\n<td><p><code class=\"docutils literal notranslate\">{{ app_label }}_{{ model_name }}_change</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">object_id</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p><code class=\"docutils literal notranslate\">UserAdmin</code> は以下の名前付きURLを提供します:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>ページ</p></th>\n<th class=\"head\"><p>URL 名</p></th>\n<th class=\"head\"><p>パラメータ</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>パスワードの変更</p></td>\n<td><p><code class=\"docutils literal notranslate\">auth_user_password_change</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">user_id</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>これらの名前付きURLはアプリケーション名前空間 <code class=\"docutils literal notranslate\">admin</code> とサイトインスタンス名に対応するインスタンス名前空間に登録されます。</p>\n<p>つまり、デフォルトの admin 画面で特定の <code class=\"docutils literal notranslate\">Choice</code> オブジェクト(投票アプリケーションから)の変更ビューへの参照を取得したい場合、次のように呼び出します:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> reverse\n<span class=\"gp\">&gt;&gt;&gt; </span>c <span class=\"o\">=</span> Choice<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>change_url <span class=\"o\">=</span> reverse<span class=\"p\">(</span><span class=\"s2\">&quot;admin:polls_choice_change&quot;</span><span class=\"p\">,</span> args<span class=\"o\">=</span><span class=\"p\">(</span>c<span class=\"o\">.</span>id<span class=\"p\">,))</span>\n</code></pre></div>\n<p>これは、最初に登録された管理アプリケーションのインスタンスを（インスタンス名が何であっても）見つけ、そのインスタンスで <code class=\"docutils literal notranslate\">poll.Choice</code> インスタンスを変更するためのビューを解決します。</p>\n<p>特定の管理インスタンスのURLを見つけたい場合は、そのインスタンス名を <code class=\"docutils literal notranslate\">current_app</code> ヒントとして逆引きのコールに与えます。たとえば、特に <code class=\"docutils literal notranslate\">custom</code> という名前の管理インスタンスから管理ビューを取得したい場合は、以下のように呼び出す必要があります。</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>change_url <span class=\"o\">=</span> reverse<span class=\"p\">(</span><span class=\"s2\">&quot;admin:polls_choice_change&quot;</span><span class=\"p\">,</span> args<span class=\"o\">=</span><span class=\"p\">(</span>c<span class=\"o\">.</span>id<span class=\"p\">,),</span> current_app<span class=\"o\">=</span><span class=\"s2\">&quot;custom&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>詳細は <a class=\"reference internal\" href=\"/ja/5.0/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">名前空間のURLの逆引き</span></a> のドキュメントを参照してください。</p>\n<p>Django は、テンプレート内で admin の URL を簡単に逆引きできるように、アクション を引数に取る <code class=\"docutils literal notranslate\">admin_urlname</code> フィルタを提供しています:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">admin_urls</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"nv\">opts</span><span class=\"o\">|</span><span class=\"nf\">admin_urlname</span><span class=\"s1\">:&#39;add&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Add user<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"nv\">opts</span><span class=\"o\">|</span><span class=\"nf\">admin_urlname</span><span class=\"s1\">:&#39;delete&#39;</span> <span class=\"nv\">user.pk</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Delete this user<span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>上記の例のアクションは上記の <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> インスタンスの URL 名の最後の部分と一致します。変数 <code class=\"docutils literal notranslate\">opts</code> には <code class=\"docutils literal notranslate\">app_label</code> と <code class=\"docutils literal notranslate\">model_name</code> 属性を持つ任意のオブジェクトを指定することができ、通常は現在のモデルの管理ビューから提供されます。</p>\n</section>\n<section id=\"the-display-decorator\">\n<h2><code class=\"docutils literal notranslate\">display</code> デコレータ<a class=\"heading-anchor\" href=\"#the-display-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.display\">\n<span class=\"sig-name descname\">display</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">boolean<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ordering<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">description<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">empty_value<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.display\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このデコレータは <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.list_display\" title=\"django.contrib.admin.ModelAdmin.list_display\"><code class=\"xref py py-attr docutils literal notranslate\">list_display</code></a> や <a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.readonly_fields\" title=\"django.contrib.admin.ModelAdmin.readonly_fields\"><code class=\"xref py py-attr docutils literal notranslate\">readonly_fields</code></a> で使用できるカスタム表示関数に特定の属性を指定するために使用できます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@admin</span><span class=\"o\">.</span>display<span class=\"p\">(</span>\n    boolean<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    ordering<span class=\"o\">=</span><span class=\"s2\">&quot;-publish_date&quot;</span><span class=\"p\">,</span>\n    description<span class=\"o\">=</span><span class=\"s2\">&quot;Is Published?&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">is_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n    <span class=\"k\">return</span> obj<span class=\"o\">.</span>publish_date <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n</code></pre></div>\n<p>これは、いくつかの属性を（元の長い名前で）関数に直接設定することと等価です。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">is_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n    <span class=\"k\">return</span> obj<span class=\"o\">.</span>publish_date <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n\nis_published<span class=\"o\">.</span>boolean <span class=\"o\">=</span> <span class=\"kc\">True</span>\nis_published<span class=\"o\">.</span>admin_order_field <span class=\"o\">=</span> <span class=\"s2\">&quot;-publish_date&quot;</span>\nis_published<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s2\">&quot;Is Published?&quot;</span>\n</code></pre></div>\n<p>また、<code class=\"docutils literal notranslate\">empty_value</code> デコレータパラメータは、関数に直接割り当てられた <code class=\"docutils literal notranslate\">empty_value_display</code> 属性にマッピングされることに注意してください。真偽値 <code class=\"docutils literal notranslate\">boolean</code> と併用することはできません。</p>\n<p>このデコレータの使用は、表示関数を作成する上で必須ではありませんが、 関数の目的を特定するための目印として、引数なしで使用すると便利です:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"nd\">@admin</span><span class=\"o\">.</span>display\n<span class=\"k\">def</span> <span class=\"nf\">published_year</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> obj<span class=\"p\">):</span>\n    <span class=\"k\">return</span> obj<span class=\"o\">.</span>publish_date<span class=\"o\">.</span>year\n</code></pre></div>\n<p>この場合、関数に属性は追加されません。</p>\n</dd></dl>\n\n</section>\n<section id=\"the-staff-member-required-decorator\">\n<h2><code class=\"docutils literal notranslate\">staff_member_required</code> デコレータ<a class=\"heading-anchor\" href=\"#the-staff-member-required-decorator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.views.decorators.staff_member_required\">\n<span class=\"sig-name descname\">staff_member_required</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">redirect_field_name<span class=\"o\">=</span><span class=\"default_value\">'next'</span></em>, <em class=\"sig-param\">login_url<span class=\"o\">=</span><span class=\"default_value\">'admin:login'</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.views.decorators.staff_member_required\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このデコレータは、認可が必要な admin ビューで使用されます。この関数でデコレーションされたビューは、以下の動作をするようになります。</p>\n<ul class=\"simple\">\n<li><p>ユーザーがログインしており、スタッフであり(<code class=\"docutils literal notranslate\">User.is_staff=True</code>)、アクティブであれば(<code class=\"docutils literal notranslate\">User.is_active=True</code>)、ビューを正常に実行します。</p></li>\n<li><p>そうでない場合、リクエストは <code class=\"docutils literal notranslate\">login_url</code> パラメータで指定された URL にリダイレクトされ、 <code class=\"docutils literal notranslate\">redirect_field_name</code> で指定されたクエリ文字列変数に元々リクエストされていたパスが格納されます。例: <code class=\"docutils literal notranslate\">/admin/login/?next=/admin/polls/question/3/</code> 。</p></li>\n</ul>\n<p>使用例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.admin.views.decorators</span> <span class=\"kn\">import</span> staff_member_required\n\n\n<span class=\"nd\">@staff_member_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n</section>","rootId":"module-django.contrib.admin","toc":[{"title":"概要","anchor":"overview","children":[{"title":"他のトピック","anchor":"other-topics","children":[]}]},{"title":"ModelAdmin のオブジェクト","anchor":"modeladmin-objects","children":[{"title":"register デコレータ","anchor":"the-register-decorator","children":[]},{"title":"admin ファイルを見つける","anchor":"discovery-of-admin-files","children":[]},{"title":"ModelAdmin のオプション","anchor":"modeladmin-options","children":[{"title":"カスタムテンプレートのオプション","anchor":"custom-template-options","children":[]}]},{"title":"ModelAdmin のメソッド","anchor":"modeladmin-methods","children":[{"title":"その他のメソッド","anchor":"other-methods","children":[]}]},{"title":"ModelAdmin アセットの定義","anchor":"modeladmin-asset-definitions","children":[{"title":"jQuery","anchor":"jquery","children":[]}]},{"title":"カスタムのバリデーションを admin に追加する","anchor":"adding-custom-validation-to-the-admin","children":[]}]},{"title":"InlineModelAdmin オブジェクト","anchor":"inlinemodeladmin-objects","children":[{"title":"InlineModelAdmin のオプション","anchor":"inlinemodeladmin-options","children":[]},{"title":"同じ親モデルへの複数の外部キーを持つモデルを扱う","anchor":"working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model","children":[]},{"title":"多対多のモデルを扱う","anchor":"working-with-many-to-many-models","children":[]},{"title":"多対多の中間モデルとともに使う","anchor":"working-with-many-to-many-intermediary-models","children":[]},{"title":"ジェネリックリレーションをインラインとして使う","anchor":"using-generic-relations-as-an-inline","children":[]}]},{"title":"admin テンプレートをオーバーライドする","anchor":"overriding-admin-templates","children":[{"title":"プロジェクトの admin テンプレートディレクトリを設定する","anchor":"set-up-your-projects-admin-template-directories","children":[]},{"title":"admin テンプレートをオーバーライドするか、それとも置き換えるか","anchor":"overriding-vs-replacing-an-admin-template","children":[]},{"title":"アプリやモデルごとにオーバーライド可能なテンプレート","anchor":"templates-which-may-be-overridden-per-app-or-model","children":[]},{"title":"ルートテンプレートとログインテンプレート","anchor":"root-and-login-templates","children":[]}]},{"title":"テーマのサポート","anchor":"theming-support","children":[]},{"title":"AdminSite オブジェクト","anchor":"adminsite-objects","children":[{"title":"AdminSite の属性","anchor":"adminsite-attributes","children":[]},{"title":"AdminSite のメソッド","anchor":"adminsite-methods","children":[]},{"title":"URLconf に AdminSite インスタンスをフックします。","anchor":"hooking-adminsite-instances-into-your-urlconf","children":[]},{"title":"AdminSite クラスのカスタマイズ","anchor":"customizing-the-adminsite-class","children":[]},{"title":"デフォルトの admin サイトをオーバーライドする","anchor":"overriding-the-default-admin-site","children":[]},{"title":"同じ URLconf に複数の admin サイトを置く","anchor":"multiple-admin-sites-in-the-same-urlconf","children":[]},{"title":"admin サイトにビューを追加する","anchor":"adding-views-to-admin-sites","children":[]},{"title":"パスワードリセット機能を追加する","anchor":"adding-a-password-reset-feature","children":[]}]},{"title":"LogEntry オブジェクト","anchor":"logentry-objects","children":[{"title":"LogEntry の属性","anchor":"logentry-attributes","children":[]},{"title":"LogEntry メソッド","anchor":"logentry-methods","children":[]}]},{"title":"admin の URL を逆引きする","anchor":"reversing-admin-urls","children":[]},{"title":"display デコレータ","anchor":"the-display-decorator","children":[]},{"title":"staff_member_required デコレータ","anchor":"the-staff-member-required-decorator","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.0/ref/"},{"docname":"ref/contrib/index","title":"contrib パッケージ","url":"/ja/5.0/ref/contrib/"}],"prev":{"docname":"ref/contrib/index","title":"contrib パッケージ","url":"/ja/5.0/ref/contrib/"},"next":{"docname":"ref/contrib/admin/actions","title":"管理アクション","url":"/ja/5.0/ref/contrib/admin/actions/"},"formats":{"html":"/ja/5.0/ref/contrib/admin/","markdown":"/ja/5.0/ref/contrib/admin.md","json":"/ja/5.0/ref/contrib/admin.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/admin/index.txt","official":"https://docs.djangoproject.com/ja/5.0/ref/contrib/admin/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}