{"title":"Django の admin サイト","version":"2.2","locale":"ja","docname":"ref/contrib/admin/index","url":"/ja/2.2/ref/contrib/admin/","canonical":"https://djangodocs.dev/ja/2.2/ref/contrib/admin/","summary":"Djangoのパワフルな特徴の1つは、自動的に生成されるadminインタフェースです。あなたのモデルクラスからメタデータを読み取り、モデル中心のインタフェースを提供します。このインタフェースのおかげで、ユーザはあなたのサイトのコンテンツを操作することができます。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.2/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">startproject</span></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\"><span class=\"pre\">'django.contrib.admin'</span></code> and its dependencies -\n<a class=\"reference internal\" href=\"/ja/2.2/topics/auth/#module-django.contrib.auth\" title=\"django.contrib.auth: Django's authentication framework.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code></a>, <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">django.contrib.contenttypes</span></code></a>,\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">django.contrib.messages</span></code></a>, and <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">django.contrib.sessions</span></code></a> - to your\n<a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting.</p></li>\n<li><p>Configure a <a class=\"reference internal\" href=\"/ja/2.2/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a>\nbackend in your <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> setting with\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.context_processors.auth</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.messages.context_processors.messages</span></code> in\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">'context_processors'</span></code> option of <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-TEMPLATES-OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">OPTIONS</span></code></a>.</p></li>\n<li><p>If you've customized the <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> setting,\n<a class=\"reference internal\" href=\"/ja/2.2/ref/middleware/#django.contrib.auth.middleware.AuthenticationMiddleware\" title=\"django.contrib.auth.middleware.AuthenticationMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.middleware.AuthenticationMiddleware</span></code></a> and\n<a class=\"reference internal\" href=\"/ja/2.2/ref/middleware/#django.contrib.messages.middleware.MessageMiddleware\" title=\"django.contrib.messages.middleware.MessageMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.messages.middleware.MessageMiddleware</span></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\"><span class=\"pre\">/admin/</span></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.2/ref/django-admin/#django-admin-createsuperuser\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">createsuperuser</span></code></a>\ncommand. By default, logging in to the admin requires that the user has the\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">is_superuser</span></code></a> or <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">is_staff</span></code></a> attribute set to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></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\"><span class=\"pre\">ModelAdmin</span></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.2/ref/contrib/admin/actions/\">Admin actions</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/admin/admindocs/\">The Django admin documentation generator</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/admin/javascript/\">JavaScript customizations in the admin</a></li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>本番環境での admin と関連する静的ファイル (画像、JavaScript、CSS) の配信について知りたい場合は、<a class=\"reference internal\" href=\"/ja/2.2/howto/deployment/wsgi/modwsgi/#serving-files\"><span class=\"std std-ref\">ファイルを配信する</span></a> を参照してください。</p>\n<p>問題が解決しない場合は、<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin</span></code> クラスは、admin インターフェース内でモデルを表現する方法です。通常、アプリケーション内の <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py</span></code> に記述されます。<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">AuthorAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-do-you-need-a-modeladmin-object-at-all admonition\">\n<p class=\"admonition-title\">いつでも <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> オブジェクトが必要なのか?</p>\n<p>上記の例では、ModelAdminクラスはカスタム値を（まだ）定義していません。その結果、デフォルトの管理インターフェースが提供されます。デフォルトのadminインターフェースに満足している場合は、ModelAdminオブジェクトを定義する必要はまったくありません。ModelAdminの記述をせずにモデルクラスを登録できます。上記の例は、次のように簡略化できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Author</span><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\"><span class=\"pre\">register</span></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\"><span class=\"pre\">register</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">models</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">site</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">django.admin.sites.site</span></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\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n\n<span class=\"nd\">@admin</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>1 つ以上のモデルが与えられ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> に登録されます。カスタムの <a class=\"reference internal\" href=\"#django.contrib.admin.AdminSite\" title=\"django.contrib.admin.AdminSite\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code></a> を使用している場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">site</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">Editor</span><span class=\"p\">,</span> <span class=\"n\">Reader</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.admin_site</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">custom_admin_site</span>\n\n<span class=\"nd\">@admin</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">Reader</span><span class=\"p\">,</span> <span class=\"n\">Editor</span><span class=\"p\">,</span> <span class=\"n\">site</span><span class=\"o\">=</span><span class=\"n\">custom_admin_site</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><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\"><span class=\"pre\">__init__()</span></code> method, e.g.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">super(PersonAdmin,</span> <span class=\"pre\">self).__init__(*args,</span> <span class=\"pre\">**kwargs)</span></code>. You can use\n<code class=\"docutils literal notranslate\"><span class=\"pre\">super().__init__(*args,</span> <span class=\"pre\">**kwargs)</span></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.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 設定内に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code> を記述すると、Django は自動的に各アプリケーション内で <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">AdminConfig</span></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.2/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></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\"><span class=\"pre\">autodiscover()</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">apps.</span></span><span class=\"sig-name descname\"><span class=\"pre\">SimpleAdminConfig</span></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\"><span class=\"pre\">AdminConfig</span></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\"><span class=\"pre\">autodiscover()</span></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\"><span class=\"pre\">default_site</span></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\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p>これはデフォルトの admin サイトのクラスやサイトインスタンスを返す呼び出し可能オブジェクトへのドット区切りのインポートパスです。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin.sites.AdminSite'</span></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\"><span class=\"pre\">autodiscover</span></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\"><span class=\"pre\">admin</span></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\"><span class=\"pre\">AdminConfig</span></code></a> が呼び出してくれます。</p>\n</dd></dl>\n\n<p>If you are using a custom <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code>, it is common to import all of the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> subclasses into your code and register them to the custom\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code>. In that case, in order to disable auto-discovery, you should\nput <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin.apps.SimpleAdminConfig'</span></code> instead of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code> in your <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> setting.</p>\n</section>\n<section id=\"modeladmin-options\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin</span></code> は非常に柔軟にできています。インターフェイスをカスタマイズするために、様々なオプションが用意されています。すべてのプションは <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">date_hierarchy</span> <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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">actions</span></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.2/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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">actions_on_top</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">actions_on_bottom</span></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\"><span class=\"pre\">actions_on_top</span> <span class=\"pre\">=</span> <span class=\"pre\">True;</span> <span class=\"pre\">actions_on_bottom</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">actions_selection_counter</span></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\"><span class=\"pre\">actions_selection_counter</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">date_hierarchy</span></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\"><span class=\"pre\">date_hierarchy</span></code> をモデル内の <code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></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=\"n\">date_hierarchy</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;pub_date&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">__</span></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=\"n\">date_hierarchy</span> <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\"><span class=\"pre\">date_hierarchy</span></code> は内部的に <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">QuerySet.datetimes()</span></code></a> を使用します。タイムゾーンサポートが有効 (<a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">empty_value_display</span></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\"><span class=\"pre\">None</span></code>、空の文字列、等)。デフォルト値は <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">empty_value_display</span> <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\"><span class=\"pre\">AdminSite.empty_value_display</span></code></a> ですべての admin ページもしくは特定のフィールドに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_value_display</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fields</span> <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=\"w\"> </span><span class=\"nf\">view_birth_date</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">birth_date</span>\n\n    <span class=\"n\">view_birth_date</span><span class=\"o\">.</span><span class=\"n\">empty_value_display</span> <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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">exclude</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"n\">birth_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> モデルに対するフォームが <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> の 2 つのフィールドのみを含むようにしたい場合、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fields</span> <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=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">exclude</span> <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\"><span class=\"pre\">name</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">birth_date</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">fields</span></code> オプションを使用してください。たとえば、<a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/flatpages/#django.contrib.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.flatpages.models.FlatPage</span></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=\"w\"> </span><span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fields</span> <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\"><span class=\"pre\">url</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">content</span></code>) だけが (結果として) フォーム上で表示されます。<code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">ModelAdmin.readonly_fields</span></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\"><span class=\"pre\">fieldsets</span></code></a> オプションを参照してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">list_display</span></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\"><span class=\"pre\">readonly_fields</span></code></a> にリスト化されている場合、モデルの名前とモデルの admin メソッドのみが使用されます。</p>\n<p>1 つの行に複数のフィールドを表示するには、タプルで囲んでください。この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">url</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> フィールドが同じ行に表示され、<code class=\"docutils literal notranslate\"><span class=\"pre\">content</span></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=\"w\"> </span><span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fields</span> <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\">\n<p class=\"admonition-title\">ノート</p>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">fieldsets</span></code></a> における <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> ディクショナリキーは別物です。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">fieldsets</span></code></a> オプションのどちらも存在しない場合、Django はデフォルトで <code class=\"docutils literal notranslate\"><span class=\"pre\">AutoField</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">editable=True</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fieldsets</span></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\"><span class=\"pre\">fieldsets</span></code> をセットしてください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fieldsets</span></code> は、2 タプルのリストで、各 2 タプルは admin フォームページの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code> を表します。 (<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code> はフォームの &quot;section&quot; です。)</p>\n<p>2 タプルのフォーマットは <code class=\"docutils literal notranslate\"><span class=\"pre\">(name,</span> <span class=\"pre\">field_options)</span></code> で、<code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> はフィールドセットのタイトル文字列を表し、<code class=\"docutils literal notranslate\"><span class=\"pre\">field_options</span></code> フィールドセットに関する情報のディクショナリで、表示するフィールドのリストを含みます。</p>\n<p><a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/flatpages/#django.contrib.flatpages.models.FlatPage\" title=\"django.contrib.flatpages.models.FlatPage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.flatpages.models.FlatPage</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FlatPageAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">fieldsets</span> <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.2/_images/fieldsets.png\" src=\"/ja/2.2/_images/fieldsets.png\" />\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fieldsets</span></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\"><span class=\"pre\">fields</span></code></a> オプションのどちらも存在しない場合、Django はデフォルトで <code class=\"docutils literal notranslate\"><span class=\"pre\">AutoField</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">editable=True</span></code> 以外の各フィールドを、単一のフィールドセットで、モデル内でフィールドが定義されたとおりの順番で表示します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field_options</span></code> ディクショナリは以下のキーを持つことができます:</p>\n<ul>\n<li><dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">fields</span></code></a> オプションと同様に、複数のフィールドを 1 行に表示するにはタプルでこれらのフィールドを囲んでください。この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">first_name</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">last_name</span></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\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">ModelAdmin.readonly_fields</span></code></a> で定義される値を持つことができ、読み込み専用で表示されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">readonly_fields</span></code></a> 内でリスト化される必要があります。</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">classes</span></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\"><span class=\"pre\">collapse</span></code> と``wide``の 2 つの便利なクラスがデフォルトの admin サイトのスタイルシートで定義されています。<code class=\"docutils literal notranslate\"><span class=\"pre\">collapse</span></code> スタイルのフィールドセットは初期状態では admin 内で折りたたまれており、&quot;click to expand&quot; リンクで置き換えられています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">wide</span></code> スタイルのフィールドセットは水平方向の追加的な余白が与えられます。</p>\n</dd>\n</dl>\n</li>\n<li><dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">description</span></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\"><span class=\"pre\">TabularInline</span></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.2/ref/utils/#django.utils.html.escape\" title=\"django.utils.html.escape\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.html.escape()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">filter_horizontal</span></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.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> は <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;</span></code> で admin サイトで表示されます。複数選択のボックスは、たくさんのアイテムを選択するには不向きです。<a class=\"reference internal\" href=\"/ja/2.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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\"><span class=\"pre\">filter_vertical</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">filter_vertical</span></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\"><span class=\"pre\">filter_horizontal</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">form</span></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\"><span class=\"pre\">ModelForm</span></code> が動的に生成されます。追加と変更の両方のページで使用されるフォームです。独自の <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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\"><span class=\"pre\">ModelAdmin.get_form()</span></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\">\n<p class=\"admonition-title\">ノート</p>\n<p><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> で <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.model</span></code> 属性を定義した場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.fields</span></code> 属性 (もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.exclude</span></code> 属性) も定義する必要があります。しかし、admin 自身がフィールドを定義する方法を持っているため、<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.fields</span></code> 属性は無視されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> を admin のみで使用する場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> が使用する正しいモデルを提供するため、<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.model</span></code> 属性を省略するのが手っ取り早い解決法です。あるいは、<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code> クラス内で <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span> <span class=\"pre\">=</span> <span class=\"pre\">[]</span></code> をセットして <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> のバリデーションの条件を満たすこともできます。</p>\n</aside>\n<aside class=\"admonition-note admonition\">\n<p class=\"admonition-title\">ノート</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> の両方で <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> オプションが定義されている場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Person</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Person</span>\n        <span class=\"n\">exclude</span> <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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">exclude</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;age&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PersonForm</span>\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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">formfield_overrides</span></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.2/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> のうちある程度の部分をオーバーライドする簡単 (だけど汚い) 方法を提供します。<code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_overrides</span></code> はディクショナリで、フィールドクラスの構成時にフィールドに渡す引数のディクショナリをマッピングします。</p>\n<p>これでは抽象的すぎるので、具体的な例を見てみましょう。<code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_overrides</span></code> のもっとも一般的な使い道は、特定のタイプのフィールドに対してカスタムしたウィジェットを追加することです。大きなテキストフィールドを使用するために、デフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;textarea&gt;</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">RichTextEditorWidget</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\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=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyModel</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.widgets</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RichTextEditorWidget</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">formfield_overrides</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s1\">&#39;widget&#39;</span><span class=\"p\">:</span> <span class=\"n\">RichTextEditorWidget</span><span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>ディクショナリ内のキーは文字列 <em>ではなく</em> 実際のフィールドクラスである点に注意してください。値は別のディクショナリです; これらの引数はフォームフィールドの <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> メソッドに渡されます。詳細は <a class=\"reference internal\" href=\"/ja/2.2/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.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> や <a class=\"reference internal\" href=\"/ja/2.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>) でカスタムウィジェットを使用したいときは、,  <code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">radio_fields</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">autocomplete_fields</span></code> にそのフィールドの名前を含まないようにしてください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_overrides</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">radio_fields</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">autocomplete_fields</span></code> のどれかがセットされたリレーションフィールドのウィジェットは変更しません。これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">radio_fields</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">autocomplete_fields</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">inlines</span></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\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">ModelAdmin.get_formsets_with_inlines()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_display</span></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\"><span class=\"pre\">list_display</span></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=\"n\">list_display</span> <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\"><span class=\"pre\">list_display</span></code> をセットしない場合、admin サイトは各オブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__()</span></code> 表現を表示する単一の列を表示します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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=\"w\"> </span><span class=\"nf\">upper_case_name</span><span class=\"p\">(</span><span class=\"n\">obj</span><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><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span>\n<span class=\"n\">upper_case_name</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Name&#39;</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">upper_case_name</span><span class=\"p\">,)</span>\n</code></pre></div>\n</li>\n<li><p>1 つの引数 (モデルのインスタンス) を受け入れる <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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=\"w\"> </span><span class=\"nf\">upper_case_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><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><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span>\n    <span class=\"n\">upper_case_name</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">birthday</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">birthday</span><span class=\"o\">.</span><span class=\"n\">strftime</span><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    <span class=\"n\">decade_born_in</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Birth decade&#39;</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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\"><span class=\"pre\">list_display</span></code> に関する特殊な状況の注意点です:</p>\n<ul>\n<li><p>フィールドが <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> の場合、 Django は関係オブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">__str__()</span></code> を表示します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> フィールドは、テーブル内で各行に対して個別の SQL ステートメントを実行する可能性があるため、サポートされていません。それでも使いたい場合は、モデルにカスタムメソッドを作成し、そのメソッドの名前を <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> に追加してください。 (<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> 内でのカスタムメソッドについてより詳しくは下記を参照してください。)</p></li>\n<li><p>フィールドが <code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField`</span> <span class=\"pre\">の場合、Django</span> <span class=\"pre\">は</span> <span class=\"pre\">``True</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の代わりにかわいい &quot;on&quot; か &quot;off&quot; のアイコンを表示します。</p></li>\n<li><p>与えられた文字列がモデル、<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code>、カラブルのどれかの場合、Django はデフォルトで HTML エスケープして出力します。ユーザーの入力をエスケープしたり非エスケープのタグを使う場合、<a class=\"reference internal\" href=\"/ja/2.2/ref/utils/#django.utils.html.format_html\" title=\"django.utils.html.format_html\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">format_html()</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.html</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">format_html</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">color_code</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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> <span class=\"n\">format_html</span><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><span class=\"n\">color_code</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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\"><span class=\"pre\">ModelAdmin</span></code> のいずれかを使っているとき、カラブルに <code class=\"docutils literal notranslate\"><span class=\"pre\">short_description</span></code> 属性を追加することでカラムのタイトルをカスタムできます。</p></li>\n<li><p>フィールドの値が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>、空の文字列、エレメントを持たない iterable のいずれかの場合、Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></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\"><span class=\"pre\">AdminSite.empty_value_display</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">empty_value_display</span> <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\"><span class=\"pre\">ModelAdmin.empty_value_display</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">empty_value_display</span> <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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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=\"w\"> </span><span class=\"nf\">birth_date_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n         <span class=\"k\">return</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">birth_date</span>\n\n    <span class=\"n\">birth_date_view</span><span class=\"o\">.</span><span class=\"n\">empty_value_display</span> <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\"><span class=\"pre\">ModelAdmin</span></code>、カラブルのどれかの場合、メソッドに値が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">boolean</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">birthday</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">birthday</span><span class=\"o\">.</span><span class=\"n\">strftime</span><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    <span class=\"n\">born_in_fifties</span><span class=\"o\">.</span><span class=\"n\">boolean</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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\"><span class=\"pre\">__str__()</span></code> メソッドは、他のモデルメソッドとまったく同様に <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></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><span class=\"n\">list_display</span> <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\"><span class=\"pre\">list_display</span></code> の要素は、ソートに使用できません (Django のソートはすべてデータベースレベルで実行されるためです)。</p>\n<p>しかし、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> の要素が特定のデータベースフィールドを表す場合、アイテムの <code class=\"docutils literal notranslate\"><span class=\"pre\">admin_order_field</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.html</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">format_html</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">color_code</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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> <span class=\"n\">format_html</span><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><span class=\"n\">color_code</span><span class=\"p\">,</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"n\">colored_first_name</span><span class=\"o\">.</span><span class=\"n\">admin_order_field</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;first_name&#39;</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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\"><span class=\"pre\">colored_first_name</span></code> で ソートしようとするとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">first_name</span></code> フィールドで並べ替えるよう Django に伝えます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">admin_order_field</span></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=\"n\">colored_first_name</span><span class=\"o\">.</span><span class=\"n\">admin_order_field</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-first_name&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">admin_order_field</span></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=\"w\"> </span><span class=\"nc\">Blog</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BlogAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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=\"w\"> </span><span class=\"nf\">author_first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"n\">author_first_name</span><span class=\"o\">.</span><span class=\"n\">admin_order_field</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author__first_name&#39;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">admin_order_field</span></code> 内では <a class=\"reference internal\" href=\"/ja/2.2/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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Value</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Concat</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n    <span class=\"n\">full_name</span><span class=\"o\">.</span><span class=\"n\">admin_order_field</span> <span class=\"o\">=</span> <span class=\"n\">Concat</span><span class=\"p\">(</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">,</span> <span class=\"n\">Value</span><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\">\n<p class=\"version-note-title\">New in Django 2.1</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">admin_order_field</span></code> 内での表現のサポートが追加されました。</p>\n</aside>\n</li>\n<li><p>Elements of <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> can also be properties. Please note however,\nthat due to the way properties work in Python, setting\n<code class=\"docutils literal notranslate\"><span class=\"pre\">short_description</span></code> on a property is only possible when using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">property()</span></code> function and <strong>not</strong> with the <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;property</span></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=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n    <span class=\"n\">my_property</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Full name of the person&quot;</span>\n\n    <span class=\"n\">full_name</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">my_property</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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\"><span class=\"pre\">list_display</span></code> will also appear as CSS classes in\nthe HTML output, in the form of <code class=\"docutils literal notranslate\"><span class=\"pre\">column-&lt;field_name&gt;</span></code> on each <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;th&gt;</span></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\"><span class=\"pre\">list_display</span></code> の各要素を以下の順番で解釈しようとします:</p>\n<ul class=\"simple\">\n<li><p>モデルのフィールド。</p></li>\n<li><p>カラブル。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> 属性を表す文字列。</p></li>\n<li><p>モデル属性を表す文字列。</p></li>\n</ul>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">first_name</span></code> がモデルフィールドと <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_display_links</span></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\"><span class=\"pre\">list_display</span></code></a> 内のフィールドにおいて &quot;変更&quot; ページへのリンクをコントロールするには、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display_links</span></code> を使用してください。</p>\n<p>デフォルトでは、チェンジリストページは最初のカラム -- <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> で最初に指定したフィールドです -- に各アイテムの変更ページへのリンクが貼られています。しかし、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display_links</span></code> を使って変更できます:</p>\n<ul>\n<li><p>リンクを貼らない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> をセットしてください。</p></li>\n<li><p>(<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> と同様のフォーマットで) リンクに変換したいカラムのフィールドのリストないしタプルをセットしてください。</p>\n<p>1 つないし複数のフィールドを指定できます。<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> にある限り、Django はいくつのフィールドがリンクになろうと気にしません。唯一の要件は、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_display_links</span></code> をこの方式で使いたいときは <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> を指定することです。</p>\n</li>\n</ul>\n<p>以下の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">first_name</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">last_name</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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    <span class=\"n\">list_display_links</span> <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=\"w\"> </span><span class=\"nc\">AuditEntryAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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    <span class=\"n\">list_display_links</span> <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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_editable</span></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\"><span class=\"pre\">list_editable</span></code> にセットしてください。<code class=\"docutils literal notranslate\"><span class=\"pre\">list_editable</span></code> に指定されたフィールドは、チェンジリストページ上でフォームウィジェットとして表示され、ユーザーは複数の行を一度に編集して保存することができます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">list_editable</span></code> は、他のオプションと特定部分で相互関係にあります; 以下のルールに注意してください:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list_editable</span></code> 内のすべてのフィールドは <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> に含まれている必要があります。表示されていないフィールドは編集できないのです!</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list_editable</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display_links</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_filter</span></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\"><span class=\"pre\">list_filter</span></code> をセットしてください。:</p>\n<img alt=\"/ja/2.2/_images/list_filter.png\" src=\"/ja/2.2/_images/list_filter.png\" />\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">list_filter</span></code> は要素のリストかタプルで、各要素は以下のいずれかの種類となります:</p>\n<ul>\n<li><p>フィールドの名称で、フィールドには <code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">DateField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_filter</span> <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\"><span class=\"pre\">list_filter</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">UserAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_filter</span> <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\"><span class=\"pre\">django.contrib.admin.SimpleListFilter</span></code> を継承したクラスで、title` と <code class=\"docutils literal notranslate\"><span class=\"pre\">parameter_name</span></code> 属性を指定し、また <code class=\"docutils literal notranslate\"><span class=\"pre\">lookups</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></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=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">gettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">DecadeBornListFilter</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">SimpleListFilter</span><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    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">_</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    <span class=\"n\">parameter_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;decade&#39;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">lookups</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">model_admin</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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=\"n\">_</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=\"n\">_</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=\"w\"> </span><span class=\"nf\">queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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><span class=\"n\">value</span><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> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">birthday__gte</span><span class=\"o\">=</span><span class=\"n\">date</span><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                                    <span class=\"n\">birthday__lte</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">value</span><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> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">birthday__gte</span><span class=\"o\">=</span><span class=\"n\">date</span><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                                    <span class=\"n\">birthday__lte</span><span class=\"o\">=</span><span class=\"n\">date</span><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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_filter</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">DecadeBornListFilter</span><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\"><span class=\"pre\">HttpRequest</span></code> オブジェクトが <code class=\"docutils literal notranslate\"><span class=\"pre\">lookups</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">queryset</span></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=\"w\"> </span><span class=\"nc\">AuthDecadeBornListFilter</span><span class=\"p\">(</span><span class=\"n\">DecadeBornListFilter</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">lookups</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">model_admin</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">lookups</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">model_admin</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">queryset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Also as a convenience, the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> object is passed to\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">lookups</span></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=\"w\"> </span><span class=\"nc\">AdvancedDecadeBornListFilter</span><span class=\"p\">(</span><span class=\"n\">DecadeBornListFilter</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">lookups</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">model_admin</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><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        <span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">model_admin</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">birthday__gte</span><span class=\"o\">=</span><span class=\"n\">date</span><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                      <span class=\"n\">birthday__lte</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">exists</span><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=\"n\">_</span><span class=\"p\">(</span><span class=\"s1\">&#39;in the eighties&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">birthday__gte</span><span class=\"o\">=</span><span class=\"n\">date</span><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                      <span class=\"n\">birthday__lte</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">exists</span><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=\"n\">_</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\"><span class=\"pre\">django.contrib.admin.FieldListFilter</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_filter</span> <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> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">BooleanFieldListFilter</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">RelatedOnlyFieldListFilter</span></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=\"w\"> </span><span class=\"nc\">BookAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_filter</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s1\">&#39;author&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">RelatedOnlyFieldListFilter</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></code> モデルへの <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> と仮定すると、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_filter</span></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\"><span class=\"pre\">FieldListFilter</span></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\"><span class=\"pre\">has_output()</span></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=\"w\"> </span><span class=\"nc\">FilterWithCustomTemplate</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">SimpleListFilter</span><span class=\"p\">):</span>\n    <span class=\"n\">template</span> <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\"><span class=\"pre\">admin/filter.html</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_max_show_all</span></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\"><span class=\"pre\">list_max_show_all</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_per_page</span></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\"><span class=\"pre\">list_per_page</span></code> をセットしてください。デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">100</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">list_select_related</span></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.2/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\"><span class=\"pre\">select_related()</span></code></a> を使用するよう Django に伝えるには、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_select_related</span></code> をセットしてください。これにより多くのデータベースクエリを削減できます。</p>\n<p>値は真偽値、リスト、タプルのどれかである必要があります。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> です。</p>\n<p>値が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> のとき、常に <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> が呼ばれます。<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> のときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> が存在する場合 Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> を参照して <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related()</span></code> を呼び出します。</p>\n<p>よりきめ細やかにコントロールする場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">list_select_related</span></code> の値にタプル (ないしリスト) を使用してください。空のタプルは、Django が <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></code> を一切呼び出さないようにします。他のタプルは、パラメータとして直接 <code class=\"docutils literal notranslate\"><span class=\"pre\">select_related</span></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=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_select_related</span> <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\"><span class=\"pre\">select_related('author',</span> <span class=\"pre\">'category')</span></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\"><span class=\"pre\">get_list_select_related()</span></code></a> メソッドを実装できます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> ignores this attribute when\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">select_related()</span></code></a> was already\ncalled on the changelist's <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.ordering\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ordering</span></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\"><span class=\"pre\">ordering</span></code> をセットしてください。モデルの <a class=\"reference internal\" href=\"/ja/2.2/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ordering</span></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\"><span class=\"pre\">get_ordering()</span></code></a> メソッドを実装できます。</p>\n<aside class=\"admonition-performance-considerations-with-ordering-and-sorting admonition\">\n<p class=\"admonition-title\">Performance considerations with ordering and sorting</p>\n<p>To ensure a deterministic ordering of results, the changelist adds\n<code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> to the ordering if it can't find a single or unique together set\nof fields that provide total ordering.</p>\n<p>For example, if the default ordering is by a non-unique <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> field,\nthen the changelist is sorted by <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code>. This could\nperform poorly if you have a lot of rows and don't have an index on\n<code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code>.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.admin.ModelAdmin.paginator\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">paginator</span></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.2/topics/pagination/#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.core.paginator.Paginator</span></code></a> が使われます。カスタムの paginator クラスが <a class=\"reference internal\" href=\"/ja/2.2/topics/pagination/#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.core.paginator.Paginator</span></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\"><span class=\"pre\">ModelAdmin.get_paginator()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">prepopulated_fields</span></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\"><span class=\"pre\">prepopulated_fields</span></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=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">prepopulated_fields</span> <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\"><span class=\"pre\">SlugField</span></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\"><span class=\"pre\">prepopulated_fields</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">preserve_filters</span></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\"><span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">radio_fields</span></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\"><span class=\"pre\">ForeignKey</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> がセットされたフィールドに対して、Django の admin はセレクトボックスのインターフェース (&lt;select&gt;) を使用します。フィールドが <code class=\"docutils literal notranslate\"><span class=\"pre\">radio_fields</span></code> に指定された場合、Django は代わりに ラジオボタンのインターフェースを使用します。<code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> モデルの <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">radio_fields</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;group&quot;</span><span class=\"p\">:</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">VERTICAL</span><span class=\"p\">}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code> モジュールから <code class=\"docutils literal notranslate\"><span class=\"pre\">HORIZONTAL</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">VERTICAL</span></code> のどちらを使用するか選択してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> ないし <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> がセットされたフィールド以外は、<code class=\"docutils literal notranslate\"><span class=\"pre\">radio_fields</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">autocomplete_fields</span></span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.autocomplete_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">autocomplete_fields</span></code> は、<a class=\"reference external\" href=\"https://select2.org/\">Select2</a> オートコンプリート入力に変更したい <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> ないし <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> フィールドのリストです。</p>\n<p>デフォルトでは、これらのフィールドに対して admin はセレクトボックスのインターフェース (<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select&gt;</span></code>) を使用します。ドロップダウン内に表示する関係インスタンスをすべて選択するオーバーヘッドから逃れたいこともあるでしょう。</p>\n<p>Select2 入力はデフォルトの入力と似た見た目ですが、非同期的にオプションを読み込む検索機能を持っています。こちらの方が高速で、特に関係モデルに多くのインスタンスがある場合にはユーザーフレンドリーです。</p>\n<p>オートコンプリート検索は関係オブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> を使用するため、<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">search_fields</span></code></a> を定義する必要があります。</p>\n<p>認証されていないデータが表示されるのを防ぐため、オートコンプリートを使うには、ユーザーは関係オブジェクトに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">change</span></code> 権限を持っている必要があります。</p>\n<p>結果の並べ替えおよびページづけは、関係する <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">get_ordering()</span></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\"><span class=\"pre\">get_paginator()</span></code></a> メソッドでコントロールします。</p>\n<p>以下の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">ChoiceAdmin</span></code> フィールドは <code class=\"docutils literal notranslate\"><span class=\"pre\">Question</span></code> への <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> に対するオートコンプリートフィールドを持ちます。結果は <code class=\"docutils literal notranslate\"><span class=\"pre\">question_text</span></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=\"w\"> </span><span class=\"nc\">QuestionAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;date_created&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">search_fields</span> <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=\"w\"> </span><span class=\"nc\">ChoiceAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">autocomplete_fields</span> <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\">\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\"><span class=\"pre\">ModelAdmin.ordering</span></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\"><span class=\"pre\">ModelAdmin.get_search_results()</span></code></a> 実装を記述するのがよいでしょう。</p>\n<p>また、デフォルトの paginator は常に  <code class=\"docutils literal notranslate\"><span class=\"pre\">count()</span></code> を発行するため、巨大なテーブルでは <code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator</span></code> を変更するのがお勧めです。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">Paginator.count</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">raw_id_fields</span></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\"><span class=\"pre\">ForeignKey</span></code> のフィールドに対して Django の admin はセレクトボックスのインターフェース (<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select&gt;</span></code>) を使用します。ドロップダウン内に表示する関係インスタンスをすべて選択するオーバーヘッドから逃れたいこともあるでしょう。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> に対する <code class=\"docutils literal notranslate\"><span class=\"pre\">Input</span></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=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">raw_id_fields</span> <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\"><span class=\"pre\">raw_id_fields</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">Input</span></code> ウィジェットには、<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> の場合はプライマリキーを、<code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> の場合はカンマで区切った値のリストを入力します。<code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code> ウィジェットには、ユーザーが値を検索および選択できるよう、隣にルーペボタンがあります:</p>\n<img alt=\"/ja/2.2/_images/raw_id_fields.png\" src=\"/ja/2.2/_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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">readonly_fields</span></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\"><span class=\"pre\">list</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code> で指定します) は、データをそのまま表示するだけで編集できなくなります; また、追加と編集に使われる <a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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\"><span class=\"pre\">ModelAdmin.fields</span></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\"><span class=\"pre\">ModelAdmin.fieldsets</span></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\"><span class=\"pre\">ModelAdmin.fields</span></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\"><span class=\"pre\">ModelAdmin.fieldsets</span></code></a> で明示的に並び順を定義しないで <code class=\"docutils literal notranslate\"><span class=\"pre\">readonly_fields</span></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\"><span class=\"pre\">ModelAdmin.list_display</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.html</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">format_html_join</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.safestring</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mark_safe</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">readonly_fields</span> <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=\"w\"> </span><span class=\"nf\">address_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">instance</span><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> <span class=\"n\">format_html_join</span><span class=\"p\">(</span>\n            <span class=\"n\">mark_safe</span><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><span class=\"n\">line</span><span class=\"p\">,)</span> <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">get_full_address</span><span class=\"p\">()),</span>\n        <span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"n\">mark_safe</span><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    <span class=\"n\">address_report</span><span class=\"o\">.</span><span class=\"n\">short_description</span> <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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save_as</span></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\"><span class=\"pre\">save_as</span></code> をセットしてください。</p>\n<p>通常、オブジェクトには 3 つの保存オプションがあります: &quot;保存&quot;、&quot;保存して編集を続ける&quot;、&quot;保存して 1 つ追加&quot; です。<code class=\"docutils literal notranslate\"><span class=\"pre\">save_as</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、&quot;保存して 1 つ追加&quot; が &quot;新規に保存&quot; ボタンに変更され、既存のオブジェクトを変更するのではなく (新しい ID) で新規のオブジェクトが作成されるようになります。</p>\n<p>デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">save_as</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save_as_continue</span></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\"><span class=\"pre\">save_as=True</span></code></a> のとき、新規オブジェクトを保存した後のデフォルトのリダイレクト先はそのオブジェクトの変更ビューです。<code class=\"docutils literal notranslate\"><span class=\"pre\">save_as_continue=False</span></code> にセットすると、リダイレクト先がチェンジリストビューになります。</p>\n<p>デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">save_as_continue</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save_on_top</span></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\"><span class=\"pre\">save_on_top</span></code> をセットしてください。</p>\n<p>通常、保存ボタンはフォームの下部のみに表示されます。<code class=\"docutils literal notranslate\"><span class=\"pre\">save_on_top</span></code> をセットすると、ボタンは上部と下部の両方に表示されるようになります。</p>\n<p>デフォルトでは <code class=\"docutils literal notranslate\"><span class=\"pre\">save_on_top</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">search_fields</span></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\"><span class=\"pre\">search_fields</span></code> をセットしてください。セットするのはフィールド名のリストで、ここで指定したフィールドはテキストボックス内での検索クエリの対象となります。</p>\n<p>指定するフィールドの種類は、<code class=\"docutils literal notranslate\"><span class=\"pre\">CharField</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">TextField</span></code> といったテキストフィールドである必要があります。検索 API の &quot;follow&quot; 記法を使えば <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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=\"n\">search_fields</span> <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><span class=\"n\">search_fields</span> <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.2/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a> 検索を使って) 大文字と小文字を区別して、各単語を含むオブジェクトを返します。各単語は最低 1 つの <code class=\"docutils literal notranslate\"><span class=\"pre\">search_fields</span></code> に含まれている必要があります。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">search_fields</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">['first_name',</span> <span class=\"pre\">'last_name']</span></code> にセットされ、ユーザーが <code class=\"docutils literal notranslate\"><span class=\"pre\">john</span> <span class=\"pre\">lennon</span></code> と検索した場合、Django は SQL の <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></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=\"n\">WHERE</span> <span class=\"p\">(</span><span class=\"n\">first_name</span> <span class=\"n\">ILIKE</span> <span class=\"s1\">&#39;%john%&#39;</span> <span class=\"n\">OR</span> <span class=\"n\">last_name</span> <span class=\"n\">ILIKE</span> <span class=\"s1\">&#39;%john%&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">AND</span> <span class=\"p\">(</span><span class=\"n\">first_name</span> <span class=\"n\">ILIKE</span> <span class=\"s1\">&#39;</span><span class=\"si\">%le</span><span class=\"s1\">nnon%&#39;</span> <span class=\"n\">OR</span> <span class=\"n\">last_name</span> <span class=\"n\">ILIKE</span> <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\"><span class=\"pre\">icontains</span></code> を使いたくない場合、フィールドに検索方法を追加することで、好きな方法を使うことができます。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">search_fields</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">['first_name__exact']</span></code> をセットすれば <a class=\"reference internal\" href=\"/ja/2.2/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">exact</span></code></a> を使えます。</p>\n<p>前述の通り、クエリ条件は分割されて AND で再構成されるので、<a class=\"reference internal\" href=\"/ja/2.2/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">exact</span></code></a> を使った検索は単一の単語の検索でしか機能しません。これは、すべての単語がまったく同じ場合以外、2 語以上が完全一致することはないからです。</p>\n<aside class=\"version-note version-added\" data-version=\"2.1\">\n<p class=\"version-note-title\">New in Django 2.1</p><p>フィールドの検索方法を指定する機能が追加されました。</p>\n</aside>\n<p>いくつかの (古い) ショートカットを使って、フィールドの検索方法を指定することもできます。以下の文字で <code class=\"docutils literal notranslate\"><span class=\"pre\">search_fields</span></code> 内のフィールドにプレフィックスを追加できます。これはフィールドに <code class=\"docutils literal notranslate\"><span class=\"pre\">__&lt;lookup&gt;</span></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.2/ref/models/querysets/#std-fieldlookup-startswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">startswith</span></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.2/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iexact</span></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.2/ref/contrib/postgres/search/#std-fieldlookup-search\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">search</span></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.2/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></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\"><span class=\"pre\">ModelAdmin.get_search_results()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">show_full_result_count</span></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\"><span class=\"pre\">99</span> <span class=\"pre\">results</span> <span class=\"pre\">(103</span> <span class=\"pre\">total)</span></code>) を表示するかどうかをコントロールするには、<code class=\"docutils literal notranslate\"><span class=\"pre\">show_full_result_count</span></code> をセットしてください。<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> にセットすると、代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">99</span> <span class=\"pre\">results</span> <span class=\"pre\">(Show</span> <span class=\"pre\">all)</span></code> のような文字列が表示されるようになります。</p>\n<p>デフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">show_full_result_count=True</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">sortable_by</span></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\">\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\"><span class=\"pre\">list_display</span></code></a> で指定したすべてのモデルフィールド (と <code class=\"docutils literal notranslate\"><span class=\"pre\">admin_order_field</span></code> プロパティを持つカラブル) で並び替えが可能です。</p>\n<p>特定のカラムでの並び替えを無効化したい場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">sortable_by``に</span> <span class=\"pre\">:attr:`list_display`</span> <span class=\"pre\">サブセットのコレクション</span> <span class=\"pre\">(例:</span> <span class=\"pre\">``list</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></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\"><span class=\"pre\">get_sortable_by()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">view_on_site</span></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\"><span class=\"pre\">view_on_site</span></code> をセットしてください。このリンクは保存されたオブジェクトを表示できる URL に誘導します。</p>\n<p>値は、真偽値かカラブルで指定します。<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> (デフォルトです) の場合、オブジェクトの <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">get_absolute_url()</span></code></a> メソッドが使われ、URLが生成されます。</p>\n<p>モデルが <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">get_absolute_url()</span></code></a> メソッドを持っていても &quot;サイトで見る&quot; ボタンを表示したくない場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">view_on_site</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">view_on_site</span> <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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">view_on_site</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;person-detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;slug&#39;</span><span class=\"p\">:</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">slug</span><span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;https://example.com&#39;</span> <span class=\"o\">+</span> <span class=\"n\">url</span>\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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">add_form_template</span></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\"><span class=\"pre\">add_view()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">change_form_template</span></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\"><span class=\"pre\">change_view()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">change_list_template</span></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\"><span class=\"pre\">changelist_view()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete_confirmation_template</span></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\"><span class=\"pre\">delete_view()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete_selected_confirmation_template</span></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\"><span class=\"pre\">delete_selected</span></code> アクションメソッドで使われます。<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">object_history_template</span></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\"><span class=\"pre\">history_view()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">popup_response_template</span></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\"><span class=\"pre\">response_add()</span></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\"><span class=\"pre\">response_change()</span></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\"><span class=\"pre\">response_delete()</span></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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin.save_model()</span></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\"><span class=\"pre\">ModelAdmin.delete_model()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">change</span></span></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\"><span class=\"pre\">save_model</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code>、モデルのインスタンス、<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> のインスタンス、追加か変更かを表す真偽値が渡されます。このメソッドをオーバーライドすると、保存の前後に操作を追加できます。<code class=\"docutils literal notranslate\"><span class=\"pre\">super().save_model()</span></code> を呼び出して、<a class=\"reference internal\" href=\"/ja/2.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.save()</span></code></a> を使ってオブジェクトを保存してください。</p>\n<p>例えば、保存前にオブジェクトに <code class=\"docutils literal notranslate\"><span class=\"pre\">request.user</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">save_model</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"n\">change</span><span class=\"p\">):</span>\n        <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save_model</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"n\">change</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.delete_model\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete_model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></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\"><span class=\"pre\">delete_model</span></code> には、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> とモデルのインスタンスが渡されます。このメソッドをオーバーライドすると、削除の前後に操作を追加できます。<code class=\"docutils literal notranslate\"><span class=\"pre\">super().delete_model()</span></code> を呼び出して、<a class=\"reference internal\" href=\"/ja/2.2/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Model.delete()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete_queryset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset</span></span></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\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">delete_queryset()</span></code> には、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> と削除するオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> が渡されます。このメソッドをオーバーライドすると、&quot;選択したオブジェクトの削除&quot; <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save_formset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">formset</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">change</span></span></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\"><span class=\"pre\">save_formset</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code>、親 <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> のインスタンス、親オブジェクトの追加か変更かを表す真偽値が与えられます。</p>\n<p>例えば、変更のあったフォームセットのモデルのインスタンスそれぞれに <code class=\"docutils literal notranslate\"><span class=\"pre\">request.user</span></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=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">save_formset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"n\">formset</span><span class=\"p\">,</span> <span class=\"n\">change</span><span class=\"p\">):</span>\n        <span class=\"n\">instances</span> <span class=\"o\">=</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">obj</span> <span class=\"ow\">in</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">deleted_objects</span><span class=\"p\">:</span>\n            <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n        <span class=\"k\">for</span> <span class=\"n\">instance</span> <span class=\"ow\">in</span> <span class=\"n\">instances</span><span class=\"p\">:</span>\n            <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span>\n            <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save_m2m</span><span class=\"p\">()</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_ordering</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">get_ordering</span></code> メソッドは引数に <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></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\"><span class=\"pre\">ordering</span></code></a> のときと同じような <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_ordering</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</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> <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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_search_results</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">search_term</span></span></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\"><span class=\"pre\">get_search_results</span></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\"><span class=\"pre\">ModelAdmin.search_fields</span></code></a> に含まれるフィールドを検索します。</p>\n<p>このメソッドは、独自の検索方法でオーバーライドすることができます。例えば、数値のフィールドで検索したり、Solr や Haystack といった外部のツールを使うことができます。独自の検索方法によって実装されたクエリセットの変更が結果に重複を生じさせるかを確認し、返値の 2 番目の要素に <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返す必要があります。</p>\n<p>例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">age</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">list_display</span> <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    <span class=\"n\">search_fields</span> <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=\"w\"> </span><span class=\"nf\">get_search_results</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"n\">search_term</span><span class=\"p\">):</span>\n        <span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"n\">use_distinct</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_search_results</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"n\">search_term</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">search_term_as_int</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">search_term</span><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            <span class=\"n\">queryset</span> <span class=\"o\">|=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">age</span><span class=\"o\">=</span><span class=\"n\">search_term_as_int</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"n\">use_distinct</span>\n</code></pre></div>\n<p>この実装は、数値フィールドに対して文字列比較を行う <code class=\"docutils literal notranslate\"><span class=\"pre\">search_fields</span> <span class=\"pre\">=</span> <span class=\"pre\">('name',</span> <span class=\"pre\">'=age')</span></code> に比べて、春香に効率的です... 例えば PostgreSQL では <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span> <span class=\"pre\">OR</span> <span class=\"pre\">UPPER(&quot;polls_choice&quot;.&quot;votes&quot;::text)</span> <span class=\"pre\">=</span> <span class=\"pre\">UPPER('4')</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save_related</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">formsets</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">change</span></span></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\"><span class=\"pre\">save_related</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code>、親 <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_autocomplete_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.admin.ModelAdmin.get_autocomplete_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_autocomplete_fields()</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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\"><span class=\"pre\">ModelAdmin.autocomplete_fields</span></code></a> セクションで説明した通りオートコンプリートウィジェットで表示するフィールドの名前の <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_readonly_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">get_readonly_fields</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> と編集対象の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> (ないし新規追加用の <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.readonly_fields</span></code></a> セクションで説明した通り、読み込み専用で表示するフィールドの名前の <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_prepopulated_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">get_prepopulated_fields</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> と編集対象の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> (ないし新規追加用の <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.prepopulated_fields</span></code></a> セクションで説明した通り <code class=\"docutils literal notranslate\"><span class=\"pre\">dictionary</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_list_display</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">get_list_display</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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\"><span class=\"pre\">ModelAdmin.list_display</span></code></a> セクションで説明した通りチェンジリストビューで表示するフィールドの名前の <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_list_display_links</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">list_display</span></span></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\"><span class=\"pre\">get_list_display_links</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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\"><span class=\"pre\">ModelAdmin.get_list_display()</span></code></a> によって返された <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> ないし <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></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\"><span class=\"pre\">ModelAdmin.list_display_links</span></code></a> セクションで説明した通り、チェンジリストで変更ビューにリンクを貼りたいフィールドの名前の <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code>、もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_exclude</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">get_exclude</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> と編集対象の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> (ないし新規追加用の <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.exclude</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">get_fields</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> と編集対象の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> (ないし新規追加用の <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.fields</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_fieldsets</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">get_fieldsets</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> と編集対象の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> (ないし新規追加用の <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.fieldsets</span></code></a> セクションで説明した通り admin のフォームページ上の <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_list_filter</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">get_list_filter</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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\"><span class=\"pre\">list_filter</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_list_select_related</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">get_list_select_related</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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\"><span class=\"pre\">ModelAdmin.list_select_related</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_search_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">get_search_fields</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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\"><span class=\"pre\">search_fields</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_sortable_by</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_list_display</span></code> メソッドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> が渡され、チェンジリストページ並び替え可能にするフィールドの名前の コレクション (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></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\"><span class=\"pre\">sortable_by</span></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\"><span class=\"pre\">get_list_display()</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_sortable_by</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><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><span class=\"n\">get_list_display</span><span class=\"p\">(</span><span class=\"n\">request</span><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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_inline_instances</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">get_inline_instances</span></code> method is given the <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> and the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> being edited (or <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> on an add form) and is expected to return\na <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></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\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">InlineModelAdmin</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">MyInline</span><span class=\"p\">,)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_inline_instances</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">inline</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">admin_site</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">inline</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">inlines</span><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\"><span class=\"pre\">inlines</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_urls</span></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\"><span class=\"pre\">ModelAdmin</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">get_urls</span></code> メソッドは、URLconf と同じ方法で、その ModelAdmin に対して使用される URL を返します。したがって、<a class=\"reference internal\" href=\"/ja/2.2/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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.template.response</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplateResponse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_urls</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">urls</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_urls</span><span class=\"p\">()</span>\n        <span class=\"n\">my_urls</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">path</span><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><span class=\"n\">my_view</span><span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">my_urls</span> <span class=\"o\">+</span> <span class=\"n\">urls</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ...</span>\n        <span class=\"n\">context</span> <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><span class=\"n\">admin_site</span><span class=\"o\">.</span><span class=\"n\">each_context</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">),</span>\n           <span class=\"c1\"># Anything else you want in the context...</span>\n           <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"n\">value</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">TemplateResponse</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;sometemplate.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>admin のレイアウトを使用したい場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">admin/base_site.html</span></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\"><span class=\"pre\">my_view</span></code> will be accessed at\n<code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/myapp/mymodel/my_view/</span></code> (assuming the admin URLs are included\nat <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code>.)</p>\n</aside>\n<p>However, the <code class=\"docutils literal notranslate\"><span class=\"pre\">self.my_view</span></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\"><span class=\"pre\">AdminSite.admin_view()</span></code> (i.e. <code class=\"docutils literal notranslate\"><span class=\"pre\">self.admin_site.admin_view</span></code>\ninside a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_urls</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">urls</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_urls</span><span class=\"p\">()</span>\n        <span class=\"n\">my_urls</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">path</span><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><span class=\"n\">admin_site</span><span class=\"o\">.</span><span class=\"n\">admin_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">my_view</span><span class=\"p\">))</span>\n        <span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">my_urls</span> <span class=\"o\">+</span> <span class=\"n\">urls</span>\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><span class=\"n\">path</span><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><span class=\"n\">admin_site</span><span class=\"o\">.</span><span class=\"n\">admin_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">my_view</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>This wrapping will protect <code class=\"docutils literal notranslate\"><span class=\"pre\">self.my_view</span></code> from unauthorized access and\nwill apply the <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">django.views.decorators.cache.never_cache()</span></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\"><span class=\"pre\">cacheable=True</span></code> argument to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite.admin_view()</span></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=\"n\">path</span><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><span class=\"n\">admin_site</span><span class=\"o\">.</span><span class=\"n\">admin_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">my_view</span><span class=\"p\">,</span> <span class=\"n\">cacheable</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> views have <code class=\"docutils literal notranslate\"><span class=\"pre\">model_admin</span></code> attributes. Other\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code> views have <code class=\"docutils literal notranslate\"><span class=\"pre\">admin_site</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_form</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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\"><span class=\"pre\">add_view()</span></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\"><span class=\"pre\">change_view()</span></code></a> を参照してください。</p>\n<p>基本の実装は <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/models/#django.forms.models.modelform_factory\" title=\"django.forms.models.modelform_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelform_factory()</span></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\"><span class=\"pre\">form</span></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\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">exclude</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n            <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">MySuperuserForm</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>シンプルに <a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_formsets_with_inlines</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">FormSet</span></code>, <a class=\"reference internal\" href=\"#django.contrib.admin.InlineModelAdmin\" title=\"django.contrib.admin.InlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">InlineModelAdmin</span></code></a>) ペアを生成します。</p>\n<p>例えば、変更ビューのみで特定のインラインを表示したい場合、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">get_formsets_with_inlines</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">MyInline</span><span class=\"p\">,</span> <span class=\"n\">SomeOtherInline</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_formsets_with_inlines</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">inline</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_inline_instances</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><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><span class=\"n\">inline</span><span class=\"p\">,</span> <span class=\"n\">MyInline</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"n\">obj</span> <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> <span class=\"n\">inline</span><span class=\"o\">.</span><span class=\"n\">get_formset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">),</span> <span class=\"n\">inline</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_foreignkey\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">formfield_for_foreignkey</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">db_field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">ModelAdmin</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_for_foreignkey</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">db_field</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;car&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;queryset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Car</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">owner</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">formfield_for_foreignkey</span><span class=\"p\">(</span><span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code> インスタンスを使って <code class=\"docutils literal notranslate\"><span class=\"pre\">Car</span></code> ForeignKey フィールドをフィルタし、特定の <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">formfield_for_manytomany</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">db_field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">formfield_for_foreignkey</span></code> メソッドと同じように、<code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_for_manytomany</span></code> メソッドをオーバーライドすると ManyToMany に対するデフォルトのフォームフィールドを変更できます。 例えば、あるオーナーは複数の car を所有でき、また car は複数のオーナーに所有されるとすると -- 多対多の関係です --<code class=\"docutils literal notranslate\"><span class=\"pre\">Car</span></code> のフィールドをフィルタして特定の <code class=\"docutils literal notranslate\"><span class=\"pre\">User</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">db_field</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;cars&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;queryset&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Car</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">owner</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">formfield_for_manytomany</span><span class=\"p\">(</span><span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</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.formfield_for_choice_field\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">formfield_for_choice_field</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">db_field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">formfield_for_foreignkey</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_for_manytomany</span></code> メソッドと同じように、<code class=\"docutils literal notranslate\"><span class=\"pre\">formfield_for_choice_field</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">formfield_for_choice_field</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">db_field</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;status&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">kwargs</span><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> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n                <span class=\"n\">kwargs</span><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><span class=\"n\">formfield_for_choice_field</span><span class=\"p\">(</span><span class=\"n\">db_field</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-note admonition\">\n<p class=\"admonition-title\">ノート</p>\n<p>フォームフィールドにセットされたすべての <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code> 属性はそのフォームのフィールドのみに制限されます。モデル上の一致するフィールドに選択肢がセットされている場合、フォームに提供される選択肢はこの選択肢の有効なサブセットでなくてはなりません。そうでない場合、フォームの送信は、モデル自身の保存前のバリデーションで <a class=\"reference internal\" href=\"/ja/2.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_changelist</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">Changelist``を返します。デフォルトでは、``django.contrib.admin.views.main.ChangeList</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_changelist_form</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">Formset</span></code> で使うための <a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_changelist_form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">MyForm</span>\n</code></pre></div>\n<aside class=\"admonition-note admonition\">\n<p class=\"admonition-title\">ノート</p>\n<p><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> で <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.model</span></code> 属性を定義した場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.fields</span></code> 属性 (ないし <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.exclude</span></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\"><span class=\"pre\">ModelAdmin.list_editable</span></code></a> 属性をオーバーライドします。最も簡単な解決方法は、<code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.model</span></code> 属性を除外することです。これは <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_changelist_formset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">list_editable</span></code></a> を使っている場合、チェンジリストページで使用するための <a class=\"reference internal\" href=\"/ja/2.2/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=\"w\"> </span><span class=\"nn\">django.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseModelFormSet</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyAdminFormSet</span><span class=\"p\">(</span><span class=\"n\">BaseModelFormSet</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_changelist_formset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">MyAdminFormSet</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_changelist_formset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</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.lookup_allowed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">lookup_allowed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lookup</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></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\"><span class=\"pre\">list_filter</span></code></a> works, for example. The\nlookups are similar to what's used in <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">QuerySet.filter()</span></code></a> (e.g.\n<code class=\"docutils literal notranslate\"><span class=\"pre\">user__email=user&#64;example.com</span></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\"><span class=\"pre\">lookup_allowed()</span></code> method is given a lookup path from the query string\n(e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">'user__email'</span></code>) and the corresponding value\n(e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">'user&#64;example.com'</span></code>), and returns a boolean indicating whether\nfiltering the changelist's <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> using the parameters is permitted.\nIf <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_allowed()</span></code> returns <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">DisallowedModelAdminLookup</span></code>\n(subclass of <a class=\"reference internal\" href=\"/ja/2.2/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code></a>) is raised.</p>\n<p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup_allowed()</span></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\"><span class=\"pre\">list_filter</span></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\"><span class=\"pre\">get_list_filter()</span></code></a>), and lookups required for\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">limit_choices_to</span></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\"><span class=\"pre\">raw_id_fields</span></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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_view_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\">\n<p class=\"version-note-title\">New in Django 2.1</p></aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> の閲覧が許可されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。obj が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合、この種類のオブジェクトの閲覧が一般的に許可されているかどうかを表すよう、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を指定します (例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> は現在のユーザーがこの種類のすべてのオブジェクトを閲覧できないことを意味します)。</p>\n<p>デフォルトの実装では、ユーザーが &quot;change&quot; か &quot;view&quot; 権限を持っていれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_add_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_change_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">obj</span></code> の編集が許可されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合、この種類のオブジェクトの編集が一般的に許可されているかどうかを表すよう、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を指定します (例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_delete_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">obj</span></code> の削除が許可されている場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合、この種類のオブジェクトの削除が一般的に許可されているかどうかを表すよう、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を指定します (例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_module_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。デフォルトでは <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">User.has_module_perms()</span></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\"><span class=\"pre\">has_view_permission()</span></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\"><span class=\"pre\">has_add_permission()</span></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\"><span class=\"pre\">has_change_permission()</span></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\"><span class=\"pre\">has_delete_permission()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_queryset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">ModelAdmin</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset</span></code> メソッドは admin サイトで編集可能なモデルインスタンスのすべての <a class=\"reference internal\" href=\"/ja/2.2/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_queryset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">qs</span>\n        <span class=\"k\">return</span> <span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</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.message_user\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">message_user</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">message</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">level</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">messages.INFO</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_tags</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fail_silently</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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.2/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\"><span class=\"pre\">django.contrib.messages</span></code></a> バックエンドを使ってユーザーにメッセージを送ります。<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">contrib.messages</span></code> framework is not\ninstalled. These keyword arguments match those for\n<a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/messages/#django.contrib.messages.add_message\" title=\"django.contrib.messages.add_message\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.messages.add_message()</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_paginator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">per_page</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">orphans</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">0</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">allow_empty_first_page</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></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\"><span class=\"pre\">paginator</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">response_add</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">post_url_continue</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">add_view()</span></code></a> ステージに対する <a class=\"reference internal\" href=\"/ja/2.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> を決定します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">response_add</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">response_change</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></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\"><span class=\"pre\">change_view()</span></code></a> ステージに対する <a class=\"reference internal\" href=\"/ja/2.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> を決定します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">response_change</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">response_delete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj_display</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj_id</span></span></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\"><span class=\"pre\">delete_view()</span></code></a> ステージに対する <a class=\"reference internal\" href=\"/ja/2.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> を決定します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">response_delete</span></code> は、オブジェクトが削除された後に呼び出されます。オーバーライドすることで、オブジェクトが削除された後のデフォルトの挙動を変更することができます。</p>\n<p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>obj_display``は削除されたオブジェクトの名前を表す文字列です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">obj_id</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_changeform_initial_data</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">GET</span></code> パラメータで初期値が与えられます。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">?name=initial_value</span></code> は``name`` フィールドの初期値を <code class=\"docutils literal notranslate\"><span class=\"pre\">initial_value</span></code> にセットします。</p>\n<p>このメソッドは、<code class=\"docutils literal notranslate\"><span class=\"pre\">{'fieldname':</span> <span class=\"pre\">'fieldval'}</span></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=\"w\"> </span><span class=\"nf\">get_changeform_initial_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</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> <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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_deleted_objects</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">objs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\">\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\"><span class=\"pre\">delete_view()</span></code></a> and\nthe &quot;delete selected&quot; <a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/admin/actions/\"><span class=\"doc\">action</span></a>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">objs</span></code> argument is a homogeneous iterable of objects (a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>\nor a list of model instances) to be deleted, and <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> is the\n<a class=\"reference internal\" href=\"/ja/2.2/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></code></a>.</p>\n<p>This method must return a 4-tuple of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">(deleted_objects,</span> <span class=\"pre\">model_count,</span> <span class=\"pre\">perms_needed,</span> <span class=\"pre\">protected)</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">deleted_objects</span></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.2/ref/templates/builtins/#std-templatefilter-unordered_list\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">unordered_list</span></code></a> filter.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">model_count</span></code> is a dictionary mapping each model's\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">verbose_name_plural</span></code></a> to the number of\nobjects that will be deleted.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">perms_needed</span></code> is a set of <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">verbose_name</span></code></a>s\nof the models that the user doesn't have permission to delete.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">protected</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">add_view</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">change_view</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">object_id</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">changelist_view</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete_view</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">object_id</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">history_view</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">object_id</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">extra_context</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nc\">MyModelAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n\n    <span class=\"c1\"># A template for a very customized change view:</span>\n    <span class=\"n\">change_form_template</span> <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=\"w\"> </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=\"w\"> </span><span class=\"nf\">change_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">object_id</span><span class=\"p\">,</span> <span class=\"n\">form_url</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">extra_context</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">extra_context</span> <span class=\"o\">=</span> <span class=\"n\">extra_context</span> <span class=\"ow\">or</span> <span class=\"p\">{}</span>\n        <span class=\"n\">extra_context</span><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><span class=\"n\">get_osm_info</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">change_view</span><span class=\"p\">(</span>\n            <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">object_id</span><span class=\"p\">,</span> <span class=\"n\">form_url</span><span class=\"p\">,</span> <span class=\"n\">extra_context</span><span class=\"o\">=</span><span class=\"n\">extra_context</span><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.2/ref/template-response/#django.template.response.TemplateResponse\" title=\"django.template.response.TemplateResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplateResponse</span></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.2/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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">ModelAdmin</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></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=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Media</span><span class=\"p\">:</span>\n        <span class=\"n\">css</span> <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        <span class=\"n\">js</span> <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.2/ref/contrib/staticfiles/\"><span class=\"doc\">staticfiles app</span></a> は、すべてのアセットのパスに <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> (<a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合は <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a>) を prepend します。<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">django.jQuery</span></code> という名前空間にあります。jQuery を自身の admin の JavaScript で使うとき、別途ライブラリを準備しないで、チェンジリストや追加、編集ビュー上で <code class=\"docutils literal notranslate\"><span class=\"pre\">django.jQuery</span></code> オブジェクトを使うことができます。</p>\n<aside class=\"version-note version-changed\" data-version=\"2.1\">\n<p class=\"version-note-title\">Changed in Django 2.1</p><p>jQuery が 2.2.3 から 3.3.1 にアップグレードしました。</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"2.2.13\">\n<p class=\"version-note-title\">Changed in Django 2.2.13</p><p>jQuery was upgraded from 3.3.1 to 3.5.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\"><span class=\"pre\">ModelAdmin</span></code></a> クラスはデフォルトで jQuery を要件とするので、特別なニーズがない限り jQuery をメディアリソースの <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> のリストに追加する必要はありません。例えば、jQuery ライブラリがグローバルな名前空間を持つ必要がある場合 (例えばサードパーティの jQuery プラグインを使用する場合など)、もしくは jQuery の新しいバージョンを使いたい場合には、自分自身でコピーを用意する必要があります。</p>\n<p>Django には、非圧縮と 'minified' のバージョンのjQuery があり、それぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">jquery.js</span></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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">InlineModelAdmin</span></code></a> have a <code class=\"docutils literal notranslate\"><span class=\"pre\">media</span></code> property\nthat returns a list of <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> objects which store paths to the JavaScript\nfiles for the forms and/or formsets. If <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> it will\nreturn the uncompressed versions of the various JavaScript files, including\n<code class=\"docutils literal notranslate\"><span class=\"pre\">jquery.js</span></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.2/ref/forms/api/#module-django.forms\" title=\"django.forms\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.forms</span></code></a>, and the <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nc\">ArticleAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">MyArticleAdminForm</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">MyArticleAdminForm</span></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=\"w\"> </span><span class=\"nc\">MyArticleAdminForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">cleaned_data</span><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\"><span class=\"pre\">ModelForm</span></code> here otherwise things can break. See\nthe <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/\"><span class=\"doc\">forms</span></a> documentation on <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/validation/\"><span class=\"doc\">custom validation</span></a> and, more specifically, the\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TabularInline</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">StackedInline</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n   <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n   <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n   <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><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\"><span class=\"pre\">ModelAdmin.inlines</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BookInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Book</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">BookInline</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Django には、以下の通り <code class=\"docutils literal notranslate\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">TabularInline</span></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\"><span class=\"pre\">StackedInline</span></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\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">InlineModelAdmin</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> と多くの機能を共有しており、さらにいくつかの独自の機能を有しています (共有の機能は実際には <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseModelAdmin</span></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\"><span class=\"pre\">form</span></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\"><span class=\"pre\">fieldsets</span></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\"><span class=\"pre\">fields</span></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\"><span class=\"pre\">formfield_overrides</span></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\"><span class=\"pre\">exclude</span></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\"><span class=\"pre\">filter_horizontal</span></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\"><span class=\"pre\">filter_vertical</span></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\"><span class=\"pre\">ordering</span></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\"><span class=\"pre\">prepopulated_fields</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"#django.contrib.admin.ModelAdmin.get_fieldsets\" title=\"django.contrib.admin.ModelAdmin.get_fieldsets\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_fieldsets()</span></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\"><span class=\"pre\">get_queryset()</span></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\"><span class=\"pre\">radio_fields</span></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\"><span class=\"pre\">readonly_fields</span></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\"><span class=\"pre\">raw_id_fields</span></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\"><span class=\"pre\">formfield_for_choice_field()</span></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\"><span class=\"pre\">formfield_for_foreignkey()</span></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\"><span class=\"pre\">formfield_for_manytomany()</span></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\"><span class=\"pre\">has_module_permission()</span></code></a></p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">InlineModelAdmin</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">model</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fk_name</span></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\"><span class=\"pre\">fk_name</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">formset</span></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.2/topics/forms/modelforms/#django.forms.models.BaseInlineFormSet\" title=\"django.forms.models.BaseInlineFormSet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BaseInlineFormSet</span></code></a> です。自分自身のフォームセットを使用すると、カスタマイズの幅が広がります。インラインは <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">form</span></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\"><span class=\"pre\">form</span></code> に対する値で、デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> です。これは、このインラインに対してフォームセットが生成される際に <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/models/#django.forms.models.inlineformset_factory\" title=\"django.forms.models.inlineformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">inlineformset_factory()</span></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\"><span class=\"pre\">InlineModelAdmin</span></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.2/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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">classes</span></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\"><span class=\"pre\">None</span></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\"><span class=\"pre\">fieldsets</span></code></a> で設定したクラスと同様に、<code class=\"docutils literal notranslate\"><span class=\"pre\">collapse</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">extra</span></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.2/topics/forms/formsets/\"><span class=\"doc\">formsets documentation</span></a> を参照してください。</p>\n<p>JavaScript が有効なブラウザを使っているユーザーに対しては、&quot;1 つ追加&quot; のリンクが提供され、<code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> 引数の結果提供されるインラインに加えていくつでもインラインを追加することができます。</p>\n<p>The dynamic link will not appear if the number of currently displayed forms\nexceeds <code class=\"docutils literal notranslate\"><span class=\"pre\">max_num</span></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\"><span class=\"pre\">InlineModelAdmin.get_extra()</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">max_num</span></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.2/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\"><span class=\"pre\">InlineModelAdmin.get_max_num()</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">min_num</span></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.2/ref/forms/models/#django.forms.models.modelformset_factory\" title=\"django.forms.models.modelformset_factory\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modelformset_factory()</span></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\"><span class=\"pre\">InlineModelAdmin.get_min_num()</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">raw_id_fields</span></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\"><span class=\"pre\">ForeignKey</span></code> のフィールドに対して Django の admin はセレクトボックスのインターフェース (<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select&gt;</span></code>) を使用します。ドロップダウン内に表示する関係インスタンスをすべて選択するオーバーヘッドから逃れたいこともあるでしょう。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_fields</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> に対する <code class=\"docutils literal notranslate\"><span class=\"pre\">Input</span></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=\"w\"> </span><span class=\"nc\">BookInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Book</span>\n    <span class=\"n\">raw_id_fields</span> <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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">template</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">verbose_name</span></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\"><span class=\"pre\">Meta</span></code> クラス内で見つかった <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose_name</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">verbose_name_plural</span></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\"><span class=\"pre\">Meta</span></code> クラス内で見つかった <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose_name_plural</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">can_delete</span></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\"><span class=\"pre\">True</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">show_change_link</span></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\"><span class=\"pre\">False</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_formset</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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>Returns a <a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#django.forms.models.BaseInlineFormSet\" title=\"django.forms.models.BaseInlineFormSet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BaseInlineFormSet</span></code></a> class for use in\nadmin add/change views. <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> is the parent object being edited or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> when adding a new parent. See the example for\n<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\"><span class=\"pre\">ModelAdmin.get_formsets_with_inlines</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_extra</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">InlineModelAdmin.extra</span></code></a> 属性を返します。</p>\n<p>プログラムに従って追加インラインフォームの数を決めたい場合、このメソッドをオーバーライドしてください。例えば、モデルインスタンス (キーワード引数の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></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=\"w\"> </span><span class=\"nc\">BinaryTreeAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">BinaryTree</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_extra</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">extra</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n        <span class=\"k\">if</span> <span class=\"n\">obj</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">extra</span> <span class=\"o\">-</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">binarytree_set</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">extra</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.InlineModelAdmin.get_max_num\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_max_num</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">InlineModelAdmin.max_num</span></code></a> 属性を返します。</p>\n<p>プログラムに従ってインラインフォームの最大数を決めたい場合、このメソッドをオーバーライドしてください。例えば、モデルインスタンス (キーワード引数の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></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=\"w\"> </span><span class=\"nc\">BinaryTreeAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">BinaryTree</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_max_num</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">max_num</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n        <span class=\"k\">if</span> <span class=\"n\">obj</span> <span class=\"ow\">and</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">parent</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">max_num</span> <span class=\"o\">-</span> <span class=\"mi\">5</span>\n        <span class=\"k\">return</span> <span class=\"n\">max_num</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.InlineModelAdmin.get_min_num\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_min_num</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">InlineModelAdmin.min_num</span></code></a> 属性を返します。</p>\n<p>プログラムに従ってインラインフォームの最小数を決めたい場合、このメソッドをオーバーライドしてください。例えば、モデルインスタンス (キーワード引数の <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_add_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span></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\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> は編集される親オブジェクトか、新規追加の場合には <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> となります。</p>\n<aside class=\"version-note version-changed\" data-version=\"2.1\">\n<p class=\"version-note-title\">Changed in Django 2.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> argument was added. During the deprecation period, it may\nalso be <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> if third-party calls to <code class=\"docutils literal notranslate\"><span class=\"pre\">has_add_permission()</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_change_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></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\"><span class=\"pre\">InlineModelAdmin.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_delete_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">True</span></code> を、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。<code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> は編集される親オブジェクトです。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> argument passed to <code class=\"docutils literal notranslate\"><span class=\"pre\">InlineModelAdmin</span></code> methods is the parent\nobject being edited or <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> when adding a new parent.</p>\n</aside>\n</section>\n<section id=\"working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model\">\n<h3>同じ親モデルへの複数の外部キーを持つモデルを扱う<a class=\"heading-anchor\" href=\"#working-with-a-model-with-two-or-more-foreign-keys-to-the-same-parent-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>同じモデルに対する複数の外部キーを持つこともあり得ます。例として以下のモデルを見てみましょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Friendship</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">to_person</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;friends&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">from_person</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><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\"><span class=\"pre\">Person</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Friendship</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FriendshipInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Friendship</span>\n    <span class=\"n\">fk_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;to_person&quot;</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">FriendshipInline</span><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.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>. Depending on your <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code>\ndefinition, each many-to-many field in your model will be represented by a\nstandard HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;</span></code>, a horizontal or vertical filter, or a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">raw_id_admin</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Group</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    <span class=\"n\">members</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><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\"><span class=\"pre\">InlineModelAdmin</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MembershipInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">through</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">MembershipInline</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">GroupAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">MembershipInline</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n    <span class=\"n\">exclude</span> <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\"><span class=\"pre\">MembershipInline</span></code> class references <code class=\"docutils literal notranslate\"><span class=\"pre\">Group.members.through</span></code>.\nThe <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></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\"><span class=\"pre\">GroupAdmin</span></code> must manually exclude the <code class=\"docutils literal notranslate\"><span class=\"pre\">members</span></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\"><span class=\"pre\">Group</span></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.2/ref/signals/#django.db.models.signals.m2m_changed\" title=\"django.db.models.signals.m2m_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">m2m_changed</span></code></a> signals aren't triggered. This\nis because as far as the admin is concerned, <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></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\"><span class=\"pre\">InlineModelAdmin</span></code> is exactly the same as any\nother. You can customize the appearance using any of the normal\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">through</span></code> argument to a\n<a class=\"reference internal\" href=\"/ja/2.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Group</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    <span class=\"n\">members</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;Membership&#39;</span><span class=\"p\">)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Membership</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">person</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Group</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">date_joined</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">invite_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><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\"><span class=\"pre\">Membership</span></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=\"w\"> </span><span class=\"nc\">MembershipInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">TabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Membership</span>\n    <span class=\"n\">extra</span> <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\"><span class=\"pre\">InlineModelAdmin</span></code> values for the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Membership</span></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\"><span class=\"pre\">InlineModelAdmin</span></code> classes.</p>\n<p>Now create admin views for the <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">Group</span></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=\"w\"> </span><span class=\"nc\">PersonAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">MembershipInline</span><span class=\"p\">,)</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">GroupAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">MembershipInline</span><span class=\"p\">,)</span>\n</code></pre></div>\n<p>Finally, register your <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">Group</span></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><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">PersonAdmin</span><span class=\"p\">)</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Group</span><span class=\"p\">,</span> <span class=\"n\">GroupAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Now your admin site is set up to edit <code class=\"docutils literal notranslate\"><span class=\"pre\">Membership</span></code> objects inline from\neither the <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> or the <code class=\"docutils literal notranslate\"><span class=\"pre\">Group</span></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=\"w\"> </span><span class=\"nn\">django.contrib.contenttypes.fields</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">GenericForeignKey</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Image</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">image</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ImageField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s2\">&quot;images&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><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=\"w\"> </span><span class=\"nc\">Product</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><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\"><span class=\"pre\">Image</span></code> instance on the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Product</span></code>, add/change views you can use\n<a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericTabularInline\" title=\"django.contrib.contenttypes.admin.GenericTabularInline\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericTabularInline</span></code></a>\nor <a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericStackedInline\" title=\"django.contrib.contenttypes.admin.GenericStackedInline\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericStackedInline</span></code></a> (both\nsubclasses of <a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericInlineModelAdmin\" title=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GenericInlineModelAdmin</span></code></a>)\nprovided by <a class=\"reference internal\" href=\"/ja/2.2/ref/contrib/contenttypes/#module-django.contrib.contenttypes.admin\" title=\"django.contrib.contenttypes.admin\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">admin</span></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\"><span class=\"pre\">admin.py</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.contenttypes.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">GenericTabularInline</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Image</span><span class=\"p\">,</span> <span class=\"n\">Product</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ImageInline</span><span class=\"p\">(</span><span class=\"n\">GenericTabularInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Image</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ProductAdmin</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">ImageInline</span><span class=\"p\">,</span>\n    <span class=\"p\">]</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">Product</span><span class=\"p\">,</span> <span class=\"n\">ProductAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>See the <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">contrib/admin/templates/admin</span></code>\ndirectory.</p>\n<p>In order to override one or more of them, first create an <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code> directory\nin your project's <code class=\"docutils literal notranslate\"><span class=\"pre\">templates</span></code> directory. This can be any of the directories\nyou specified in the <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DIRS</span></code></a> option of the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code> backend in the <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> setting. If you have\ncustomized the <code class=\"docutils literal notranslate\"><span class=\"pre\">'loaders'</span></code> option, be sure\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.template.loaders.filesystem.Loader'</span></code> appears before\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.template.loaders.app_directories.Loader'</span></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\"><span class=\"pre\">django.contrib.admin</span></code></a>.</p>\n<p>Within this <code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></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\"><span class=\"pre\">django/contrib/admin/templates/admin</span></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\"><span class=\"pre\">my_app</span></code>, we would copy\n<code class=\"docutils literal notranslate\"><span class=\"pre\">contrib/admin/templates/admin/change_list.html</span></code> to the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">templates/admin/my_app/</span></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\"><span class=\"pre\">templates/admin/my_app/page</span></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\"><span class=\"pre\">History</span></code> tool for the <code class=\"docutils literal notranslate\"><span class=\"pre\">Page</span></code> model. After looking at <code class=\"docutils literal notranslate\"><span class=\"pre\">change_form.html</span></code>\nwe determine that we only need to override the <code class=\"docutils literal notranslate\"><span class=\"pre\">object-tools-items</span></code> block.\nTherefore here is our new <code class=\"docutils literal notranslate\"><span class=\"pre\">change_form.html</span></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\"><span class=\"pre\">templates/admin/my_app</span></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\"><span class=\"pre\">contrib/admin/templates/admin</span></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\"><span class=\"pre\">actions.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">app_index.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">change_form.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">change_form_object_tools.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">change_list.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">change_list_object_tools.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">change_list_results.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">date_hierarchy.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">delete_confirmation.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">object_history.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pagination.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">popup_response.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">prepopulated_fields_js.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">search_form.html</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">submit_line.html</span></code></p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"2.1\">\n<p class=\"version-note-title\">Changed in Django 2.1</p><p>The ability to override the <code class=\"docutils literal notranslate\"><span class=\"pre\">actions.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">change_form_object_tools.html</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">change_list_object_tools.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">change_list_results.html</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">date_hierarchy.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">pagination.html</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">prepopulated_fields_js.html</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">search_form.html</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">submit_line.html</span></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\"><span class=\"pre\">templates/admin</span></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\"><span class=\"pre\">change_list_results.html</span></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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">AdminSite.index_template</span></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\"><span class=\"pre\">AdminSite.login_template</span></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\"><span class=\"pre\">AdminSite.logout_template</span></code></a> properties.</p>\n</section>\n</section>\n<section id=\"adminsite-objects\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AdminSite</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'admin'</span></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\"><span class=\"pre\">django.contrib.admin.sites.AdminSite</span></code>; by default, an instance of\nthis class is created as <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin.site</span></code> and you can\nregister your models and <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">AdminSite</span></code>, you can provide\na unique instance name using the <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></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\"><span class=\"pre\">admin</span></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\"><span class=\"pre\">AdminSite</span></code></a> class.</p>\n</dd></dl>\n\n<section id=\"adminsite-attributes\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">site_header</span></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\"><span class=\"pre\">&lt;h1&gt;</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">site_title</span></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\"><span class=\"pre\">&lt;title&gt;</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">site_url</span></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\"><span class=\"pre\">site_url</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code>. Set it to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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\"><span class=\"pre\">each_context()</span></code></a> method checks if\nthe current request has <code class=\"docutils literal notranslate\"><span class=\"pre\">request.META['SCRIPT_NAME']</span></code> set and uses that\nvalue if <code class=\"docutils literal notranslate\"><span class=\"pre\">site_url</span></code> isn't set to something other than <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">index_title</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">index_template</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">app_index_template</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">empty_value_display</span></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\"><span class=\"pre\">ModelAdmin</span></code> basis and on a custom field within a <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> by\nsetting an <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_value_display</span></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\"><span class=\"pre\">ModelAdmin.empty_value_display</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">login_template</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">login_form</span></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.2/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">logout_template</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">password_change_template</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">password_change_done_template</span></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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">each_context</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">site_header</span></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\"><span class=\"pre\">AdminSite.site_header</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site_title</span></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\"><span class=\"pre\">AdminSite.site_title</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">site_url</span></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\"><span class=\"pre\">AdminSite.site_url</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">has_permission</span></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\"><span class=\"pre\">AdminSite.has_permission()</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">available_apps</span></code>: a list of applications from the <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">app_label</span></code>: the application label</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">app_url</span></code>: the URL of the application index in the admin</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">has_module_perms</span></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\"><span class=\"pre\">models</span></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\"><span class=\"pre\">object_name</span></code>: class name of the model</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>: plural name of the model</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">perms</span></code>: a <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> tracking <code class=\"docutils literal notranslate\"><span class=\"pre\">add</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">change</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">delete</span></code>, and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">view</span></code> permissions</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">admin_url</span></code>: admin changelist URL for the model</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">add_url</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">has_permission</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></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\"><span class=\"pre\">True</span></code> if the user for the given <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpRequest</span></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.2/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\"><span class=\"pre\">User.is_active</span></code></a> and\n<a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">User.is_staff</span></code></a> to be\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></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\"><span class=\"pre\">AdminSite.</span></span><span class=\"sig-name descname\"><span class=\"pre\">register</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_or_iterable</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">admin_class</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></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\"><span class=\"pre\">admin_class</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">admin_class</span></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\"><span class=\"pre\">ModelAdmin</span></code></a> (the default admin options). If\nkeyword arguments are given -- e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">list_display</span></code> -- they'll be applied\nas options to the admin class.</p>\n<p>Raises <a class=\"reference internal\" href=\"/ja/2.2/ref/exceptions/#django.core.exceptions.ImproperlyConfigured\" title=\"django.core.exceptions.ImproperlyConfigured\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImproperlyConfigured</span></code></a> if a model is\nabstract. and <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin.sites.AlreadyRegistered</span></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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">AdminSite</span></code>\ninstance into your URLconf. Do this by pointing a given URL at the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite.urls</span></code> method. It is not necessary to use\n<a class=\"reference internal\" href=\"/ja/2.2/ref/urls/#django.urls.include\" title=\"django.urls.include\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">include()</span></code></a>.</p>\n<p>In this example, we register the default <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code> instance\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.admin.site</span></code> at the URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">AdminSite</span></code> and override or add anything you like. Then, simply\ncreate an instance of your <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code> subclass (the same way you'd\ninstantiate any other Python class) and register your models and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> subclasses with it instead of with the default site. Finally,\nupdate <code class=\"file docutils literal notranslate\"><span class=\"pre\">myproject/urls.py</span></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\"><span class=\"pre\">AdminSite</span></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=\"w\"> </span><span class=\"nn\">django.contrib.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AdminSite</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyModel</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyAdminSite</span><span class=\"p\">(</span><span class=\"n\">AdminSite</span><span class=\"p\">):</span>\n    <span class=\"n\">site_header</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Monty Python administration&#39;</span>\n\n<span class=\"n\">admin_site</span> <span class=\"o\">=</span> <span class=\"n\">MyAdminSite</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;myadmin&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">admin_site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">MyModel</span><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=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin_site</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;myadmin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin_site</span><span class=\"o\">.</span><span class=\"n\">urls</span><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\"><span class=\"pre\">admin</span></code> modules when using your\nown <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code> instance since you will likely be importing all the per-app\n<code class=\"docutils literal notranslate\"><span class=\"pre\">admin</span></code> modules in your <code class=\"docutils literal notranslate\"><span class=\"pre\">myproject.admin</span></code> module. This means you need to\nput <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin.apps.SimpleAdminConfig'</span></code> instead of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.admin'</span></code> in your <a class=\"reference internal\" href=\"/ja/2.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></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\">\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\"><span class=\"pre\">django.contrib.admin.site</span></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\"><span class=\"pre\">default_site</span></code></a> attribute of a custom <code class=\"docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code>\nto the dotted import path of either a <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></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=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyAdminSite</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">AdminSite</span><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=\"w\"> </span><span class=\"nn\">django.contrib.admin.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AdminConfig</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyAdminConfig</span><span class=\"p\">(</span><span class=\"n\">AdminConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">default_site</span> <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><span class=\"n\">INSTALLED_APPS</span> <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\"><span class=\"pre\">AdminSite</span></code> and\nroot each one at a different URL.</p>\n<p>In this example, the URLs <code class=\"docutils literal notranslate\"><span class=\"pre\">/basic-admin/</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">/advanced-admin/</span></code> feature\nseparate versions of the admin site -- using the <code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code> instances\n<code class=\"docutils literal notranslate\"><span class=\"pre\">myproject.admin.basic_site</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">myproject.admin.advanced_site</span></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=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myproject.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">advanced_site</span><span class=\"p\">,</span> <span class=\"n\">basic_site</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;basic-admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">basic_site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;advanced-admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">advanced_site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">get_urls()</span></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\"><span class=\"pre\">get_urls()</span></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\"><span class=\"pre\">request.current_app</span></code> before rendering the\ntemplate. It should be set to either <code class=\"docutils literal notranslate\"><span class=\"pre\">self.name</span></code> if your view is on an\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AdminSite</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">self.admin_site.name</span></code> if your view is on a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></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=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span> <span class=\"k\">as</span> <span class=\"n\">auth_views</span>\n\n<span class=\"n\">path</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;admin/password_reset/&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">PasswordResetView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;admin_password_reset&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\n<span class=\"n\">path</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;admin/password_reset/done/&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">PasswordResetDoneView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_done&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\n<span class=\"n\">path</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;reset/&lt;uidb64&gt;/&lt;token&gt;/&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">PasswordResetConfirmView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span>\n    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;password_reset_confirm&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">),</span>\n<span class=\"n\">path</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;reset/done/&#39;</span><span class=\"p\">,</span>\n    <span class=\"n\">auth_views</span><span class=\"o\">.</span><span class=\"n\">PasswordResetCompleteView</span><span class=\"o\">.</span><span class=\"n\">as_view</span><span class=\"p\">(),</span>\n    <span class=\"n\">name</span><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\"><span class=\"pre\">admin/</span></code> and requires that you put\nthe URLs starting with <code class=\"docutils literal notranslate\"><span class=\"pre\">^admin/</span></code> before the line that includes the admin app\nitself).</p>\n<p>The presence of the <code class=\"docutils literal notranslate\"><span class=\"pre\">admin_password_reset</span></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\"><span class=\"pre\">LogEntry</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">LogEntry</span></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\"><span class=\"pre\">LogEntry</span></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\"><span class=\"pre\">LogEntry</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">action_time</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">user</span></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.2/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTH_USER_MODEL</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">content_type</span></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.2/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ContentType</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">object_id</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">object_repr</span></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\"><span class=\"pre\">repr()</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">action_flag</span></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\"><span class=\"pre\">ADDITION</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">CHANGE</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">DELETION</span></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=\"w\"> </span><span class=\"nn\">django.contrib.admin.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ADDITION</span><span class=\"p\">,</span> <span class=\"n\">LogEntry</span>\n\n<span class=\"n\">LogEntry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">action_flag</span><span class=\"o\">=</span><span class=\"n\">ADDITION</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.models.LogEntry.change_message\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">change_message</span></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\"><span class=\"pre\">get_change_message()</span></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\"><span class=\"pre\">get_change_message()</span></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\"><span class=\"pre\">LogEntry</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_edited_object</span></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\"><span class=\"pre\">LogEntry.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_change_message</span></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\"><span class=\"pre\">change_message</span></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\"><span class=\"pre\">AdminSite</span></code></a> is deployed, the views provided by that site are\naccessible using Django's <a class=\"reference internal\" href=\"/ja/2.2/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\"><span class=\"pre\">AdminSite</span></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\"><span class=\"pre\">index</span></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\"><span class=\"pre\">login</span></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\"><span class=\"pre\">logout</span></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\"><span class=\"pre\">password_change</span></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\"><span class=\"pre\">password_change_done</span></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\"><span class=\"pre\">jsi18n</span></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\"><span class=\"pre\">app_list</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></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\"><span class=\"pre\">view_on_site</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">content_type_id</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">object_id</span></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\"><span class=\"pre\">ModelAdmin</span></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\"><span class=\"pre\">{{</span> <span class=\"pre\">app_label</span> <span class=\"pre\">}}_{{</span> <span class=\"pre\">model_name</span> <span class=\"pre\">}}_changelist</span></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\"><span class=\"pre\">{{</span> <span class=\"pre\">app_label</span> <span class=\"pre\">}}_{{</span> <span class=\"pre\">model_name</span> <span class=\"pre\">}}_add</span></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\"><span class=\"pre\">{{</span> <span class=\"pre\">app_label</span> <span class=\"pre\">}}_{{</span> <span class=\"pre\">model_name</span> <span class=\"pre\">}}_history</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">object_id</span></code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>削除</p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">app_label</span> <span class=\"pre\">}}_{{</span> <span class=\"pre\">model_name</span> <span class=\"pre\">}}_delete</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">object_id</span></code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p>変更</p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">app_label</span> <span class=\"pre\">}}_{{</span> <span class=\"pre\">model_name</span> <span class=\"pre\">}}_change</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">object_id</span></code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">UserAdmin</span></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\"><span class=\"pre\">auth_user_password_change</span></code></p></td>\n<td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">user_id</span></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\"><span class=\"pre\">admin</span></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\"><span class=\"pre\">Choice</span></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=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Choice</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">change_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin:polls_choice_change&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">id</span><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\"><span class=\"pre\">poll.Choice</span></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\"><span class=\"pre\">current_app</span></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\"><span class=\"pre\">custom</span></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><span class=\"n\">change_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin:polls_choice_change&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,),</span> <span class=\"n\">current_app</span><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.2/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\"><span class=\"pre\">admin_urlname</span></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\"><span class=\"pre\">ModelAdmin</span></code></a> instances described above. The <code class=\"docutils literal notranslate\"><span class=\"pre\">opts</span></code> variable can be any\nobject which has an <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></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\"><span class=\"pre\">staff_member_required</span></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\"><span class=\"pre\">staff_member_required</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">redirect_field_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'next'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">login_url</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'admin:login'</span></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\"><span class=\"pre\">User.is_staff=True</span></code>), and\nis active (<code class=\"docutils literal notranslate\"><span class=\"pre\">User.is_active=True</span></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\"><span class=\"pre\">login_url</span></code> parameter, with the originally requested path in a query\nstring variable specified by <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_field_name</span></code>. For example:\n<code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/login/?next=/admin/polls/question/3/</span></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=\"w\"> </span><span class=\"nn\">django.contrib.admin.views.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">staff_member_required</span>\n\n<span class=\"nd\">@staff_member_required</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><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.2/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/ja/2.2/ref/contrib/"}],"prev":{"docname":"ref/contrib/index","title":"contrib packages","url":"/ja/2.2/ref/contrib/"},"next":{"docname":"ref/contrib/admin/actions","title":"Admin actions","url":"/ja/2.2/ref/contrib/admin/actions/"},"formats":{"html":"/ja/2.2/ref/contrib/admin/","markdown":"/ja/2.2/ref/contrib/admin.md","json":"/ja/2.2/ref/contrib/admin.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/ref/contrib/admin/index.txt","official":"https://docs.djangoproject.com/ja/2.2/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"]}