{"title":"フォームを使う","version":"5.1","locale":"ja","docname":"topics/forms/index","url":"/ja/5.1/topics/forms/","canonical":"https://djangodocs.dev/ja/5.1/topics/forms/","summary":"このドキュメントについて このドキュメントでは、Web フォームの基本と、それらを Django で扱う方法を紹介しています。より詳しく知りたいときは、フォーム API の特定の領域、 フォーム API 、 フォーム フィールド または フォームとフィールドのバリデーション をご覧ください。…","html":"<h1>フォームを使う<a class=\"heading-anchor\" href=\"#working-with-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition-about-this-document admonition\">\n<p class=\"admonition-title\">このドキュメントについて</p>\n<p>このドキュメントでは、Web フォームの基本と、それらを Django で扱う方法を紹介しています。より詳しく知りたいときは、フォーム API の特定の領域、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> 、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/\"><span class=\"doc\">フォーム フィールド</span></a> または <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/validation/\"><span class=\"doc\">フォームとフィールドのバリデーション</span></a> をご覧ください。</p>\n</aside>\n<p>あなたの作ろうとしているウェブサイトやアプリケーションが、単にコンテンツを公開したり訪問者からのインプットを受け付けないサイトでない限り、フォームを理解し利用する必要があります。</p>\n<p>Django はフォームの構築を助けるさまざまなツールやライブラリを提供しています。これらを利用することで、サイト訪問者からデータの入力を受け入れ、そのデータを処理したあと、入力に応じたレスポンスを返すことができるようになります。</p>\n<section id=\"html-forms\">\n<h2>HTML フォーム<a class=\"heading-anchor\" href=\"#html-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>HTMLでは、フォームは <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;...&lt;/form&gt;</span></code> 内の要素の集まりで、訪問者によるテキスト入力、オプション選択、オブジェクトやコントロールの操作などを可能にし、これらの情報をサーバーに送り返します。</p>\n<p>いくつかのフォームインターフェイスの要素、例えばテキストインプットやチェックボックスは、とてもシンプルで HTML 自体に組み込まれています。そのほかに、とても複雑な要素もあります; Date ピッカーをポップアップさせたり、スライダーを動かしコントロールを操作するようなインターフェイスは、一般的に HTML フォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> 要素だけではなく JavaScriptと CSS を使って実現されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> 要素に加えて、フォームには次の 2 つのことを指定しなければなりません。</p>\n<ul class=\"simple\">\n<li><p><em>どこで</em>: ユーザーのインプットに対応するデータの宛先となるべきURL</p></li>\n<li><p><em>どのように</em>: データが返される方法として使われる HTTP メソッド</p></li>\n</ul>\n<p>例として、Django admin にあるいくつかの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> 要素のログインフォームを見てみましょう。ユーザー名のための <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;text&quot;</span></code> 、パスワードのための <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;password&quot;</span></code>、そしてログインボタンのための <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;submit&quot;</span></code> があります。他にも Django が次の行動を決めるために使われる、ユーザーからは見えない隠しテキストフィールドもあります。</p>\n<p>また、フォームのデータが <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">action</span></code> 属性によって指定された URL - <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code> - に送信されるべきこと、そして <code class=\"docutils literal notranslate\"><span class=\"pre\">method</span></code> 属性によって指定されたHTTP メカニズム - <code class=\"docutils literal notranslate\"><span class=\"pre\">post</span></code> - を使って送信されるべきこともブラウザーに伝えています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;submit&quot;</span> <span class=\"pre\">value=&quot;Log</span> <span class=\"pre\">in&quot;&gt;</span></code> 要素がトリガーされると、データは <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code> に返されます。</p>\n<section id=\"get-and-post\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code><a class=\"heading-anchor\" href=\"#get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>フォームを扱うときに使用する HTTP メソッドは、<code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> だけです。</p>\n<p>Django のログインフォームは、<code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> メソッドを使って返されます。この中で、ブラウザがフォームデータをひとまとめにし、送信用にエンコードし、サーバーに送った上で、サーバーからの応答を受け取ります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> は、対照的に、送信されたデータを文字列に添付し、URL を構成するために使います。URL はデータが送られるべきアドレスのほか、データキーと値を含みます。実際に、Django ドキュメンテーションで何かを検索してみると、フォーム <code class=\"docutils literal notranslate\"><span class=\"pre\">https://docs.djangoproject.com/search/?q=forms&amp;release=1</span></code> といった URL が生成されるのが分かるでしょう。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> は、一般的には異なる目的に使われます。</p>\n<p>システムの状態を変更する可能性のあるあらゆるリクエスト（例えばデータベース内での変更を行うリクエスト）では <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> を使うべきです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> は、システムの状態に影響を与えないリクエストにのみ使われるべきです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> はパスワードフォームには不適です。なぜならば、パスワードが URL 内はもちろんのこと、ブラウザーの履歴やサーバーログといったプレーンテキストの中すべてに表示されるからです。大量のデータや、画像のようなバイナリデータにも不適です。<code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> リクエストを admin フォームのために使ような Web アプリケーションは、セキュリティ上のリスクです: 攻撃者がシステムの繊細な部分へのアクセス権を得るために、フォームのリクエストを偽装することは簡単なのです。Django の <a class=\"reference internal\" href=\"/ja/5.1/ref/csrf/\"><span class=\"doc\">CSRF 保護</span></a> のような他の保護と組み合わされた <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> は、アクセスをより適切にコントロールできるようにします。</p>\n<p>一方で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> は Web 検索フォームのようなものに適しています。なぜならば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> リクエストを表現している URL は、簡単にブックマーク、共有、再送信ができるからです。</p>\n</section>\n</section>\n<section id=\"django-s-role-in-forms\">\n<h2>フォームにおける Django の役割<a class=\"heading-anchor\" href=\"#django-s-role-in-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フォームを扱うのは大変な仕事です。Django admin を考えてみると、複数の異なるタイプのデータの、たくさんのアイテムがフォーム内に表示されるために準備を必要とし、HTML としてレンダリングされ、便利なインターフェイスを使って編集され、サーバーに返され、検証され、クリーンアップされます。そして、保存されたり次の処理のために値が渡されたりするのです。</p>\n<p>Django のフォーム機能は、この仕事のうち膨大な部分を簡素化・自動化します。そしてさらに、多くのプログラマーたちが自分自身でコードを書くよりも安全にこれらを実現します。</p>\n<p>Django は、フォームに含まれる仕事のうち、3つのまったく異なるパーツを扱います:</p>\n<ul class=\"simple\">\n<li><p>データがレンダリングできるように準備し、再構成すること</p></li>\n<li><p>データのために HTML フォームを生成すること</p></li>\n<li><p>クライアントから送信されたフォームとデータを受け取り、処理すること</p></li>\n</ul>\n<p>これら全ては手動でコードに書くことが <em>できます</em> が、Django がこれらすべてをうまく処理します。</p>\n</section>\n<section id=\"forms-in-django\">\n<h2>Django におけるフォーム<a class=\"heading-anchor\" href=\"#forms-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>HTML フォームについては簡単に説明しましたが、HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> は必要となる仕掛けの一部分に過ぎません。</p>\n<p>Web アプリケーションの文脈では、 form という言葉は HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>、フォームを提供する Django の <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>、データが送信されたときに返された体系化されたデータ、もしくは端末相互間で動くこれらパーツの集合を意味するでしょう。</p>\n<section id=\"the-django-form-class\">\n<h3>Django の <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> クラス<a class=\"heading-anchor\" href=\"#the-django-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>このコンポーネントシステムの中心は、Django の <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> クラスです。 Django モデルがオブジェクトの論理構造、その動作、そしてその部分が私たちに表現される方法を記述するのと同じように、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> クラスはフォームを記述し、それがどのように動作し表示されるかを決定します。</p>\n<p>モデルクラスのフィールドがデータベースのフィールドにマッピングされるのと同様に、フォームクラスのフィールドはHTMLフォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> 要素にマッピングされます。 (<a class=\"reference internal\" href=\"/ja/5.1/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=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> 経由でHTMLフォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> 要素にマッピングします。これがDjango admin サイトの基盤です。)</p>\n<p>フォームのフィールド自体はクラスです; フォームが送信されたとき、フォームデータを管理し、検証を実施します。 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> と <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> は、非常に異なる種類のデータを扱い、異なることをしなければなりません。</p>\n<p>フォームフィールドは、HTML &quot;ウィジェット”（ユーザーインターフェイスの装置の一つです）としてブラウザ内のユーザーに表されます。それぞれのフィールドタイプは、適切なデフォルトの <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/widgets/\"><span class=\"doc\">ウィジェットクラス</span></a> を持っていますが、これらは必要に応じてオーバーライドできます。</p>\n</section>\n<section id=\"instantiating-processing-and-rendering-forms\">\n<h3>フォームをインスタンス化し、処理し、レンダリングする<a class=\"heading-anchor\" href=\"#instantiating-processing-and-rendering-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django でオブジェクトをレンダリングするとき、通常は次のような手順を取ります。</p>\n<ol class=\"arabic simple\">\n<li><p>ビューの中でオブジェクトを取得する (例えば、データベースからオブジェクトを取得する)</p></li>\n<li><p>オブジェクトをテンプレートのコンテキストに引き渡す</p></li>\n<li><p>テンプレートの変数を使って、オブジェクトを HTML マークアップに展開する</p></li>\n</ol>\n<p>テンプレートの中でフォームをレンダリングすることは、他のあらゆる種類のオブジェクトをレンダリングする働きとほとんど同じですが、いくつかの重要な違いがあります。</p>\n<p>データを持たないモデルインスタンスのケースでは、テンプレート内で何かをするのが有益であることはほとんどありません。一方、未入力のフォームをレンダリングすることはまったく合理的です - これは、ユーザーに入力してほしいときに行うことです。</p>\n<p>したがって、ビューの中でモデルインスタンスを扱うときには、一般的にデータベースから取り出します。フォームを処理するときには、一般的にビューの中でインスタンス化します。</p>\n<p>フォームをインスタンス化するときは、空のままにするか、あらかじめ入力しておくことができます。たとえば:</p>\n<ul class=\"simple\">\n<li><p>保存されたモデルインスタンスからのデータ (編集のための admin フォームの場合のように)</p></li>\n<li><p>他のソースから照合したデータ</p></li>\n<li><p>前回の HTML フォーム送信から受信したデータ</p></li>\n</ul>\n<p>最後のケースが最も興味深いです。なぜならば、それはユーザーが単にウェブサイトを見るだけでなく、情報を送り返すことができるようにするからです。</p>\n</section>\n</section>\n<section id=\"building-a-form\">\n<h2>フォームを作る<a class=\"heading-anchor\" href=\"#building-a-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-work-that-needs-to-be-done\">\n<h3>すべきこと<a class=\"heading-anchor\" href=\"#the-work-that-needs-to-be-done\"><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=\"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=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">current_name</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;OK&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> メソッドを使って、URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/your-name/</span></code> にフォームデータを返すよう、ブラウザに通知します。テキストフィールド、&quot;Your name:&quot; ラベル、そして &quot;OK&quot; ボタンを表示します。テンプレートのコンテキストが <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code> 変数を含む場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code> フィールドをあらかじめ入力するために使われます。</p>\n<p>HTML フォームを含むテンプレートをレンダリングし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code> フィールドを適切に提供するビューが必要になります。</p>\n<p>フォームが送信されるとき、サーバーに送信される <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> リクエストは、フォームのデータを含みます。</p>\n<p>今度は、その <code class=\"docutils literal notranslate\"><span class=\"pre\">/your-name/</span></code> URL と対応するビューも必要です。このURLは、リクエストの中から適切なキー/値のペアを見つけ、それらを処理します。</p>\n<p>これは非常にシンプルなフォームです。実践では、1つのフォームが数十または数百のフィールドを含んでいて、しかも多くがあらかじめ入力されている必要があるかもしれません。また、操作が完了する前にユーザーが何回も編集と送信を繰り返すことも考えられます。</p>\n<p>フォームが送信される前でも、ブラウザ上で多少の検証が必要となるかもしれません; ユーザーがカレンダーから日付を選ぶといったような、より複雑なフィールドを使うこともあるでしょう。</p>\n<p>Django にこれらを任せると、比較的簡単に実現させることができます。</p>\n</section>\n<section id=\"building-a-form-in-django\">\n<h3>Django でフォームを作る<a class=\"heading-anchor\" href=\"#building-a-form-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-form-class\">\n<h4><a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> クラス<a class=\"heading-anchor\" href=\"#the-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>HTML フォームをどのように見せたいかは、すでに分かっています。Django で実現するためのスタート地点は以下の通りです:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">NameForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">your_name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</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></figure>\n<p>これは、単一のフィールド (<code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>) で <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> クラスを定義します。人間が読みやすいラベルをフィールドに適用してあり、このラベルはレンダリングされたときに <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> の中に表示されます (このケースでは、仮にラベルの指定を省略したとしても、実際には指定した <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.Field.label\" title=\"django.forms.Field.label\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label</span></code></a> が自動的に生成されるラベルと同じではありますが)。</p>\n<p>フィールドの最大文字数は <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.CharField.max_length\" title=\"django.forms.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a> によって定義されます。これは2つのことをします。HTML の <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">maxlength=&quot;100&quot;</span></code> を配置します (そしてブラウザはユーザーがこの数値以上の文字数をそもそも入力できないようにするはずです). これはさらに、Django がブラウザからフォームを受け取ったときにデータの文字数を検証することも意味します。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> インスタンスは、すべてのフィールドに対して検証ルーチンを実行する <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> メソッドを持ちます。このメソッドが呼ばれたとき、全てのフィールドが有効なデータを持っていれば、メソッドは次のように動作します。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返します</p></li>\n<li><p>フォームのデータを <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.cleaned_data\" title=\"django.forms.Form.cleaned_data\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code></a> 属性に配置します</p></li>\n</ul>\n<p>フォーム全体は、初めてレンダリングされたとき、次のような見た目になります。</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=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">maxlength</span><span class=\"o\">=</span><span class=\"s\">&quot;100&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> や送信ボタンを含んで <strong>いない</strong> ことに注意してください。私たち自身が、これらをテンプレート内で提供する必要があります。</p>\n</section>\n<section id=\"the-view\">\n<span id=\"using-a-form-in-a-view\"></span><h4>ビュー<a class=\"heading-anchor\" href=\"#the-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django ウェブサイトに送り返されたフォームで他は、ビューによって処理されます。通常、ビューはフォームを発行したビューと同じものです。これは、いくつかの同じロジックを再利用することを可能にします。</p>\n<p>フォームを処理するためには、フォームを発行したいと考えているURLに対して、ビューの中でインスタンス化する必要があります。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NameForm</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_name</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># if this is a POST request we need to process the form data</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># create a form instance and populate it with data from the request:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">NameForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"c1\"># check whether it&#39;s valid:</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># process the data in form.cleaned_data as required</span>\n            <span class=\"c1\"># ...</span>\n            <span class=\"c1\"># redirect to a new URL:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/thanks/&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># if a GET (or any other method) we&#39;ll create a blank form</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">NameForm</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;name.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n</code></pre></figure>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> とともにビューにたどり着いた場合は、空のフォームインスタンスを生成し、レンダリングのためテンプレートの context に配置します。これは、初めて URL を訪れたときに起こると考えられることです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> リクエストを使ってフォームが送信された場合は、ビューはもう一度フォームインスタンスを生成し、リクエストからのデータを格納します: <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span> <span class=\"pre\">=</span> <span class=\"pre\">NameForm(request.POST)</span></code> これは &quot;フォームにデータをバインドする&quot; と呼ばれます (そして &quot;バインドされた&quot; フォームとなりました)。</p>\n<p>フォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> メソッドを呼び出します。もし <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> でない場合、フォームをとともにテンプレートに戻ります。この時、フォームはもはや空 (<em>バインドされていない</em>) ではないため、HTMLフォームには前回送信されたデータが入力され、必要に応じて編集や修正が可能になります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> 属性で検証済みのフォームデータを見出すことができます。このデータは、データベースを更新するために使ったり、次に進むための HTTP リダイレクトをブラウザに送る前に、何らかの処理をできます。</p>\n</section>\n<section id=\"the-template\">\n<span id=\"topics-forms-index-basic-form-template\"></span><h4>テンプレート<a class=\"heading-anchor\" href=\"#the-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">name.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=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;Submit&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>すべてのフォームのフィールドと属性は、Django のテンプレート言語によって、この <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form</span> <span class=\"pre\">}}</span></code> から HTML マークアップに展開されます。</p>\n<aside class=\"admonition-forms-and-cross-site-request-forgery-protection admonition\">\n<p class=\"admonition-title\">フォームとクロスサイトリクエストフォージェリ保護</p>\n<p>Djangoには、使いやすい <a class=\"reference internal\" href=\"/ja/5.1/ref/csrf/\"><span class=\"doc\">クロスサイトリクエストフォージェリ対策</span></a> が含まれています。CSRF保護が有効な状態で <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> 経由でフォームを送信する場合、先の例のように <a class=\"reference internal\" href=\"/ja/5.1/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> テンプレートタグを使用する必要があります。しかし、CSRF保護はテンプレート内のフォームに直接結びついているわけではないため、このタグはこのドキュメントの以下の例からは省略されます。</p>\n</aside>\n<aside class=\"admonition-html5-input-types-and-browser-validation admonition\">\n<p class=\"admonition-title\">HTML5 の input の種類とブラウザ検証</p>\n<p>フォームが <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.URLField\" title=\"django.forms.URLField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLField</span></code></a> 、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a> もしくは何か数値のフィールドタイプを含むとき、Django は <code class=\"docutils literal notranslate\"><span class=\"pre\">url</span></code>、 <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code>、 <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code> という HTML5 の input タイプを使います。デフォルトでは、ブラウザはこれらのフィールドにブラウザ自身の検証を適用します。これらは Django の検証より厳密かもしれません。このような動作を無効化したいときは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> タグの <code class=\"docutils literal notranslate\"><span class=\"pre\">novalidate</span></code> 属性をセットするか、フィールドで <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> のような異なるウィジェットを指定してください。</p>\n</aside>\n<p>これで、Django の <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> によって記述され, ビューによって処理され、HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> としてレンダリングされた Web フォームを動かせるようになりました。</p>\n<p>始めるために必要なことは以上ですが、フォームフレームワークはまだまだ多くのことを用意しています。上記で説明してきた基本が理解できたら、フォームシステムのほかの機能を理解し、もう少しだけ根本的な仕組みを身につける準備をするようお勧めします。</p>\n</section>\n</section>\n</section>\n<section id=\"more-about-django-form-classes\">\n<h2>Django の <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> クラスの詳細<a class=\"heading-anchor\" href=\"#more-about-django-form-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>すべてのフォームクラスは、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.Form</span></code></a> ないし <a class=\"reference internal\" href=\"/ja/5.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.ModelForm</span></code></a> のサブクラスとして作成されています。<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> も <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> のサブクラスとして考えられます。<code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> は実際には (プライベートの) <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseForm</span></code> クラスを継承していますが、 実装の詳細が重要になることはほとんどありません。</p>\n<aside class=\"admonition-models-and-forms admonition\">\n<p class=\"admonition-title\">モデルとフォーム</p>\n<p>実のところDjango モデルを直接追加または編集するためにフォームを使用する場合、<a class=\"reference internal\" href=\"/ja/5.1/topics/forms/modelforms/\"><span class=\"doc\">ModelForm</span></a> は <code class=\"docutils literal notranslate\"><span class=\"pre\">Model</span></code> クラスから適切なフィールドと属性とともにフォームを作成するため、時間、労力、コードを大幅に節約できます。</p>\n</aside>\n<section id=\"bound-and-unbound-form-instances\">\n<h3>バインドされた (bound) および バインドされていない (unbound) フォームインスタンス<a class=\"heading-anchor\" href=\"#bound-and-unbound-form-instances\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">バインドされた (bound) フォームとバインドされていない (unbound) フォーム</span></a> の区別は重要です:</p>\n<ul class=\"simple\">\n<li><p>バインドされていない (unboundの) フォームには連結したデータがありません。ユーザーにレンダリングするとき、空ないしデフォルト値となります。</p></li>\n<li><p>バインドされた (bound の) フォームは送信されたデータを持っており、したがってデータの有効性を検証できます。無効なバインドされたフォームがレンダリングされている場合、ユーザーがデータを修正できるようにエラーメッセージを表示できます。</p></li>\n</ul>\n<p>フォームの <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.is_bound\" title=\"django.forms.Form.is_bound\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_bound</span></code></a> 属性で、フォームにデータがバインドされている (bound) かどうかを調べることができます。</p>\n</section>\n<section id=\"more-on-fields\">\n<h3>フィールドについて<a class=\"heading-anchor\" href=\"#more-on-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>上記の最低限の例よりも実用的なフォームを考えましょう。個人のウェブサイトで &quot;お問い合わせ&quot; 機能を実装します:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">forms</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\">message</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Textarea</span><span class=\"p\">)</span>\n    <span class=\"n\">sender</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">cc_myself</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>前回の例では、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> の <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code> という単一のフィールドを扱いました。今回は 4 つのフィールドがあります: <code class=\"docutils literal notranslate\"><span class=\"pre\">subject</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">sender</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">cc_myself</span></code> です。 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a>、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.BooleanField\" title=\"django.forms.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a> は利用可能なフィールドタイプのうちの3つに過ぎません。すべての種類は <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/\"><span class=\"doc\">フォーム フィールド</span></a> から確認できます。</p>\n<section id=\"widgets\">\n<h4>ウィジェット<a class=\"heading-anchor\" href=\"#widgets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>各フォームのフィールドは対応する <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/widgets/\"><span class=\"doc\">Widget クラス</span></a> を持ち、順に <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code> のような HTML フォームウィジェットと対応します。</p>\n<p>多くの場合、フィールドは最適なデフォルトウィジェットを持っています。例えば、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> は <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a> ウィジェットを持ち、HTML 内で <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code> を生成します。代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;textarea&gt;</span></code> が必要な場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code> フィールドで行っているように、フォームフィールドを定義する際に適切なウィジェットを指定してください。</p>\n</section>\n<section id=\"field-data\">\n<h4>フィールドデータ<a class=\"heading-anchor\" href=\"#field-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>フォームで送信されたデータが何であっても、<code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> を呼び出して正常に検証されると (そして <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返すと)、検証されたフォームデータは <code class=\"docutils literal notranslate\"><span class=\"pre\">form.cleaned_data</span></code> ディクショナリに格納されます。 このデータは Python の型に適宜変換されています。</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\">request.POST</span></code> から検証前のデータを取り出せますが、検証済みのデータを使うのがよい方法です。</p>\n</aside>\n<p>上の連絡先フォームの例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">cc_myself</span></code> はブール値になります。 同様に、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a> や <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/fields/#django.forms.FloatField\" title=\"django.forms.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a> などのフィールドは、それぞれ値を Python の <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> および <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> に変換します。</p>\n<p>このフォームを処理するビューで、フォームデータを処理する方法は次のとおりです。</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.mail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">send_mail</span>\n\n<span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;message&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">sender</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;sender&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">cc_myself</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;cc_myself&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"n\">recipients</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;info@example.com&quot;</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"n\">cc_myself</span><span class=\"p\">:</span>\n        <span class=\"n\">recipients</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sender</span><span class=\"p\">)</span>\n\n    <span class=\"n\">send_mail</span><span class=\"p\">(</span><span class=\"n\">subject</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"p\">,</span> <span class=\"n\">recipients</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/thanks/&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<aside class=\"admonition admonition-tip\">\n<p class=\"admonition-title\">Tip</p>\n<p>Django からメールを送信するのに詳しくは <a class=\"reference internal\" href=\"/ja/5.1/topics/email/\"><span class=\"doc\">メールを送信する</span></a> をご覧ください。</p>\n</aside>\n<p>一部のフィールドタイプでは、余分な処理が必要になります。 たとえば、フォームを使用してアップロードされたファイルは、別々に処理する必要があります (<code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> ではなく、<code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> から取得できます)。 フォームでファイルのアップロードを処理する方法の詳細については、<a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">アップロードされたファイルをフォームにバインドする</span></a> を参照してください。</p>\n</section>\n</section>\n</section>\n<section id=\"working-with-form-templates\">\n<h2>フォームテンプレートを扱う<a class=\"heading-anchor\" href=\"#working-with-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フォームをテンプレートにするために必要なことは、フォームインスタンスをテンプレートコンテキストに配置することだけです。 なのでフォームがコンテキストで <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> が呼ばれる場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">{{form}}</span></code> はその <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> 要素と <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> 要素を適切にレンダリングします。</p>\n<aside class=\"admonition-additional-form-template-furniture admonition\">\n<p class=\"admonition-title\">フォームテンプレート部品の追加</p>\n<p>フォームの出力に、 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> や送信ボタンを含んで <strong>いない</strong> ことに注意してください。これらはテンプレート内で提供する必要があります。</p>\n</aside>\n<section id=\"reusable-form-templates\">\n<span id=\"id1\"></span><h3>再利用可能なフォームテンプレート<a class=\"heading-anchor\" href=\"#reusable-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>フォームをレンダリングする際の HTML 出力は、テンプレートによって生成されます。適切なテンプレートファイルを作成し、カスタムの <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a> を設定して、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/renderers/#django.forms.renderers.BaseRenderer.form_template_name\" title=\"django.forms.renderers.BaseRenderer.form_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">form_template_name</span></code></a> をサイト全体で使用することで、これを制御できます。また、フォームの <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.template_name\" title=\"django.forms.Form.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">template_name</span></code></a> 属性をオーバーライドして、カスタムテンプレートを使ってフォームをレンダリングしたり、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.render\" title=\"django.forms.Form.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.render()</span></code></a> に直接テンプレート名を渡して、フォームごとにカスタマイズすることもできます。</p>\n<p>以下の例では <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form</span> <span class=\"pre\">}}</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">form_snippet.html</span></code> テンプレートの出力としてレンダリングされます。</p>\n<p>テンプレートで次のようにしてください:</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># In your template:\n<span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n\n# In form_snippet.html:\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>それから <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a> の設定を行います:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms.renderers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplatesSetting</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomFormRenderer</span><span class=\"p\">(</span><span class=\"n\">TemplatesSetting</span><span class=\"p\">):</span>\n    <span class=\"n\">form_template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span>\n\n\n<span class=\"n\">FORM_RENDERER</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;project.settings.CustomFormRenderer&quot;</span>\n</code></pre></figure>\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\">MyForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>... あるいは、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.render\" title=\"django.forms.Form.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.render()</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\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">MyForm</span><span class=\"p\">()</span>\n    <span class=\"n\">rendered_form</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;form_snippet.html&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">rendered_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>詳しくは、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">フォームをHTMLとしてアウトプットする</span></a> を参照してください。</p>\n</section>\n<section id=\"reusable-field-group-templates\">\n<span id=\"id2\"></span><h3>再利用可能なフィールドグループテンプレート<a class=\"heading-anchor\" href=\"#reusable-field-group-templates\"><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=\"5.0\">\n<p class=\"version-note-title\">New in Django 5.0</p></aside>\n<p>各フィールドはフォームの属性として利用可能で、テンプレート内で <code class=\"docutils literal notranslate\"><span class=\"pre\">{{form.name_of_field</span> <span class=\"pre\">}}</span></code> を使用します。フィールドには <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.BoundField.as_field_group\" title=\"django.forms.BoundField.as_field_group\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">as_field_group()</span></code></a> メソッドがあり、フィールドの関連要素、ラベル、ウィジェット、エラー、ヘルプテキストをグループとしてレンダリングします。</p>\n<p>これにより、フィールド要素を必要なレイアウトに配置する汎用テンプレートを書くことができます。たとえば:</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=\"nv\">form.non_field_errors</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.message.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.sender.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Django はデフォルトで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/field.html&quot;</span></code> テンプレートを使います。これはデフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/div.html&quot;</span></code> フォームスタイルで使うように設計されています。</p>\n<p>デフォルトのテンプレートは、プロジェクトレベルの <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a> で <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/renderers/#django.forms.renderers.BaseRenderer.field_template_name\" title=\"django.forms.renderers.BaseRenderer.field_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">field_template_name</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.forms.renderers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplatesSetting</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomFormRenderer</span><span class=\"p\">(</span><span class=\"n\">TemplatesSetting</span><span class=\"p\">):</span>\n    <span class=\"n\">field_template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;field_snippet.html&quot;</span>\n</code></pre></div>\n<p>... または単一のフィールドの場合:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;my_custom_template.html&quot;</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>... <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.BoundField.render\" title=\"django.forms.BoundField.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">BoundField.render()</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\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"p\">[</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">:</span> <span class=\"n\">subject</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;my_custom_template.html&quot;</span><span class=\"p\">)}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"rendering-fields-manually\">\n<h3>フィールドを手動でレンダリングする<a class=\"heading-anchor\" href=\"#rendering-fields-manually\"><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=\"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=\"nv\">form.non_field_errors</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.subject.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Email subject:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.message.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.sender.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.sender.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your email address:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.sender</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>CC yourself?<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.cc_myself</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>完全な <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> 要素は、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.BoundField.label_tag\" title=\"django.forms.BoundField.label_tag\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">label_tag()</span></code></a> を使用して生成することもできます。 例えば次のようにできます:</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=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.label_tag</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<section id=\"rendering-form-error-messages\">\n<h4>フォームのエラーメッセージをレンダリングする<a class=\"heading-anchor\" href=\"#rendering-form-error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>この柔軟性の代償として、少し作業が増えます。これまでは、フォームエラーの表示方法について心配する必要はありませんでした。この例では、各フィールドのエラーと、フォーム全体のエラーを確実に処理しなければなりません。フォームの一番上にある <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span> <span class=\"pre\">}}</span></code> と、各フィールドのエラーのテンプレートルックアップに注目してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.name_of_field.errors</span> <span class=\"pre\">}}</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=\"p\">&lt;</span><span class=\"nt\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Sender is required.<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>このリストには <code class=\"docutils literal notranslate\"><span class=\"pre\">errorlist</span></code> というCSSクラスがあり、見た目をカスタマイズできます。もしエラーの表示をさらにカスタマイズしたい場合は、ループさせることでカスタマイズできます:</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\">if</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">error</span> <span class=\"k\">in</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">strong</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">error</span><span class=\"o\">|</span><span class=\"nf\">escape</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">strong</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>非フィールドエラー(および/または <code class=\"docutils literal notranslate\"><span class=\"pre\">form.as_p()</span></code> のようなヘルパーを使用したときにフォームの先頭にレンダリングされる隠しフィールドエラー)は、フィールド固有のエラーと区別するために <code class=\"docutils literal notranslate\"><span class=\"pre\">nonfield</span></code> という追加のクラスでレンダリングされます。例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span> <span class=\"pre\">}}</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=\"p\">&lt;</span><span class=\"nt\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist nonfield&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Generic validation error<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>エラー、スタイリング、テンプレートでのフォーム属性の扱いについては <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> を参照してください。</p>\n</section>\n</section>\n<section id=\"looping-over-the-form-s-fields\">\n<h3>フォームのフィールドをループする<a class=\"heading-anchor\" href=\"#looping-over-the-form-s-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>フォームフィールドごとに同じ HTML を使用している場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">{％</span> <span class=\"pre\">for</span> <span class=\"pre\">％}</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\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.help_text</span> <span class=\"cp\">%}</span>\n          <span class=\"p\">&lt;</span><span class=\"nt\">p</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;help&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">field.auto_id</span> <span class=\"cp\">}}</span><span class=\"s\">_helptext&quot;</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{{</span> <span class=\"nv\">field.help_text</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span>\n          <span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field</span> <span class=\"pre\">}}</span></code> の有用な属性は次のとおりです:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.errors</span> <span class=\"pre\">}}</span></code></dt><dd><p>このフィールドに対応するバリデーションエラーを含む <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul</span> <span class=\"pre\">class=&quot;errorlist&quot;&gt;</span></code> を出力します。エラーの表示は <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">error</span> <span class=\"pre\">in</span> <span class=\"pre\">field.errors</span> <span class=\"pre\">%}</span></code> ループでカスタマイズできます。この場合、ループ内の各オブジェクトはエラーメッセージを含む文字列となります。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.field</span> <span class=\"pre\">}}</span></code></dt><dd><p><a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a> がラップするフォームクラスの <a class=\"reference internal\" href=\"/ja/5.1/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> 。 <a class=\"reference internal\" href=\"/ja/5.1/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\">{{char_field.field.max_length}}</span></code></p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.help_text</span> <span class=\"pre\">}}</span></code></dt><dd><p>フィールドに関連付けられたヘルプテキスト。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.html_name</span> <span class=\"pre\">}}</span></code></dt><dd><p>input要素のnameフィールドで使用されるフィールドの名前。 フォームのプレフィックスが設定されていれば考慮に入れます。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.id_for_label</span> <span class=\"pre\">}}</span></code></dt><dd><p>フィールドに使用されるID(上記の例では <code class=\"docutils literal notranslate\"><span class=\"pre\">id_email</span></code>)。 ラベルを手動で作成する場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">label_tag</span></code> の代わりにこのラベルを使用します。 たとえば、インラインJavaScriptがあり、フィールドのIDをハードコーディングしないようにしたい場合にも便利です。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.is_hidden</span> <span class=\"pre\">}}</span></code></dt><dd><p>この属性は、フォームフィールドがhiddenフィールドの場合はTrue、それ以外の場合はFalseです。 テンプレート変数としては特に有用ではありませんが、以下のような条件テストに役立ちます。</p>\n</dd>\n</dl>\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\">if</span> <span class=\"nv\">field.is_hidden</span> <span class=\"cp\">%}</span>\n   <span class=\"c\">{# Do something special #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.label</span> <span class=\"pre\">}}</span></code></dt><dd><p>フィールドのラベル。例) <code class=\"docutils literal notranslate\"><span class=\"pre\">Email</span> <span class=\"pre\">address</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.label_tag</span> <span class=\"pre\">}}</span></code></dt><dd><p>フィールドのラベルは、適切なHTMLの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> タグで囲まれています。 これにはフォームの <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code></a> が含まれます。 たとえば、デフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">label_suffix</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=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_email&quot;</span><span class=\"p\">&gt;</span>Email address:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.legend_tag</span> <span class=\"pre\">}}</span></code></dt><dd><p><code class=\"docutils literal notranslate\"><span class=\"pre\">field.label_tag</span></code> と似ていますが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;legend&gt;</span></code> タグを使用します。複数の入力を <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code> でラップしたウィジェット用です。</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.use_fieldset</span> <span class=\"pre\">}}</span></code></dt><dd><p>この属性は、フォームフィールドのウィジェットが複数の入力を含み、アクセシビリティを向上させるために <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;legend&gt;</span></code> で意味的にグループ化されるべき場合に <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になります。テンプレートでの使用例:</p>\n</dd>\n</dl>\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\">if</span> <span class=\"nv\">field.use_fieldset</span> <span class=\"cp\">%}</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.label</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">field.legend_tag</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n  <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.label</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.use_fieldset</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.value</span> <span class=\"pre\">}}</span></code></dt><dd><p>フィールドの値。例:  <code class=\"docutils literal notranslate\"><span class=\"pre\">someone&#64;example.com</span></code></p>\n</dd>\n</dl>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>属性とメソッドの完全な一覧については、 <a class=\"reference internal\" href=\"/ja/5.1/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a> を参照してください。</p>\n</aside>\n<section id=\"looping-over-hidden-and-visible-fields\">\n<h4>Hidden および可視のフィールドをループする<a class=\"heading-anchor\" href=\"#looping-over-hidden-and-visible-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django のデフォルトのフォームレイアウトに頼るのではなく、手作業でテンプレートに フォームをレイアウトする場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;hidden&quot;&gt;</span></code> フィールドを、隠しフィールドとは異なるように扱いたいかもしれません。例えば、隠しフィールドは何も表示しないので、エラーメッセージをフィールドの「隣」に置くとユーザを混乱させる可能性があります。</p>\n<p>Django は、隠しフィールドと可視フィールドを個別にループできる 2 つのメソッ ドをフォームに提供しています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">hidden_fields()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">visible_fields()</span></code> です。以下は、この 2 つのメソッドを使い、前述の例を修正したものです:</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=\"c\">{# Include the hidden fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">hidden</span> <span class=\"k\">in</span> <span class=\"nv\">form.hidden_fields</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">hidden</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"c\">{# Include the visible fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form.visible_fields</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>この例では隠しフィールドのエラーは処理しません。通常、隠しフィールドのエラーはフォームが改ざんされているサインです。しかし、これらのフォームエラーのためにエラー表示を挿入することも簡単にできます。</p>\n</section>\n</section>\n</section>\n<section id=\"further-topics\">\n<h2>その他のトピック<a class=\"heading-anchor\" href=\"#further-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ここまでで基本的なことをカバーしますが、フォームはもっと多くのことができます。</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/\">フォームセット (Formset)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#using-initial-data-with-a-formset\">フォームセットで初期データを指定する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#limiting-the-maximum-number-of-forms\">フォームの最大表示数を制限する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#limiting-the-maximum-number-of-instantiated-forms\">インスタンス化できるフォームの数を制限する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#formset-validation\">フォームセットのバリデーション</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#validating-the-number-of-forms-in-a-formset\">フォームセット内のフォームの数を検証する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms\">フォームのソートと削除に対応させる</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#adding-additional-fields-to-a-formset\">フォームセットにフィールドを追加する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#passing-custom-parameters-to-formset-forms\">フォームセットのフォームにカスタムパラメータを渡す</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#customizing-a-formset-s-prefix\">フォームセットのプレフィックスをカスタマイズする</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/formsets/#using-a-formset-in-views-and-templates\">ビューとテンプレートでフォームセットを使う</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/modelforms/\">モデルからフォームを作成する</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/modelforms/#modelform\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/modelforms/#model-formsets\">モデルのフォームセット</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/modelforms/#inline-formsets\">インラインフォームセット</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/media/\">フォームアセット (<code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> クラス)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/media/#assets-as-a-static-definition\">定数として定義されたアセット</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/media/#media-as-a-dynamic-property\">動的プロパティとしての <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/media/#paths-in-asset-definitions\">アセット定義内のパス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/media/#media-objects\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> objects</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/5.1/topics/forms/media/#media-on-forms\">フォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code></a></li>\n</ul>\n</li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/ja/5.1/ref/forms/\"><span class=\"doc\">フォームのリファレンス</span></a></dt><dd><p>フォームフィールド、フォームウィジェット、フォームとフィールドの検証など、APIリファレンス全体をカバーします。</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"working-with-forms","toc":[{"title":"HTML フォーム","anchor":"html-forms","children":[{"title":"GET と POST","anchor":"get-and-post","children":[]}]},{"title":"フォームにおける Django の役割","anchor":"django-s-role-in-forms","children":[]},{"title":"Django におけるフォーム","anchor":"forms-in-django","children":[{"title":"Django の Form クラス","anchor":"the-django-form-class","children":[]},{"title":"フォームをインスタンス化し、処理し、レンダリングする","anchor":"instantiating-processing-and-rendering-forms","children":[]}]},{"title":"フォームを作る","anchor":"building-a-form","children":[{"title":"すべきこと","anchor":"the-work-that-needs-to-be-done","children":[]},{"title":"Django でフォームを作る","anchor":"building-a-form-in-django","children":[{"title":"Form クラス","anchor":"the-form-class","children":[]},{"title":"ビュー","anchor":"the-view","children":[]},{"title":"テンプレート","anchor":"the-template","children":[]}]}]},{"title":"Django の Form クラスの詳細","anchor":"more-about-django-form-classes","children":[{"title":"バインドされた (bound) および バインドされていない (unbound) フォームインスタンス","anchor":"bound-and-unbound-form-instances","children":[]},{"title":"フィールドについて","anchor":"more-on-fields","children":[{"title":"ウィジェット","anchor":"widgets","children":[]},{"title":"フィールドデータ","anchor":"field-data","children":[]}]}]},{"title":"フォームテンプレートを扱う","anchor":"working-with-form-templates","children":[{"title":"再利用可能なフォームテンプレート","anchor":"reusable-form-templates","children":[]},{"title":"再利用可能なフィールドグループテンプレート","anchor":"reusable-field-group-templates","children":[]},{"title":"フィールドを手動でレンダリングする","anchor":"rendering-fields-manually","children":[{"title":"フォームのエラーメッセージをレンダリングする","anchor":"rendering-form-error-messages","children":[]}]},{"title":"フォームのフィールドをループする","anchor":"looping-over-the-form-s-fields","children":[{"title":"Hidden および可視のフィールドをループする","anchor":"looping-over-hidden-and-visible-fields","children":[]}]}]},{"title":"その他のトピック","anchor":"further-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/5.1/topics/"}],"prev":{"docname":"topics/http/sessions","title":"セッションの使いかた","url":"/ja/5.1/topics/http/sessions/"},"next":{"docname":"topics/forms/formsets","title":"フォームセット (Formset)","url":"/ja/5.1/topics/forms/formsets/"},"formats":{"html":"/ja/5.1/topics/forms/","markdown":"/ja/5.1/topics/forms.md","json":"/ja/5.1/topics/forms.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/topics/forms/index.txt","official":"https://docs.djangoproject.com/ja/5.1/topics/forms/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}