{"title":"Django の admin サイト","version":"2.1","locale":"ja","docname":"ref/contrib/admin/index","url":"/ja/2.1/ref/contrib/admin/","canonical":"https://djangodocs.dev/ja/2.1/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/2.1/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a> で使用されるデフォルトのプロジェクトテンプレートで有効になります。</p>\n<p>If you're not using the default project template, here are the requirements:</p>\n<ol class=\"arabic simple\">\n<li><p>Add <code class=\"docutils literal notranslate\">'django.contrib.admin'</code> and its dependencies -\n<a class=\"reference internal\" href=\"/ja/2.1/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/2.1/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>,\n<a class=\"reference internal\" href=\"/ja/2.1/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>, and <a class=\"reference internal\" href=\"/ja/2.1/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> - to your\n<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setting.</p></li>\n<li><p>Configure a <a class=\"reference internal\" href=\"/ja/2.1/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>\nbackend in your <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> setting with\n<code class=\"docutils literal notranslate\">django.contrib.auth.context_processors.auth</code> and\n<code class=\"docutils literal notranslate\">django.contrib.messages.context_processors.messages</code> in\nthe <code class=\"docutils literal notranslate\">'context_processors'</code> option of <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-TEMPLATES-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">OPTIONS</code></a>.</p></li>\n<li><p>If you've customized the <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a> setting,\n<a class=\"reference internal\" href=\"/ja/2.1/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> and\n<a class=\"reference internal\" href=\"/ja/2.1/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> must be\nincluded.</p></li>\n</ol>\n<ol class=\"arabic simple\" start=\"5\">\n<li><p><a class=\"reference internal\" href=\"#hooking-adminsite-to-urlconf\"><span class=\"std std-ref\">Hook the admin's URLs into your URLconf</span></a>.</p></li>\n</ol>\n<p>After you've taken these steps, you'll be able to use the admin site by\nvisiting the URL you hooked it into (<code class=\"docutils literal notranslate\">/admin/</code>, by default).</p>\n<p>If you need to create a user to login with, use the <a class=\"reference internal\" href=\"/ja/2.1/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\">createsuperuser</code></a>\ncommand. By default, logging in to the admin requires that the user has the\n<a class=\"reference internal\" href=\"/ja/2.1/ref/contrib/auth/#django.contrib.auth.models.User.is_superuser\" title=\"django.contrib.auth.models.User.is_superuser\"><code class=\"xref py py-attr docutils literal notranslate\">is_superuser</code></a> or <a class=\"reference internal\" href=\"/ja/2.1/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> attribute set to\n<code class=\"docutils literal notranslate\">True</code>.</p>\n<p>Finally, determine which of your application's models should be editable in the\nadmin interface. For each of those models, register them with the admin as\ndescribed in <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/2.1/ref/contrib/admin/actions/\">Admin actions</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/2.1/ref/contrib/admin/admindocs/\">The Django admin documentation generator</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/2.1/ref/contrib/admin/javascript/\">JavaScript customizations in the admin</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/2.1/howto/deployment/wsgi/modwsgi/#serving-files\"><span class=\"std std-ref\">ファイルを配信する</span></a> を参照してください。</p>\n<p>問題が解決しない場合は、<a class=\"reference internal\" href=\"/ja/2.1/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\">myproject.myapp.models</span> <span class=\"kn\">import</span> Author\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>\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>In the preceding example, the <code class=\"docutils literal notranslate\">ModelAdmin</code> class doesn't define any\ncustom values (yet). As a result, the default admin interface will be\nprovided. If you are happy with the default admin interface, you don't\nneed to define a <code class=\"docutils literal notranslate\">ModelAdmin</code> object at all -- you can register the\nmodel class without providing a <code class=\"docutils literal notranslate\">ModelAdmin</code> description. The\npreceding example could be simplified to:</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\">myproject.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.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<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<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>You can't use this decorator if you have to reference your model admin\nclass in its <code class=\"docutils literal notranslate\">__init__()</code> method, e.g.\n<code class=\"docutils literal notranslate\">super(PersonAdmin, self).__init__(*args, **kwargs)</code>. You can use\n<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/2.1/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/2.1/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><aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<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\">Overriding the default admin site</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>If you are using a custom <code class=\"docutils literal notranslate\">AdminSite</code>, it is common to import all of the\n<code class=\"docutils literal notranslate\">ModelAdmin</code> subclasses into your code and register them to the custom\n<code class=\"docutils literal notranslate\">AdminSite</code>. In that case, in order to disable auto-discovery, you should\nput <code class=\"docutils literal notranslate\">'django.contrib.admin.apps.SimpleAdminConfig'</code> instead of\n<code class=\"docutils literal notranslate\">'django.contrib.admin'</code> in your <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setting.</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<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=\"s1\">&#39;pub_date&#39;</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/2.1/ref/contrib/admin/actions/\"><span class=\"doc\">Admin actions</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=\"s1\">&#39;pub_date&#39;</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=\"s1\">&#39;author__pub_date&#39;</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/2.1/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/2.1/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<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=\"s1\">&#39;-empty-&#39;</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<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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;view_birth_date&#39;</span><span class=\"p\">)</span>\n\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\n    view_birth_date<span class=\"o\">.</span>empty_value_display <span class=\"o\">=</span> <span class=\"s1\">&#39;???&#39;</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.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<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<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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">)</span>\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=\"s1\">&#39;birth_date&#39;</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/2.1/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=\"s1\">&#39;url&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</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>より複雑なレイアウトを作るには、the <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=\"s1\">&#39;url&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-note admonition\" role=\"note\">\n<p class=\"admonition-title\">ノート</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/2.1/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<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><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;fields&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;url&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;content&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sites&#39;</span><span class=\"p\">)</span>\n        <span class=\"p\">}),</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;Advanced options&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;classes&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;collapse&#39;</span><span class=\"p\">,),</span>\n            <span class=\"s1\">&#39;fields&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;registration_required&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;template_name&#39;</span><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/2.1/_images/fieldsets.png\" src=\"/ja/2.1/_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=\"s1\">&#39;fields&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;address&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;city&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;state&#39;</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=\"s1\">&#39;fields&#39;</span><span class=\"p\">:</span> <span class=\"p\">((</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;address&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;city&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;state&#39;</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=\"s1\">&#39;classes&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;wide&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;extrapretty&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">collapse</code> と``wide``の 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 string of optional extra text to be displayed at the top of each\nfieldset, under the heading of the fieldset. This string is not\nrendered for <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> due to its\nlayout.</p>\n<p>Note that this value is <em>not</em> HTML-escaped when it's displayed in\nthe admin interface. This lets you include HTML if you so desire.\nAlternatively you can use plain text and\n<a class=\"reference internal\" href=\"/ja/2.1/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> to escape any HTML special\ncharacters.</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/2.1/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/2.1/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-note admonition\" role=\"note\">\n<p class=\"admonition-title\">ノート</p>\n<p><a class=\"reference internal\" href=\"/ja/2.1/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-note admonition\" role=\"note\">\n<p class=\"admonition-title\">ノート</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<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\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=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\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=\"s1\">&#39;age&#39;</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/2.1/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<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=\"s1\">&#39;widget&#39;</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/2.1/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/2.1/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/2.1/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=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</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 つの種類があります:</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=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</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=\"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=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>obj<span class=\"o\">.</span>first_name<span class=\"p\">,</span> obj<span class=\"o\">.</span>last_name<span class=\"p\">))</span><span class=\"o\">.</span>upper<span class=\"p\">()</span>\nupper_case_name<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s1\">&#39;Name&#39;</span>\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=\"s1\">&#39;upper_case_name&#39;</span><span class=\"p\">,)</span>\n\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=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>obj<span class=\"o\">.</span>first_name<span class=\"p\">,</span> obj<span class=\"o\">.</span>last_name<span class=\"p\">))</span><span class=\"o\">.</span>upper<span class=\"p\">()</span>\n    upper_case_name<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s1\">&#39;Name&#39;</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<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=\"k\">def</span> <span class=\"nf\">decade_born_in</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>birthday<span class=\"o\">.</span>strftime<span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;0&#39;s&quot;</span>\n    decade_born_in<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s1\">&#39;Birth decade&#39;</span>\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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;decade_born_in&#39;</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` の場合、Django は ``True</code> か <code class=\"docutils literal notranslate\">False</code> の代わりにかわいい &quot;on&quot; か &quot;off&quot; のアイコンを表示します。</p></li>\n<li><p>与えられた文字列がモデル、<code class=\"docutils literal notranslate\">ModelAdmin</code>、カラブルのどれかの場合、Django はデフォルトで HTML エスケープして出力します。ユーザーの入力をエスケープしたり非エスケープのタグを使う場合、<a class=\"reference internal\" href=\"/ja/2.1/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<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=\"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<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=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;colored_name&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p>これまでの例で見てきたように、カラブル、モデルメソッド、<code class=\"docutils literal notranslate\">ModelAdmin</code> のいずれかを使っているとき、カラブルに <code class=\"docutils literal notranslate\">short_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=\"s1\">&#39;(None)&#39;</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=\"s1\">&#39;unknown&#39;</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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;birth_date_view&#39;</span><span class=\"p\">)</span>\n\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\n    birth_date_view<span class=\"o\">.</span>empty_value_display <span class=\"o\">=</span> <span class=\"s1\">&#39;unknown&#39;</span>\n</code></pre></div>\n</li>\n<li><p>与えられた文字列が、モデルのメソッド、True か False を返す <code class=\"docutils literal notranslate\">ModelAdmin</code>、カラブルのどれかの場合、メソッドに値が <code class=\"docutils literal notranslate\">True</code> の <code class=\"docutils literal notranslate\">boolean</code> 属性を与えれば、Django は かわいい &quot;on&quot; か &quot;off&quot; のアイコンを表示します。</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\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=\"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=\"bp\">self</span><span class=\"o\">.</span>birthday<span class=\"o\">.</span>strftime<span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;195&#39;</span>\n    born_in_fifties<span class=\"o\">.</span>boolean <span class=\"o\">=</span> <span class=\"kc\">True</span>\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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;born_in_fifties&#39;</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=\"s1\">&#39;__str__&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;some_other_field&#39;</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> の要素が特定のデータベースフィールドを表す場合、アイテムの <code class=\"docutils literal notranslate\">admin_order_field</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.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<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=\"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    colored_first_name<span class=\"o\">.</span>admin_order_field <span class=\"o\">=</span> <span class=\"s1\">&#39;first_name&#39;</span>\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=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;colored_first_name&#39;</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\">admin_order_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>colored_first_name<span class=\"o\">.</span>admin_order_field <span class=\"o\">=</span> <span class=\"s1\">&#39;-first_name&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">admin_order_field</code> は関係モデルの値でソートするため、クエリ検索をサポートしています。以下の例は list display に &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<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=\"s1\">&#39;title&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;author&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;author_first_name&#39;</span><span class=\"p\">)</span>\n\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\n    author_first_name<span class=\"o\">.</span>admin_order_field <span class=\"o\">=</span> <span class=\"s1\">&#39;author__first_name&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">admin_order_field</code> 内では <a class=\"reference internal\" href=\"/ja/2.1/ref/models/expressions/\"><span class=\"doc\">Query 表現</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.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<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=\"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=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name\n    full_name<span class=\"o\">.</span>admin_order_field <span class=\"o\">=</span> Concat<span class=\"p\">(</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> Value<span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p><p><code class=\"docutils literal notranslate\">admin_order_field</code> 内での表現のサポートが追加されました。</p>\n</aside>\n</li>\n<li><p>Elements of <code class=\"docutils literal notranslate\">list_display</code> can also be properties. Please note however,\nthat due to the way properties work in Python, setting\n<code class=\"docutils literal notranslate\">short_description</code> on a property is only possible when using the\n<code class=\"docutils literal notranslate\">property()</code> function and <strong>not</strong> with the <code class=\"docutils literal notranslate\">&#64;property</code> decorator.</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=\"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=\"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=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name\n    my_property<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s2\">&quot;Full name of the person&quot;</span>\n\n    full_name <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span>my_property<span class=\"p\">)</span>\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=\"s1\">&#39;full_name&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n</li>\n<li><p>The field names in <code class=\"docutils literal notranslate\">list_display</code> will also appear as CSS classes in\nthe HTML output, in the form of <code class=\"docutils literal notranslate\">column-&lt;field_name&gt;</code> on each <code class=\"docutils literal notranslate\">&lt;th&gt;</code>\nelement. This can be used to set column widths in a CSS file for example.</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=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;birthday&#39;</span><span class=\"p\">)</span>\n    list_display_links <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;last_name&#39;</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=\"s1\">&#39;timestamp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;message&#39;</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<img alt=\"/ja/2.1/_images/list_filter.png\" src=\"/ja/2.1/_images/list_filter.png\" />\n<p><code class=\"docutils literal notranslate\">list_filter</code> は要素のリストかタプルで、各要素は以下のいずれかの種類となります:</p>\n<ul>\n<li><p>フィールドの名称で、フィールドには <code class=\"docutils literal notranslate\">BooleanField</code>、<code class=\"docutils literal notranslate\">CharField</code>、<code class=\"docutils literal notranslate\">DateField</code>、<code class=\"docutils literal notranslate\">DateTimeField</code>、<code class=\"docutils literal notranslate\">IntegerField</code>、<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><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_filter <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;is_staff&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;company&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">list_filter</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>UserAdmin<span class=\"p\">):</span>\n    list_filter <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;company__name&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\">django.contrib.admin.SimpleListFilter</code> を継承したクラスで、title` と <code class=\"docutils literal notranslate\">parameter_name</code> 属性を指定し、また <code class=\"docutils literal notranslate\">lookups</code> と <code class=\"docutils literal notranslate\">queryset</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\">datetime</span> <span class=\"kn\">import</span> date\n\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.utils.translation</span> <span class=\"kn\">import</span> gettext_lazy <span class=\"k\">as</span> _\n\n<span class=\"k\">class</span> <span class=\"nc\">DecadeBornListFilter</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>SimpleListFilter<span class=\"p\">):</span>\n    <span class=\"c1\"># Human-readable title which will be displayed in the</span>\n    <span class=\"c1\"># right admin sidebar just above the filter options.</span>\n    title <span class=\"o\">=</span> _<span class=\"p\">(</span><span class=\"s1\">&#39;decade born&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Parameter for the filter that will be used in the URL query.</span>\n    parameter_name <span class=\"o\">=</span> <span class=\"s1\">&#39;decade&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lookups</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> model_admin<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns a list of tuples. The first element in each</span>\n<span class=\"sd\">        tuple is the coded value for the option that will</span>\n<span class=\"sd\">        appear in the URL query. The second element is the</span>\n<span class=\"sd\">        human-readable name for the option that will appear</span>\n<span class=\"sd\">        in the right sidebar.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;80s&#39;</span><span class=\"p\">,</span> _<span class=\"p\">(</span><span class=\"s1\">&#39;in the eighties&#39;</span><span class=\"p\">)),</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;90s&#39;</span><span class=\"p\">,</span> _<span class=\"p\">(</span><span class=\"s1\">&#39;in the nineties&#39;</span><span class=\"p\">)),</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> queryset<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the filtered queryset based on the value</span>\n<span class=\"sd\">        provided in the query string and retrievable via</span>\n<span class=\"sd\">        `self.value()`.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Compare the requested value (either &#39;80s&#39; or &#39;90s&#39;)</span>\n        <span class=\"c1\"># to decide how to filter the queryset.</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>value<span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;80s&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> queryset<span class=\"o\">.</span>filter<span class=\"p\">(</span>birthday__gte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1980</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n                                    birthday__lte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1989</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>value<span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;90s&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> queryset<span class=\"o\">.</span>filter<span class=\"p\">(</span>birthday__gte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1990</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n                                    birthday__lte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1999</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">))</span>\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_filter <span class=\"o\">=</span> <span class=\"p\">(</span>DecadeBornListFilter<span class=\"p\">,)</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\">HttpRequest</code> オブジェクトが <code class=\"docutils literal notranslate\">lookups</code> と <code class=\"docutils literal notranslate\">queryset</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\">AuthDecadeBornListFilter</span><span class=\"p\">(</span>DecadeBornListFilter<span class=\"p\">):</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lookups</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> model_admin<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=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>lookups<span class=\"p\">(</span>request<span class=\"p\">,</span> model_admin<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> queryset<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=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>queryset<span class=\"p\">(</span>request<span class=\"p\">,</span> queryset<span class=\"p\">)</span>\n</code></pre></div>\n<p>Also as a convenience, the <code class=\"docutils literal notranslate\">ModelAdmin</code> object is passed to\nthe <code class=\"docutils literal notranslate\">lookups</code> method, for example if you want to base the\nlookups on the available data:</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\">AdvancedDecadeBornListFilter</span><span class=\"p\">(</span>DecadeBornListFilter<span class=\"p\">):</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">lookups</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> request<span class=\"p\">,</span> model_admin<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Only show the lookups if there actually is</span>\n<span class=\"sd\">        anyone born in the corresponding decades.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        qs <span class=\"o\">=</span> model_admin<span class=\"o\">.</span>get_queryset<span class=\"p\">(</span>request<span class=\"p\">)</span>\n        <span class=\"k\">if</span> qs<span class=\"o\">.</span>filter<span class=\"p\">(</span>birthday__gte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1980</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n                      birthday__lte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1989</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">))</span><span class=\"o\">.</span>exists<span class=\"p\">():</span>\n            <span class=\"k\">yield</span> <span class=\"p\">(</span><span class=\"s1\">&#39;80s&#39;</span><span class=\"p\">,</span> _<span class=\"p\">(</span><span class=\"s1\">&#39;in the eighties&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> qs<span class=\"o\">.</span>filter<span class=\"p\">(</span>birthday__gte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1990</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n                      birthday__lte<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">1999</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">))</span><span class=\"o\">.</span>exists<span class=\"p\">():</span>\n            <span class=\"k\">yield</span> <span class=\"p\">(</span><span class=\"s1\">&#39;90s&#39;</span><span class=\"p\">,</span> _<span class=\"p\">(</span><span class=\"s1\">&#39;in the nineties&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n</aside>\n</li>\n<li><p>タプルで、最初の要素がフィールド名で、2 番目の要素が <code class=\"docutils literal notranslate\">django.contrib.admin.FieldListFilter</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_filter <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;is_staff&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>BooleanFieldListFilter<span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">RelatedOnlyFieldListFilter</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\">BookAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_filter <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;author&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>RelatedOnlyFieldListFilter<span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">author</code> が <code class=\"docutils literal notranslate\">User</code> モデルへの <code class=\"docutils literal notranslate\">ForeignKey</code> と仮定すると、<code class=\"docutils literal notranslate\">list_filter</code> の選択肢が全ユーザーではなく book を書いたことがあるユーザーだけに絞られます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>The <code class=\"docutils literal notranslate\">FieldListFilter</code> API is considered internal and might be\nchanged.</p>\n</aside>\n</li>\n</ul>\n<p>List filter's typically appear only if the filter has more than one choice.\nA filter's <code class=\"docutils literal notranslate\">has_output()</code> method controls whether or not it appears.</p>\n<p>It is possible to specify a custom template for rendering a list filter:</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\">FilterWithCustomTemplate</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>SimpleListFilter<span class=\"p\">):</span>\n    template <span class=\"o\">=</span> <span class=\"s2\">&quot;custom_template.html&quot;</span>\n</code></pre></div>\n<p>具体的な例については、Django により提供されるデフォルトのテンプレート (<code class=\"docutils literal notranslate\">admin/filter.html</code>) を参照してください。</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; リンクは、この設定値以下の場合のみ表示されます。デフォルトでは``200`` にセットされています。</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/2.1/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=\"s1\">&#39;author&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;category&#39;</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</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/2.1/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</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/2.1/topics/pagination/#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/2.1/topics/pagination/#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>Set <code class=\"docutils literal notranslate\">prepopulated_fields</code> to a dictionary mapping field names to the\nfields it should prepopulate from:</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>When set, the given fields will use a bit of JavaScript to populate from\nthe fields assigned. The main use for this functionality is to\nautomatically generate the value for <code class=\"docutils literal notranslate\">SlugField</code> fields from one or more\nother fields. The generated value is produced by concatenating the values\nof the source fields, and then by transforming that result into a valid\nslug (e.g. substituting dashes for spaces; lowercasing ASCII letters; and\nremoving various English stop words such as 'a', 'an', 'as', and similar).</p>\n<p>Prepopulated fields aren't modified by JavaScript after a value has been\nsaved. It's usually undesired that slugs change (which would cause an\nobject's URL to change if the slug is used in it).</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>admin は現在、オブジェクトの作成、編集、削除を行った後もリストビューのフィルタを維持します。この属性を <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.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><aside class=\"version-note version-added\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<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> フィールドによりフィルタされ、また``date_created`` フィールドにより並べ替えられます:</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=\"s1\">&#39;date_created&#39;</span><span class=\"p\">]</span>\n    search_fields <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;question_text&#39;</span><span class=\"p\">]</span>\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=\"s1\">&#39;question&#39;</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/2.1/_images/raw_id_fields.png\" src=\"/ja/2.1/_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/2.1/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 のフィールドはモデルのフィールドからデータを表示するだけではなく、モデルや``ModelAdmin`` クラス自身のメソッドの出力を表示させることもできます。これは <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<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=\"s1\">&#39;address_report&#39;</span><span class=\"p\">,)</span>\n\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=\"s1\">&#39;&lt;br&gt;&#39;</span><span class=\"p\">),</span>\n            <span class=\"s1\">&#39;</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</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\n    <span class=\"c1\"># short_description functions like a model field&#39;s verbose_name</span>\n    address_report<span class=\"o\">.</span>short_description <span class=\"o\">=</span> <span class=\"s2\">&quot;Address&quot;</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=\"s1\">&#39;foreign_key__related_fieldname&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>例えば、著者の情報を持つブログエントリーの場合、以下の定義により、著者の E メールアドレスによるブログエントリーの検索が可能となります:</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=\"s1\">&#39;user__email&#39;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>検索ボックスで検索が行われるとき、Django は検索クエリを単語に分割し、(<a class=\"reference internal\" href=\"/ja/2.1/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=\"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>WHERE <span class=\"p\">(</span>first_name ILIKE <span class=\"s1\">&#39;%john%&#39;</span> OR last_name ILIKE <span class=\"s1\">&#39;%john%&#39;</span><span class=\"p\">)</span>\nAND <span class=\"p\">(</span>first_name ILIKE <span class=\"s1\">&#39;</span><span class=\"si\">%le</span><span class=\"s1\">nnon%&#39;</span> OR last_name ILIKE <span class=\"s1\">&#39;</span><span class=\"si\">%le</span><span class=\"s1\">nnon%&#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/2.1/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\">exact</code></a> を使えます。</p>\n<p>前述の通り、クエリ条件は分割されて AND で再構成されるので、<a class=\"reference internal\" href=\"/ja/2.1/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\">exact</code></a> を使った検索は単一の単語の検索でしか機能しません。これは、すべての単語がまったく同じ場合以外、2 語以上が完全一致することはないからです。</p>\n<aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p><p>フィールドの検索方法を指定する機能が追加されました。</p>\n</aside>\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/2.1/ref/models/querysets/#std-fieldlookup-startswith\"><code class=\"xref std std-lookup docutils literal notranslate\">startswith</code></a></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>=</p></td>\n<td><p><a class=\"reference internal\" href=\"/ja/2.1/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/2.1/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/2.1/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.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><aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<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> で指定したすべてのモデルフィールド (と <code class=\"docutils literal notranslate\">admin_order_field</code> プロパティを持つカラブル) で並び替えが可能です。</p>\n<p>特定のカラムでの並び替えを無効化したい場合、<code class=\"docutils literal notranslate\">sortable_by``に :attr:`list_display` サブセットのコレクション (例: ``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/2.1/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/2.1/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<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<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=\"s1\">&#39;person-detail&#39;</span><span class=\"p\">,</span> kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">:</span> obj<span class=\"o\">.</span>slug<span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;https://example.com&#39;</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\">Overriding admin templates</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/2.1/ref/contrib/admin/actions/\"><span class=\"doc\">actions documentation</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/2.1/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<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/2.1/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><aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<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/2.1/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/2.1/topics/forms/modelforms/#saving-objects-in-the-formset\"><span class=\"std std-ref\">Saving objects in the formset</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\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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;rank&#39;</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=\"s1\">&#39;name&#39;</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>このメソッドは、独自の検索方法でオーバーライドすることができます。例えば、数値のフィールドで検索したり、Solr や Haystack といった外部のツールを使うことができます。独自の検索方法によって実装されたクエリセットの変更が結果に重複を生じさせるかを確認し、返値の 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=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;age&#39;</span><span class=\"p\">)</span>\n    search_fields <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</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> use_distinct <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_search_results<span class=\"p\">(</span>request<span class=\"p\">,</span> queryset<span class=\"p\">,</span> search_term<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> use_distinct\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><aside class=\"version-note version-added\" data-version=\"2.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.0</p></aside>\n<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><aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<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\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=\"s1\">&#39;rank&#39;</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>The <code class=\"docutils literal notranslate\">get_inline_instances</code> method is given the <code class=\"docutils literal notranslate\">HttpRequest</code> and the\n<code class=\"docutils literal notranslate\">obj</code> being edited (or <code class=\"docutils literal notranslate\">None</code> on an add form) and is expected to return\na <code class=\"docutils literal notranslate\">list</code> or <code class=\"docutils literal notranslate\">tuple</code> of <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>\nobjects, as described below in the <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>\nsection. For example, the following would return inlines without the default\nfiltering based on add, change, delete, and view permissions:</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_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/2.1/topics/http/urls/\"><span class=\"doc\">URL ディスパッチャ</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.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<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>\n            path<span class=\"p\">(</span><span class=\"s1\">&#39;my_view/&#39;</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>my_view<span class=\"p\">),</span>\n        <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>Notice that the custom patterns are included <em>before</em> the regular admin\nURLs: the admin URL patterns are very permissive and will match nearly\nanything, so you'll usually want to prepend your custom URLs to the\nbuilt-in ones.</p>\n<p>In this example, <code class=\"docutils literal notranslate\">my_view</code> will be accessed at\n<code class=\"docutils literal notranslate\">/admin/myapp/mymodel/my_view/</code> (assuming the admin URLs are included\nat <code class=\"docutils literal notranslate\">/admin/</code>.)</p>\n</aside>\n<p>However, the <code class=\"docutils literal notranslate\">self.my_view</code> function registered above suffers from two\nproblems:</p>\n<ul class=\"simple\">\n<li><p>It will <em>not</em> perform any permission checks, so it will be accessible\nto the general public.</p></li>\n<li><p>It will <em>not</em> provide any header details to prevent caching. This means\nif the page retrieves data from the database, and caching middleware is\nactive, the page could show outdated information.</p></li>\n</ul>\n<p>Since this is usually not what you want, Django provides a convenience\nwrapper to check permissions and mark the view as non-cacheable. This\nwrapper is <code class=\"docutils literal notranslate\">AdminSite.admin_view()</code> (i.e. <code class=\"docutils literal notranslate\">self.admin_site.admin_view</code>\ninside a <code class=\"docutils literal notranslate\">ModelAdmin</code> instance); use it like so:</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_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>\n            path<span class=\"p\">(</span><span class=\"s1\">&#39;my_view/&#39;</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=\"p\">]</span>\n        <span class=\"k\">return</span> my_urls <span class=\"o\">+</span> urls\n</code></pre></div>\n<p>Notice the wrapped view in the fifth line above:</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=\"s1\">&#39;my_view/&#39;</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</code></pre></div>\n<p>This wrapping will protect <code class=\"docutils literal notranslate\">self.my_view</code> from unauthorized access and\nwill apply the <a class=\"reference internal\" href=\"/ja/2.1/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> decorator to\nmake sure it is not cached if the cache middleware is active.</p>\n<p>If the page is cacheable, but you still want the permission check to be\nperformed, you can pass a <code class=\"docutils literal notranslate\">cacheable=True</code> argument to\n<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>path<span class=\"p\">(</span><span class=\"s1\">&#39;my_view/&#39;</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> views have <code class=\"docutils literal notranslate\">model_admin</code> attributes. Other\n<code class=\"docutils literal notranslate\">AdminSite</code> views have <code class=\"docutils literal notranslate\">admin_site</code> attributes.</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/2.1/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/2.1/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=\"s1\">&#39;form&#39;</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/2.1/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</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=\"s1\">&#39;choices&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"p\">(</span><span class=\"s1\">&#39;accepted&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Accepted&#39;</span><span class=\"p\">),</span>\n                <span class=\"p\">(</span><span class=\"s1\">&#39;denied&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Denied&#39;</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=\"s1\">&#39;choices&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">((</span><span class=\"s1\">&#39;ready&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Ready for deployment&#39;</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-note admonition\" role=\"note\">\n<p class=\"admonition-title\">ノート</p>\n<p>フォームフィールドにセットされたすべての <code class=\"docutils literal notranslate\">choices</code> 属性はそのフォームのフィールドのみに制限されます。モデル上の一致するフィールドに選択肢がセットされている場合、フォームに提供される選択肢はこの選択肢の有効なサブセットでなくてはなりません。そうでない場合、フォームの送信は、モデル自身の保存前のバリデーションで <a class=\"reference internal\" href=\"/ja/2.1/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``を返します。デフォルトでは、``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/2.1/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<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<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-note admonition\" role=\"note\">\n<p class=\"admonition-title\">ノート</p>\n<p><a class=\"reference internal\" href=\"/ja/2.1/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> 属性) も定義する必要があります。しかし``ModelAdmin`` はこの値を無視して、<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/2.1/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<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<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=\"s1\">&#39;formset&#39;</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><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>The objects in the changelist page can be filtered with lookups from the\nURL's query string. This is how <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> works, for example. The\nlookups are similar to what's used in <a class=\"reference internal\" href=\"/ja/2.1/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> (e.g.\n<code class=\"docutils literal notranslate\">user__email=user&#64;example.com</code>). Since the lookups in the query string\ncan be manipulated by the user, they must be sanitized to prevent\nunauthorized data exposure.</p>\n<p>The <code class=\"docutils literal notranslate\">lookup_allowed()</code> method is given a lookup path from the query string\n(e.g. <code class=\"docutils literal notranslate\">'user__email'</code>) and the corresponding value\n(e.g. <code class=\"docutils literal notranslate\">'user&#64;example.com'</code>), and returns a boolean indicating whether\nfiltering the changelist's <code class=\"docutils literal notranslate\">QuerySet</code> using the parameters is permitted.\nIf <code class=\"docutils literal notranslate\">lookup_allowed()</code> returns <code class=\"docutils literal notranslate\">False</code>, <code class=\"docutils literal notranslate\">DisallowedModelAdminLookup</code>\n(subclass of <a class=\"reference internal\" href=\"/ja/2.1/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-exc docutils literal notranslate\">SuspiciousOperation</code></a>) is raised.</p>\n<p>By default, <code class=\"docutils literal notranslate\">lookup_allowed()</code> allows access to a model's local fields,\nfield paths used in <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> (but not paths from\n<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>), and lookups required for\n<a class=\"reference internal\" href=\"/ja/2.1/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> to function\ncorrectly in <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>Override this method to customize the lookups permitted for your\n<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> subclass.</p>\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><aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<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/2.1/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/2.1/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/2.1/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/2.1/ref/contrib/admin/actions/#custom-admin-action\"><span class=\"std std-ref\">custom ModelAdmin example</span></a> を参照してください。</p>\n<p>Keyword arguments allow you to change the message level, add extra CSS\ntags, or fail silently if the <code class=\"docutils literal notranslate\">contrib.messages</code> framework is not\ninstalled. These keyword arguments match those for\n<a class=\"reference internal\" href=\"/ja/2.1/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>, see that function's\ndocumentation for more details. One difference is that the level may be\npassed as a string label in addition to integer/constant.</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 to のインスタンスを返します。デフォルトでは、<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/2.1/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/2.1/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/2.1/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><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>obj_display``は削除されたオブジェクトの名前を表す文字列です。</p>\n<p><code class=\"docutils literal notranslate\">obj_id</code> is the serialized identifier used to retrieve the object to be\ndeleted.</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> は``name`` フィールドの初期値を <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=\"s1\">&#39;name&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;custom_initial_value&#39;</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><aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p>A hook for customizing the deletion process of the <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> and\nthe &quot;delete selected&quot; <a class=\"reference internal\" href=\"/ja/2.1/ref/contrib/admin/actions/\"><span class=\"doc\">action</span></a>.</p>\n<p>The <code class=\"docutils literal notranslate\">objs</code> argument is a homogeneous iterable of objects (a <code class=\"docutils literal notranslate\">QuerySet</code>\nor a list of model instances) to be deleted, and <code class=\"docutils literal notranslate\">request</code> is the\n<a class=\"reference internal\" href=\"/ja/2.1/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>This method must return a 4-tuple of\n<code class=\"docutils literal notranslate\">(deleted_objects, model_count, perms_needed, protected)</code>.</p>\n<p><code class=\"docutils literal notranslate\">deleted_objects</code> is a list of strings representing all the objects that\nwill be deleted. If there are any related objects to be deleted, the list\nis nested and includes those related objects. The list is formatted in the\ntemplate using the <a class=\"reference internal\" href=\"/ja/2.1/ref/templates/builtins/#std-templatefilter-unordered_list\"><code class=\"xref std std-tfilter docutils literal notranslate\">unordered_list</code></a> filter.</p>\n<p><code class=\"docutils literal notranslate\">model_count</code> is a dictionary mapping each model's\n<a class=\"reference internal\" href=\"/ja/2.1/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> to the number of\nobjects that will be deleted.</p>\n<p><code class=\"docutils literal notranslate\">perms_needed</code> is a set of <a class=\"reference internal\" href=\"/ja/2.1/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>s\nof the models that the user doesn't have permission to delete.</p>\n<p><code class=\"docutils literal notranslate\">protected</code> is a list of strings representing of all the protected\nrelated objects that can't be deleted. The list is displayed in the\ntemplate.</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>Unlike the hook-type <code class=\"docutils literal notranslate\">ModelAdmin</code> methods detailed in the previous section,\nthese five methods are in reality designed to be invoked as Django views from\nthe admin application URL dispatching handler to render the pages that deal\nwith model instances CRUD operations. As a result, completely overriding these\nmethods will significantly change the behavior of the admin application.</p>\n<p>One common reason for overriding these methods is to augment the context data\nthat is provided to the template that renders the view. In the following\nexample, the change view is overridden so that the rendered template is\nprovided some extra mapping data that would not otherwise be available:</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\n    <span class=\"c1\"># A template for a very customized change view:</span>\n    change_form_template <span class=\"o\">=</span> <span class=\"s1\">&#39;admin/myapp/extras/openstreetmap_change_form.html&#39;</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=\"s1\">&#39;&#39;</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=\"s1\">&#39;osm_data&#39;</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> object_id<span class=\"p\">,</span> form_url<span class=\"p\">,</span> extra_context<span class=\"o\">=</span>extra_context<span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>These views return <a class=\"reference internal\" href=\"/ja/2.1/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\">TemplateResponse</code></a>\ninstances which allow you to easily customize the response data before\nrendering. For more details, see the <a class=\"reference internal\" href=\"/ja/2.1/ref/template-response/\"><span class=\"doc\">TemplateResponse documentation</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/2.1/ref/contrib/staticfiles/\"><span class=\"doc\">staticfiles app</span></a> は、すべてのアセットのパスに <a class=\"reference internal\" href=\"/ja/2.1/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/2.1/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/2.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a>) を prepend します。<a class=\"reference internal\" href=\"/ja/2.1/topics/forms/media/#form-asset-paths\"><span class=\"std std-ref\">regular asset definitions on forms</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.3.1) は <code class=\"docutils literal notranslate\">django.jQuery</code> という名前空間にあります。jQuery を自身の admin の JavaScript で使うとき、別途ライブラリを準備しないで、チェンジリストや追加、編集ビュー上で <code class=\"docutils literal notranslate\">django.jQuery</code> オブジェクトを使うことができます。</p>\n<aside class=\"version-note version-changed\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 2.1</p><p>jQuery が 2.2.3 から 3.3.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> と``jquery.min.js`` となっています。</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> and <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> have a <code class=\"docutils literal notranslate\">media</code> property\nthat returns a list of <code class=\"docutils literal notranslate\">Media</code> objects which store paths to the JavaScript\nfiles for the forms and/or formsets. If <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\">DEBUG</code></a> is <code class=\"docutils literal notranslate\">True</code> it will\nreturn the uncompressed versions of the various JavaScript files, including\n<code class=\"docutils literal notranslate\">jquery.js</code>; if not, it will return the 'minified' versions.</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>Adding custom validation of data in the admin is quite easy. The automatic\nadmin interface reuses <a class=\"reference internal\" href=\"/ja/2.1/ref/forms/api/#module-django.forms\" title=\"django.forms\"><code class=\"xref py py-mod docutils literal notranslate\">django.forms</code></a>, and the <code class=\"docutils literal notranslate\">ModelAdmin</code> class gives\nyou the ability define your own form:</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> can be defined anywhere as long as you import where\nneeded. Now within your form you can add your own custom validation for\nany field:</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>It is important you use a <code class=\"docutils literal notranslate\">ModelForm</code> here otherwise things can break. See\nthe <a class=\"reference internal\" href=\"/ja/2.1/ref/forms/\"><span class=\"doc\">forms</span></a> documentation on <a class=\"reference internal\" href=\"/ja/2.1/ref/forms/validation/\"><span class=\"doc\">custom validation</span></a> and, more specifically, the\n<a class=\"reference internal\" href=\"/ja/2.1/topics/forms/modelforms/#overriding-modelform-clean-method\"><span class=\"std std-ref\">model form validation notes</span></a> for more\ninformation.</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<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<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<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<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_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/2.1/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/2.1/topics/forms/modelforms/#model-formsets\"><span class=\"std std-ref\">model formsets</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/2.1/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>When writing custom validation for <code class=\"docutils literal notranslate\">InlineModelAdmin</code> forms, be cautious\nof writing validation that relies on features of the parent model. If the\nparent model fails to validate, it may be left in an inconsistent state as\ndescribed in the warning in <a class=\"reference internal\" href=\"/ja/2.1/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>フォームセットが初期のフォームに加えて表示する追加的なフォームの数をコントロールします。詳しくは <a class=\"reference internal\" href=\"/ja/2.1/topics/forms/formsets/\"><span class=\"doc\">formsets documentation</span></a> を参照してください。</p>\n<p>JavaScript が有効なブラウザを使っているユーザーに対しては、&quot;1 つ追加&quot; のリンクが提供され、<code class=\"docutils literal notranslate\">extra</code> 引数の結果提供されるインラインに加えていくつでもインラインを追加することができます。</p>\n<p>The dynamic link will not appear if the number of currently displayed forms\nexceeds <code class=\"docutils literal notranslate\">max_num</code>, or if the user does not have JavaScript enabled.</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/2.1/topics/forms/modelforms/#model-formsets-max-num\"><span class=\"std std-ref\">Limiting the number of editable objects</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/2.1/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> クラス内で見つかった <code class=\"docutils literal notranslate\">verbose_name</code> のオーバーライドです。</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> クラス内で見つかった <code class=\"docutils literal notranslate\">verbose_name_plural</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/2.1/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=\"#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<aside class=\"version-note version-changed\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 2.1</p><p>The <code class=\"docutils literal notranslate\">obj</code> argument was added. During the deprecation period, it may\nalso be <code class=\"docutils literal notranslate\">None</code> if third-party calls to <code class=\"docutils literal notranslate\">has_add_permission()</code> don't\nprovide it.</p>\n</aside>\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</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<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>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><span class=\"p\">)</span>\n    from_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> related_name<span class=\"o\">=</span><span class=\"s2\">&quot;from_friends&quot;</span><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<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<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>By default, admin widgets for many-to-many relations will be displayed\non whichever model contains the actual reference to the\n<a class=\"reference internal\" href=\"/ja/2.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>. Depending on your <code class=\"docutils literal notranslate\">ModelAdmin</code>\ndefinition, each many-to-many field in your model will be represented by a\nstandard HTML <code class=\"docutils literal notranslate\">&lt;select multiple&gt;</code>, a horizontal or vertical filter, or a\n<code class=\"docutils literal notranslate\">raw_id_admin</code> widget. However, it is also possible to replace these\nwidgets with inlines.</p>\n<p>Suppose we have the following models:</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<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<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=\"s1\">&#39;groups&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>If you want to display many-to-many relations using an inline, you can do\nso by defining an <code class=\"docutils literal notranslate\">InlineModelAdmin</code> object for the relationship:</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<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<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<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=\"s1\">&#39;members&#39;</span><span class=\"p\">,)</span>\n</code></pre></div>\n<p>There are two features worth noting in this example.</p>\n<p>Firstly - the <code class=\"docutils literal notranslate\">MembershipInline</code> class references <code class=\"docutils literal notranslate\">Group.members.through</code>.\nThe <code class=\"docutils literal notranslate\">through</code> attribute is a reference to the model that manages the\nmany-to-many relation. This model is automatically created by Django when you\ndefine a many-to-many field.</p>\n<p>Secondly, the <code class=\"docutils literal notranslate\">GroupAdmin</code> must manually exclude the <code class=\"docutils literal notranslate\">members</code> field.\nDjango displays an admin widget for a many-to-many field on the model that\ndefines the relation (in this case, <code class=\"docutils literal notranslate\">Group</code>). If you want to use an inline\nmodel to represent the many-to-many relationship, you must tell Django's admin\nto <em>not</em> display this widget - otherwise you will end up with two widgets on\nyour admin page for managing the relation.</p>\n<p>Note that when using this technique the\n<a class=\"reference internal\" href=\"/ja/2.1/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> signals aren't triggered. This\nis because as far as the admin is concerned, <code class=\"docutils literal notranslate\">through</code> is just a model with\ntwo foreign key fields rather than a many-to-many relation.</p>\n<p>In all other respects, the <code class=\"docutils literal notranslate\">InlineModelAdmin</code> is exactly the same as any\nother. You can customize the appearance using any of the normal\n<code class=\"docutils literal notranslate\">ModelAdmin</code> properties.</p>\n</section>\n<section id=\"working-with-many-to-many-intermediary-models\">\n<h3>Working with many-to-many intermediary models<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>When you specify an intermediary model using the <code class=\"docutils literal notranslate\">through</code> argument to a\n<a class=\"reference internal\" href=\"/ja/2.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>, the admin will not display a\nwidget by default. This is because each instance of that intermediary model\nrequires more information than could be displayed in a single widget, and the\nlayout required for multiple widgets will vary depending on the intermediate\nmodel.</p>\n<p>However, we still want to be able to edit that information inline. Fortunately,\nthis is easy to do with inline admin models. Suppose we have the following\nmodels:</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<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<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=\"s1\">&#39;Membership&#39;</span><span class=\"p\">)</span>\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>The first step in displaying this intermediate model in the admin is to\ndefine an inline class for the <code class=\"docutils literal notranslate\">Membership</code> model:</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>This simple example uses the default <code class=\"docutils literal notranslate\">InlineModelAdmin</code> values for the\n<code class=\"docutils literal notranslate\">Membership</code> model, and limits the extra add forms to one. This could be\ncustomized using any of the options available to <code class=\"docutils literal notranslate\">InlineModelAdmin</code> classes.</p>\n<p>Now create admin views for the <code class=\"docutils literal notranslate\">Person</code> and <code class=\"docutils literal notranslate\">Group</code> models:</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<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>Finally, register your <code class=\"docutils literal notranslate\">Person</code> and <code class=\"docutils literal notranslate\">Group</code> models with the admin site:</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>Now your admin site is set up to edit <code class=\"docutils literal notranslate\">Membership</code> objects inline from\neither the <code class=\"docutils literal notranslate\">Person</code> or the <code class=\"docutils literal notranslate\">Group</code> detail pages.</p>\n</section>\n<section id=\"using-generic-relations-as-an-inline\">\n<span id=\"id3\"></span><h3>Using generic relations as an inline<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>It is possible to use an inline with generically related objects. Let's say\nyou have the following models:</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<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<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>If you want to allow editing and creating an <code class=\"docutils literal notranslate\">Image</code> instance on the\n<code class=\"docutils literal notranslate\">Product</code>, add/change views you can use\n<a class=\"reference internal\" href=\"/ja/2.1/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>\nor <a class=\"reference internal\" href=\"/ja/2.1/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> (both\nsubclasses of <a class=\"reference internal\" href=\"/ja/2.1/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>)\nprovided by <a class=\"reference internal\" href=\"/ja/2.1/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>. They implement tabular\nand stacked visual layouts for the forms representing the inline objects,\nrespectively, just like their non-generic counterparts. They behave just like\nany other inline. In your <code class=\"docutils literal notranslate\">admin.py</code> for this example app:</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\">myproject.myapp.models</span> <span class=\"kn\">import</span> Image<span class=\"p\">,</span> Product\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<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\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>See the <a class=\"reference internal\" href=\"/ja/2.1/ref/contrib/contenttypes/\"><span class=\"doc\">contenttypes documentation</span></a> for more\nspecific information.</p>\n</section>\n</section>\n<section id=\"overriding-admin-templates\">\n<span id=\"admin-overriding-templates\"></span><h2>Overriding admin templates<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>It is relatively easy to override many of the templates which the admin module\nuses to generate the various pages of an admin site. You can even override a\nfew of these templates for a specific app, or a specific model.</p>\n<section id=\"set-up-your-projects-admin-template-directories\">\n<h3>Set up your projects admin template directories<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>The admin template files are located in the <code class=\"docutils literal notranslate\">contrib/admin/templates/admin</code>\ndirectory.</p>\n<p>In order to override one or more of them, first create an <code class=\"docutils literal notranslate\">admin</code> directory\nin your project's <code class=\"docutils literal notranslate\">templates</code> directory. This can be any of the directories\nyou specified in the <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\">DIRS</code></a> option of the\n<code class=\"docutils literal notranslate\">DjangoTemplates</code> backend in the <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\">TEMPLATES</code></a> setting. If you have\ncustomized the <code class=\"docutils literal notranslate\">'loaders'</code> option, be sure\n<code class=\"docutils literal notranslate\">'django.template.loaders.filesystem.Loader'</code> appears before\n<code class=\"docutils literal notranslate\">'django.template.loaders.app_directories.Loader'</code> so that your custom\ntemplates will be found by the template loading system before those that are\nincluded with <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>Within this <code class=\"docutils literal notranslate\">admin</code> directory, create sub-directories named after your app.\nWithin these app subdirectories create sub-directories named after your models.\nNote, that the admin app will lowercase the model name when looking for the\ndirectory, so make sure you name the directory in all lowercase if you are\ngoing to run your app on a case-sensitive filesystem.</p>\n<p>To override an admin template for a specific app, copy and edit the template\nfrom the <code class=\"docutils literal notranslate\">django/contrib/admin/templates/admin</code> directory, and save it to one\nof the directories you just created.</p>\n<p>For example, if we wanted to add a tool to the change list view for all the\nmodels in an app named <code class=\"docutils literal notranslate\">my_app</code>, we would copy\n<code class=\"docutils literal notranslate\">contrib/admin/templates/admin/change_list.html</code> to the\n<code class=\"docutils literal notranslate\">templates/admin/my_app/</code> directory of our project, and make any necessary\nchanges.</p>\n<p>If we wanted to add a tool to the change list view for only a specific model\nnamed 'Page', we would copy that same file to the\n<code class=\"docutils literal notranslate\">templates/admin/my_app/page</code> directory of our project.</p>\n</section>\n<section id=\"overriding-vs-replacing-an-admin-template\">\n<h3>Overriding vs. replacing an admin template<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>Because of the modular design of the admin templates, it is usually neither\nnecessary nor advisable to replace an entire template. It is almost always\nbetter to override only the section of the template which you need to change.</p>\n<p>To continue the example above, we want to add a new link next to the\n<code class=\"docutils literal notranslate\">History</code> tool for the <code class=\"docutils literal notranslate\">Page</code> model. After looking at <code class=\"docutils literal notranslate\">change_form.html</code>\nwe determine that we only need to override the <code class=\"docutils literal notranslate\">object-tools-items</code> block.\nTherefore here is our new <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\">trans</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\">trans</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>And that's it! If we placed this file in the <code class=\"docutils literal notranslate\">templates/admin/my_app</code>\ndirectory, our link would appear on the change form for all models within\nmy_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>Templates which may be overridden per app or model<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>Not every template in <code class=\"docutils literal notranslate\">contrib/admin/templates/admin</code> may be overridden per\napp or per model. The following can:</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<aside class=\"version-note version-changed\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 2.1</p><p>The ability to override the <code class=\"docutils literal notranslate\">actions.html</code>, <code class=\"docutils literal notranslate\">change_form_object_tools.html</code>,\n<code class=\"docutils literal notranslate\">change_list_object_tools.html</code>, <code class=\"docutils literal notranslate\">change_list_results.html</code>,\n<code class=\"docutils literal notranslate\">date_hierarchy.html</code>, <code class=\"docutils literal notranslate\">pagination.html</code>, <code class=\"docutils literal notranslate\">prepopulated_fields_js.html</code>,\n<code class=\"docutils literal notranslate\">search_form.html</code>, and <code class=\"docutils literal notranslate\">submit_line.html</code> templates was added.</p>\n</aside>\n<p>For those templates that cannot be overridden in this way, you may still\noverride them for your entire project. Just place the new version in your\n<code class=\"docutils literal notranslate\">templates/admin</code> directory. This is particularly useful to create custom 404\nand 500 pages.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Some of the admin templates, such as <code class=\"docutils literal notranslate\">change_list_results.html</code> are used\nto render custom inclusion tags. These may be overridden, but in such cases\nyou are probably better off creating your own version of the tag in\nquestion and giving it a different name. That way you can use it\nselectively.</p>\n</aside>\n</section>\n<section id=\"root-and-login-templates\">\n<h3>Root and login templates<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>If you wish to change the index, login or logout templates, you are better off\ncreating your own <code class=\"docutils literal notranslate\">AdminSite</code> instance (see below), and changing the\n<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> or\n<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> properties.</p>\n</section>\n</section>\n<section id=\"adminsite-objects\">\n<h2><code class=\"docutils literal notranslate\">AdminSite</code> objects<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>A Django administrative site is represented by an instance of\n<code class=\"docutils literal notranslate\">django.contrib.admin.sites.AdminSite</code>; by default, an instance of\nthis class is created as <code class=\"docutils literal notranslate\">django.contrib.admin.site</code> and you can\nregister your models and <code class=\"docutils literal notranslate\">ModelAdmin</code> instances with it.</p>\n<p>If you want to customize the default admin site, you can <a class=\"reference internal\" href=\"#overriding-default-admin-site\"><span class=\"std std-ref\">override it</span></a>.</p>\n<p>When constructing an instance of an <code class=\"docutils literal notranslate\">AdminSite</code>, you can provide\na unique instance name using the <code class=\"docutils literal notranslate\">name</code> argument to the constructor. This\ninstance name is used to identify the instance, especially when\n<a class=\"reference internal\" href=\"#admin-reverse-urls\"><span class=\"std std-ref\">reversing admin URLs</span></a>. If no instance name is\nprovided, a default instance name of <code class=\"docutils literal notranslate\">admin</code> will be used.\nSee <a class=\"reference internal\" href=\"#customizing-adminsite\"><span class=\"std std-ref\">Customizing the AdminSite class</span></a> for an example of customizing the\n<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> class.</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>Templates can override or extend base admin templates as described in\n<a class=\"reference internal\" href=\"#admin-overriding-templates\"><span class=\"std std-ref\">Overriding admin templates</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>The text to put at the top of each admin page, as an <code class=\"docutils literal notranslate\">&lt;h1&gt;</code> (a string).\nBy default, this is &quot;Django administration&quot;.</p>\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>The text to put at the end of each admin page's <code class=\"docutils literal notranslate\">&lt;title&gt;</code> (a string). By\ndefault, this is &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>The URL for the &quot;View site&quot; link at the top of each admin page. By default,\n<code class=\"docutils literal notranslate\">site_url</code> is <code class=\"docutils literal notranslate\">/</code>. Set it to <code class=\"docutils literal notranslate\">None</code> to remove the link.</p>\n<p>For sites running on a subpath, the <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> method checks if\nthe current request has <code class=\"docutils literal notranslate\">request.META['SCRIPT_NAME']</code> set and uses that\nvalue if <code class=\"docutils literal notranslate\">site_url</code> isn't set to something other than <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>The text to put at the top of the admin index page (a string). By default,\nthis is &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>Path to a custom template that will be used by the admin site main index\nview.</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>Path to a custom template that will be used by the admin site app index view.</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>The string to use for displaying empty values in the admin site's change\nlist. Defaults to a dash. The value can also be overridden on a per\n<code class=\"docutils literal notranslate\">ModelAdmin</code> basis and on a custom field within a <code class=\"docutils literal notranslate\">ModelAdmin</code> by\nsetting an <code class=\"docutils literal notranslate\">empty_value_display</code> attribute on the field. See\n<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> for examples.</p>\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>Path to a custom template that will be used by the admin site login view.</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>Subclass of <a class=\"reference internal\" href=\"/ja/2.1/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> that\nwill be used by the admin site login view.</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>Path to a custom template that will be used by the admin site logout view.</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>Path to a custom template that will be used by the admin site password\nchange view.</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>Path to a custom template that will be used by the admin site password\nchange done view.</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>Returns a dictionary of variables to put in the template context for\nevery page in the admin site.</p>\n<p>Includes the following variables and values by default:</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 list of applications from the <a class=\"reference internal\" href=\"/ja/2.1/ref/applications/\"><span class=\"doc\">application registry</span></a> available for the current user. Each entry in the\nlist is a dict representing an application with the following keys:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">app_label</code>: the application label</p></li>\n<li><p><code class=\"docutils literal notranslate\">app_url</code>: the URL of the application index in the admin</p></li>\n<li><p><code class=\"docutils literal notranslate\">has_module_perms</code>: a boolean indicating if displaying and accessing of\nthe module's index page is permitted for the current user</p></li>\n<li><p><code class=\"docutils literal notranslate\">models</code>: a list of the models available in the application</p></li>\n</ul>\n<p>Each model is a dict with the following keys:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">object_name</code>: class name of the model</p></li>\n<li><p><code class=\"docutils literal notranslate\">name</code>: plural name of the model</p></li>\n<li><p><code class=\"docutils literal notranslate\">perms</code>: a <code class=\"docutils literal notranslate\">dict</code> tracking <code class=\"docutils literal notranslate\">add</code>, <code class=\"docutils literal notranslate\">change</code>, <code class=\"docutils literal notranslate\">delete</code>, and\n<code class=\"docutils literal notranslate\">view</code> permissions</p></li>\n<li><p><code class=\"docutils literal notranslate\">admin_url</code>: admin changelist URL for the model</p></li>\n<li><p><code class=\"docutils literal notranslate\">add_url</code>: admin URL to add a new model instance</p></li>\n</ul>\n</li>\n</ul>\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>Returns <code class=\"docutils literal notranslate\">True</code> if the user for the given <code class=\"docutils literal notranslate\">HttpRequest</code> has permission\nto view at least one page in the admin site. Defaults to requiring both\n<a class=\"reference internal\" href=\"/ja/2.1/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> and\n<a class=\"reference internal\" href=\"/ja/2.1/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> to be\n<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>Registers the given model class (or iterable of classes) with the given\n<code class=\"docutils literal notranslate\">admin_class</code>. <code class=\"docutils literal notranslate\">admin_class</code> defaults to\n<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> (the default admin options). If\nkeyword arguments are given -- e.g. <code class=\"docutils literal notranslate\">list_display</code> -- they'll be applied\nas options to the admin class.</p>\n<p>Raises <a class=\"reference internal\" href=\"/ja/2.1/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-class docutils literal notranslate\">ImproperlyConfigured</code></a> if a model is\nabstract. and <code class=\"docutils literal notranslate\">django.contrib.admin.sites.AlreadyRegistered</code> if a model\nis already registered.</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>Hooking <code class=\"docutils literal notranslate\">AdminSite</code> instances into your URLconf<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>The last step in setting up the Django admin is to hook your <code class=\"docutils literal notranslate\">AdminSite</code>\ninstance into your URLconf. Do this by pointing a given URL at the\n<code class=\"docutils literal notranslate\">AdminSite.urls</code> method. It is not necessary to use\n<a class=\"reference internal\" href=\"/ja/2.1/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>.</p>\n<p>In this example, we register the default <code class=\"docutils literal notranslate\">AdminSite</code> instance\n<code class=\"docutils literal notranslate\">django.contrib.admin.site</code> at the 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=\"s1\">&#39;admin/&#39;</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>Customizing the <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> class<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>If you'd like to set up your own admin site with custom behavior, you're free\nto subclass <code class=\"docutils literal notranslate\">AdminSite</code> and override or add anything you like. Then, simply\ncreate an instance of your <code class=\"docutils literal notranslate\">AdminSite</code> subclass (the same way you'd\ninstantiate any other Python class) and register your models and\n<code class=\"docutils literal notranslate\">ModelAdmin</code> subclasses with it instead of with the default site. Finally,\nupdate <code class=\"file docutils literal notranslate\">myproject/urls.py</code> to reference your <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> subclass.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">myapp/admin.py</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</span> <span class=\"kn\">import</span> AdminSite\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> MyModel\n\n<span class=\"k\">class</span> <span class=\"nc\">MyAdminSite</span><span class=\"p\">(</span>AdminSite<span class=\"p\">):</span>\n    site_header <span class=\"o\">=</span> <span class=\"s1\">&#39;Monty Python administration&#39;</span>\n\nadmin_site <span class=\"o\">=</span> MyAdminSite<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;myadmin&#39;</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\">myproject/urls.py</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=\"s1\">&#39;myadmin/&#39;</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>Note that you may not want autodiscovery of <code class=\"docutils literal notranslate\">admin</code> modules when using your\nown <code class=\"docutils literal notranslate\">AdminSite</code> instance since you will likely be importing all the per-app\n<code class=\"docutils literal notranslate\">admin</code> modules in your <code class=\"docutils literal notranslate\">myproject.admin</code> module. This means you need to\nput <code class=\"docutils literal notranslate\">'django.contrib.admin.apps.SimpleAdminConfig'</code> instead of\n<code class=\"docutils literal notranslate\">'django.contrib.admin'</code> in your <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setting.</p>\n</section>\n<section id=\"overriding-the-default-admin-site\">\n<span id=\"overriding-default-admin-site\"></span><h3>Overriding the default admin site<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<aside class=\"version-note version-added\" data-version=\"2.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p>You can override the default <code class=\"docutils literal notranslate\">django.contrib.admin.site</code> by setting the\n<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> attribute of a custom <code class=\"docutils literal notranslate\">AppConfig</code>\nto the dotted import path of either a <code class=\"docutils literal notranslate\">AdminSite</code> subclass or a callable that\nreturns a site instance.</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">myproject/admin.py</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=\"k\">class</span> <span class=\"nc\">MyAdminSite</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>AdminSite<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">myproject/apps.py</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<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=\"s1\">&#39;myproject.admin.MyAdminSite&#39;</span>\n</code></pre></figure>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">myproject/settings.py</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=\"o\">...</span>\n    <span class=\"s1\">&#39;myproject.apps.MyAdminConfig&#39;</span><span class=\"p\">,</span>  <span class=\"c1\"># replaces &#39;django.contrib.admin&#39;</span>\n    <span class=\"o\">...</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>Multiple admin sites in the same URLconf<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>It's easy to create multiple instances of the admin site on the same\nDjango-powered website. Just create multiple instances of <code class=\"docutils literal notranslate\">AdminSite</code> and\nroot each one at a different URL.</p>\n<p>In this example, the URLs <code class=\"docutils literal notranslate\">/basic-admin/</code> and <code class=\"docutils literal notranslate\">/advanced-admin/</code> feature\nseparate versions of the admin site -- using the <code class=\"docutils literal notranslate\">AdminSite</code> instances\n<code class=\"docutils literal notranslate\">myproject.admin.basic_site</code> and <code class=\"docutils literal notranslate\">myproject.admin.advanced_site</code>,\nrespectively:</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=\"s1\">&#39;basic-admin/&#39;</span><span class=\"p\">,</span> basic_site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n    path<span class=\"p\">(</span><span class=\"s1\">&#39;advanced-admin/&#39;</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> instances take a single argument to their constructor, their\nname, which can be anything you like. This argument becomes the prefix to the\nURL names for the purposes of <a class=\"reference internal\" href=\"#admin-reverse-urls\"><span class=\"std std-ref\">reversing them</span></a>. This\nis only necessary if you are using more than one <code class=\"docutils literal notranslate\">AdminSite</code>.</p>\n</section>\n<section id=\"adding-views-to-admin-sites\">\n<h3>Adding views to admin sites<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>Just like <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> provides a\n<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> method\nthat can be overridden to define additional views for the site. To add\na new view to your admin site, extend the base\n<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> method to include\na pattern for your new view.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Any view you render that uses the admin templates, or extends the base\nadmin template, should set <code class=\"docutils literal notranslate\">request.current_app</code> before rendering the\ntemplate. It should be set to either <code class=\"docutils literal notranslate\">self.name</code> if your view is on an\n<code class=\"docutils literal notranslate\">AdminSite</code> or <code class=\"docutils literal notranslate\">self.admin_site.name</code> if your view is on a\n<code class=\"docutils literal notranslate\">ModelAdmin</code>.</p>\n</aside>\n</section>\n<section id=\"adding-a-password-reset-feature\">\n<span id=\"auth-password-reset\"></span><h3>Adding a password reset feature<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>You can add a password reset feature to the admin site by adding a few lines to\nyour URLconf. Specifically, add these four patterns:</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.auth</span> <span class=\"kn\">import</span> views <span class=\"k\">as</span> auth_views\n\npath<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;admin/password_reset/&#39;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span>\n    name<span class=\"o\">=</span><span class=\"s1\">&#39;admin_password_reset&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\npath<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;admin/password_reset/done/&#39;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetDoneView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span>\n    name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_done&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\npath<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;reset/&lt;uidb64&gt;/&lt;token&gt;/&#39;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetConfirmView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span>\n    name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_confirm&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\npath<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;reset/done/&#39;</span><span class=\"p\">,</span>\n    auth_views<span class=\"o\">.</span>PasswordResetCompleteView<span class=\"o\">.</span>as_view<span class=\"p\">(),</span>\n    name<span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_complete&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\n</code></pre></div>\n<p>(This assumes you've added the admin at <code class=\"docutils literal notranslate\">admin/</code> and requires that you put\nthe URLs starting with <code class=\"docutils literal notranslate\">^admin/</code> before the line that includes the admin app\nitself).</p>\n<p>The presence of the <code class=\"docutils literal notranslate\">admin_password_reset</code> named URL will cause a &quot;forgotten\nyour password?&quot; link to appear on the default admin log-in page under the\npassword box.</p>\n</section>\n</section>\n<section id=\"logentry-objects\">\n<h2><code class=\"docutils literal notranslate\">LogEntry</code> objects<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>The <code class=\"docutils literal notranslate\">LogEntry</code> class tracks additions, changes, and deletions of objects\ndone through the admin interface.</p>\n</dd></dl>\n\n<section id=\"logentry-attributes\">\n<h3><code class=\"docutils literal notranslate\">LogEntry</code> attributes<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>The date and time of the action.</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>The user (an <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\">AUTH_USER_MODEL</code></a> instance) who performed the\naction.</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>The <a class=\"reference internal\" href=\"/ja/2.1/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> of the\nmodified object.</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>The textual representation of the modified object's primary key.</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>The object`s <code class=\"docutils literal notranslate\">repr()</code> after the modification.</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>The type of action logged: <code class=\"docutils literal notranslate\">ADDITION</code>, <code class=\"docutils literal notranslate\">CHANGE</code>, <code class=\"docutils literal notranslate\">DELETION</code>.</p>\n<p>For example, to get a list of all additions done through the 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>The detailed description of the modification. In the case of an edit, for\nexample, the message contains a list of the edited fields. The Django admin\nsite formats this content as a JSON structure, so that\n<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> can recompose a message translated in the current\nuser language. Custom code might set this as a plain string though. You are\nadvised to use the <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> method to retrieve this value\ninstead of accessing it directly.</p>\n</dd></dl>\n\n</section>\n<section id=\"logentry-methods\">\n<h3><code class=\"docutils literal notranslate\">LogEntry</code> methods<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>A shortcut that returns the referenced object.</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>Formats and translates <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> into the current user\nlanguage. Messages created before Django 1.10 will always be displayed in\nthe language in which they were logged.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"reversing-admin-urls\">\n<span id=\"admin-reverse-urls\"></span><h2>Reversing admin URLs<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>When an <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> is deployed, the views provided by that site are\naccessible using Django's <a class=\"reference internal\" href=\"/ja/2.1/topics/http/urls/#naming-url-patterns\"><span class=\"std std-ref\">URL reversing system</span></a>.</p>\n<p>The <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> provides the following named URL patterns:</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>Page</p></th>\n<th class=\"head\"><p>URL name</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>Login</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>Logout</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>Password change done</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>i18n 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>Application index page</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>Redirect to object's page</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>Each <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> instance provides an additional set of named URLs:</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>Page</p></th>\n<th class=\"head\"><p>URL name</p></th>\n<th class=\"head\"><p>パラメータ</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>Changelist</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>The <code class=\"docutils literal notranslate\">UserAdmin</code> provides a named 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>Page</p></th>\n<th class=\"head\"><p>URL name</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>These named URLs are registered with the application namespace <code class=\"docutils literal notranslate\">admin</code>, and\nwith an instance namespace corresponding to the name of the Site instance.</p>\n<p>So - if you wanted to get a reference to the Change view for a particular\n<code class=\"docutils literal notranslate\">Choice</code> object (from the polls application) in the default admin, you would\ncall:</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=\"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=\"s1\">&#39;admin:polls_choice_change&#39;</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>This will find the first registered instance of the admin application\n(whatever the instance name), and resolve to the view for changing\n<code class=\"docutils literal notranslate\">poll.Choice</code> instances in that instance.</p>\n<p>If you want to find a URL in a specific admin instance, provide the name of\nthat instance as a <code class=\"docutils literal notranslate\">current_app</code> hint to the reverse call. For example,\nif you specifically wanted the admin view from the admin instance named\n<code class=\"docutils literal notranslate\">custom</code>, you would need to call:</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=\"gp\">&gt;&gt;&gt; </span>change_url <span class=\"o\">=</span> reverse<span class=\"p\">(</span><span class=\"s1\">&#39;admin:polls_choice_change&#39;</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=\"s1\">&#39;custom&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>For more details, see the documentation on <a class=\"reference internal\" href=\"/ja/2.1/topics/http/urls/#topics-http-reversing-url-namespaces\"><span class=\"std std-ref\">reversing namespaced URLs</span></a>.</p>\n<p>To allow easier reversing of the admin urls in templates, Django provides an\n<code class=\"docutils literal notranslate\">admin_urlname</code> filter which takes an action as argument:</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>The action in the examples above match the last part of the URL names for\n<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> instances described above. The <code class=\"docutils literal notranslate\">opts</code> variable can be any\nobject which has an <code class=\"docutils literal notranslate\">app_label</code> and <code class=\"docutils literal notranslate\">model_name</code> attributes and is usually\nsupplied by the admin views for the current model.</p>\n</section>\n<section id=\"the-staff-member-required-decorator\">\n<h2>The <code class=\"docutils literal notranslate\">staff_member_required</code> decorator<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>This decorator is used on the admin views that require authorization. A\nview decorated with this function will having the following behavior:</p>\n<ul class=\"simple\">\n<li><p>If the user is logged in, is a staff member (<code class=\"docutils literal notranslate\">User.is_staff=True</code>), and\nis active (<code class=\"docutils literal notranslate\">User.is_active=True</code>), execute the view normally.</p></li>\n<li><p>Otherwise, the request will be redirected to the URL specified by the\n<code class=\"docutils literal notranslate\">login_url</code> parameter, with the originally requested path in a query\nstring variable specified by <code class=\"docutils literal notranslate\">redirect_field_name</code>. For example:\n<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<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>\n    <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":"Working with many-to-many intermediary models","anchor":"working-with-many-to-many-intermediary-models","children":[]},{"title":"Using generic relations as an inline","anchor":"using-generic-relations-as-an-inline","children":[]}]},{"title":"Overriding admin templates","anchor":"overriding-admin-templates","children":[{"title":"Set up your projects admin template directories","anchor":"set-up-your-projects-admin-template-directories","children":[]},{"title":"Overriding vs. replacing an admin template","anchor":"overriding-vs-replacing-an-admin-template","children":[]},{"title":"Templates which may be overridden per app or model","anchor":"templates-which-may-be-overridden-per-app-or-model","children":[]},{"title":"Root and login templates","anchor":"root-and-login-templates","children":[]}]},{"title":"AdminSite objects","anchor":"adminsite-objects","children":[{"title":"AdminSite の属性","anchor":"adminsite-attributes","children":[]},{"title":"AdminSite のメソッド","anchor":"adminsite-methods","children":[]},{"title":"Hooking AdminSite instances into your URLconf","anchor":"hooking-adminsite-instances-into-your-urlconf","children":[]},{"title":"Customizing the AdminSite class","anchor":"customizing-the-adminsite-class","children":[]},{"title":"Overriding the default admin site","anchor":"overriding-the-default-admin-site","children":[]},{"title":"Multiple admin sites in the same URLconf","anchor":"multiple-admin-sites-in-the-same-urlconf","children":[]},{"title":"Adding views to admin sites","anchor":"adding-views-to-admin-sites","children":[]},{"title":"Adding a password reset feature","anchor":"adding-a-password-reset-feature","children":[]}]},{"title":"LogEntry objects","anchor":"logentry-objects","children":[{"title":"LogEntry attributes","anchor":"logentry-attributes","children":[]},{"title":"LogEntry methods","anchor":"logentry-methods","children":[]}]},{"title":"Reversing admin URLs","anchor":"reversing-admin-urls","children":[]},{"title":"The staff_member_required decorator","anchor":"the-staff-member-required-decorator","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/ja/2.1/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/ja/2.1/ref/contrib/"}],"prev":{"docname":"ref/contrib/index","title":"contrib packages","url":"/ja/2.1/ref/contrib/"},"next":{"docname":"ref/contrib/admin/actions","title":"Admin actions","url":"/ja/2.1/ref/contrib/admin/actions/"},"formats":{"html":"/ja/2.1/ref/contrib/admin/","markdown":"/ja/2.1/ref/contrib/admin.md","json":"/ja/2.1/ref/contrib/admin.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/ref/contrib/admin/index.txt","official":"https://docs.djangoproject.com/ja/2.1/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","pt-br","ko","es","el","pl"]}