{"title":"フォームを使う","version":"2.2","locale":"ja","docname":"topics/forms/index","url":"/ja/2.2/topics/forms/","canonical":"https://djangodocs.dev/ja/2.2/topics/forms/","summary":"このドキュメントについて このドキュメントでは、Web フォームの基本と、それらを Django で扱う方法を紹介しています。より詳しく知りたいときは、フォーム API の特定の領域、 フォーム API 、 Form fields または フォームとフィールドの検証 をご覧ください。…","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/2.2/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> 、 <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/fields/\"><span class=\"doc\">Form fields</span></a> または <a class=\"reference internal\" href=\"/ja/2.2/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\">&lt;input&gt;</span></code> 要素だけではなく JavaScriptと CSS を使って実現されます。</p>\n<p>As well as its <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> elements, a form must specify two things:</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/2.2/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/2.2/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/2.2/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/2.2/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/2.2/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/2.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> はモデルクラスのフィールドと HTML フォームの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> 要素を、<a class=\"reference internal\" href=\"/ja/2.2/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 amin が基づくものです)</p>\n<p>フォームのフィールド自体はクラスです; フォームが送信されたとき、フォームデータを管理し、検証を実施します。 <a class=\"reference internal\" href=\"/ja/2.2/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/2.2/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/2.2/ref/forms/widgets/\"><span class=\"doc\">Widget class</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/2.2/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\">forms.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">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=\"s1\">&#39;Your name&#39;</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/2.2/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/2.2/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/2.2/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> に maxlength=&quot;100&quot;` を配置します (そしてブラウザはユーザーがこの数値以上の文字数をそもそも入力できないようにするはずです). これはさらに、Django がブラウザからフォームを受け取ったときにデータの文字数を検証することも意味します。</p>\n<p>A <a class=\"reference internal\" href=\"/ja/2.2/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> instance has an <a class=\"reference internal\" href=\"/ja/2.2/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> method, which runs\nvalidation routines for all its fields. When this method is called, if all\nfields contain valid data, it will:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返します</p></li>\n<li><p>フォームのデータを :attr:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~Form.cleaned_data 属性に配置します</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\">views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.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<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=\"s1\">&#39;POST&#39;</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=\"s1\">&#39;/thanks/&#39;</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=\"s1\">&#39;name.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</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> の場合は、 cleaned_data` 属性で検証済みのフォームデータを見出すことができます。このデータは、データベースを更新するために使ったり、次に進むための 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/2.2/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/2.2/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 保護はフォームと直接関係あるわけではないので、このドキュメントの以降の例では <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> は省略されています。</p>\n</aside>\n<aside class=\"admonition-html5-input-types-and-browser-validation admonition\">\n<p class=\"admonition-title\">HTML5 の input の種類とブラウザ検証</p>\n<p>フォームが <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code> もしくは何か数値のフィールドタイプを含むとき、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> タグの novalidate 属性をセットするか、フィールドで <a class=\"reference internal\" href=\"/ja/2.2/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/2.2/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/2.2/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/2.2/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/2.2/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 モデルを直接追加または編集するためにフォームを使用する場合、<span class=\"xref std std-doc\">ModelForm</span> は <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) フォームインスタンス<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/2.2/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">Bound and unbound forms</span></a> の区別は重要です:</p>\n<ul class=\"simple\">\n<li><p>unbound のフォームには連結したデータがありません。ユーザーにレンダリングするとき、空ないしデフォルト値となります。</p></li>\n<li><p>bound のフォームは送信されたデータを持っており、したがってデータの有効性を検証できます。無効な bound フォームがレンダリングされている場合、ユーザーがデータを修正できるようにエラーメッセージを表示することができます。</p></li>\n</ul>\n<p>フォームの <a class=\"reference internal\" href=\"/ja/2.2/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\">forms.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">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/2.2/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/2.2/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/2.2/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/2.2/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> はフィールドの種類です; すべての種類は <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/fields/\"><span class=\"doc\">Form fields</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/2.2/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/2.2/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/2.2/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>Field data<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/2.2/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/2.2/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\">views.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.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=\"s1\">&#39;subject&#39;</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=\"s1\">&#39;message&#39;</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=\"s1\">&#39;sender&#39;</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=\"s1\">&#39;cc_myself&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"n\">recipients</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;info@example.com&#39;</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=\"s1\">&#39;/thanks/&#39;</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/2.2/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/2.2/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Binding uploaded files to a form</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<section id=\"form-rendering-options\">\n<h3>フォームのレンダリングオプション<a class=\"heading-anchor\" href=\"#form-rendering-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\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<p><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<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_table</span> <span class=\"pre\">}}</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;tr&gt;</span></code> タグでラップしたテーブルのセルとしてレンダリングします。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_p</span> <span class=\"pre\">}}</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;p&gt;</span></code> タグでラップしてレンダリングします。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.as_ul</span> <span class=\"pre\">}}</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;li&gt;</span></code> タグでラップしてレンダリングします。</p></li>\n</ul>\n<p>周囲の <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;table&gt;</span></code> 要素または <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul&gt;</span></code> 要素を自分で指定する必要があることに注意してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ContactForm</span></code> インスタンスの <code class=\"docutils literal notranslate\"><span class=\"pre\">{{form.as_p}}</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\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_subject&quot;</span><span class=\"p\">&gt;</span>Subject:<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;id_subject&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;subject&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;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_message&quot;</span><span class=\"p\">&gt;</span>Message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">textarea</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;message&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_message&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">textarea</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_sender&quot;</span><span class=\"p\">&gt;</span>Sender:<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\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;email&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;sender&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_sender&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">p</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_cc_myself&quot;</span><span class=\"p\">&gt;</span>Cc myself:<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\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;checkbox&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;cc_myself&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_cc_myself&quot;</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>各フォームフィールドには、<code class=\"docutils literal notranslate\"><span class=\"pre\">id_&lt;field-name&gt;</span></code> に設定されたID属性があり、付随するラベルタグによって参照されます。 これはフォームがスクリーンリーダーソフトウェアなどの支援技術に、アクセスできるようにする上で重要です。You can also  <span class=\"xref std std-ref\">customize the way in which labels and ids are generated</span>.</p>\n<p>詳しくは、 <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Outputting forms as HTML</span></a> を参照してください。</p>\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>Django にフォームのフィールドを展開させず、手作業で行うこともできます (例えばフィールドの並べ替えを許可するなど)。 各フィールドは、<code class=\"docutils literal notranslate\"><span class=\"pre\">{{form.name_of_field}}</span></code> を使用してフォームの属性として使用でき、Django テンプレートでは適切にレンダリングされます。例えば次のようにできます:</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/2.2/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>Of course, the price of this flexibility is more work. Until now we haven't had\nto worry about how to display form errors, because that's taken care of for us.\nIn this example we have had to make sure we take care of any errors for each\nfield and any errors for the form as a whole. Note <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span>\n<span class=\"pre\">}}</span></code> at the top of the form and the template lookup for errors on each field.</p>\n<p>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.name_of_field.errors</span> <span class=\"pre\">}}</span></code> displays a list of form errors,\nrendered as an unordered list. This might look like:</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>The list has a CSS class of <code class=\"docutils literal notranslate\"><span class=\"pre\">errorlist</span></code> to allow you to style its appearance.\nIf you wish to further customize the display of errors you can do so by looping\nover them:</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>Non-field errors (and/or hidden field errors that are rendered at the top of\nthe form when using helpers like <code class=\"docutils literal notranslate\"><span class=\"pre\">form.as_p()</span></code>) will be rendered with an\nadditional class of <code class=\"docutils literal notranslate\"><span class=\"pre\">nonfield</span></code> to help distinguish them from field-specific\nerrors. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span> <span class=\"pre\">}}</span></code> would look like:</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>See <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/api/\"><span class=\"doc\">フォーム API</span></a> for more on errors, styling, and working with form\nattributes in templates.</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=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">field.help_text</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span><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>\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/2.2/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=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"o\">&lt;</span><span class=\"n\">label</span> <span class=\"k\">for</span><span class=\"o\">=</span><span class=\"s2\">&quot;id_email&quot;</span><span class=\"o\">&gt;</span><span class=\"n\">Email</span> <span class=\"n\">address</span><span class=\"p\">:</span><span class=\"o\">&lt;/</span><span class=\"n\">label</span><span class=\"o\">&gt;</span>\n</code></pre></div>\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.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<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.help_text</span> <span class=\"pre\">}}</span></code></dt><dd><p>Any help text that has been associated with the field.</p>\n</dd>\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>Outputs a <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul</span> <span class=\"pre\">class=&quot;errorlist&quot;&gt;</span></code> containing any validation errors\ncorresponding to this field. You can customize the presentation of\nthe errors with a <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> loop. In this\ncase, each object in the loop is a simple string containing the error\nmessage.</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 class=\"simple\">\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/2.2/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/2.2/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> 。 <a class=\"reference internal\" href=\"/ja/2.2/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> 属性にアクセスするために使用することができます。  例: <code class=\"docutils literal notranslate\"><span class=\"pre\">{{char_field.field.max_length}}</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/2.2/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>If you're manually laying out a form in a template, as opposed to relying on\nDjango's default form layout, you might want to treat <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;hidden&quot;&gt;</span></code>\nfields differently from non-hidden fields. For example, because hidden fields\ndon't display anything, putting error messages &quot;next to&quot; the field could cause\nconfusion for your users -- so errors for those fields should be handled\ndifferently.</p>\n<p>Django provides two methods on a form that allow you to loop over the hidden\nand visible fields independently: <code class=\"docutils literal notranslate\"><span class=\"pre\">hidden_fields()</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">visible_fields()</span></code>. Here's a modification of an earlier example that uses\nthese two methods:</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>This example does not handle any errors in the hidden fields. Usually, an\nerror in a hidden field is a sign of form tampering, since normal form\ninteraction won't alter them. However, you could easily insert some error\ndisplays for those form errors, as well.</p>\n</section>\n</section>\n<section id=\"reusable-form-templates\">\n<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>サイトで複数の場所にあるフォームに同じレンダリングロジックを使用している場合は、フォームのループをスタンドアロンのテンプレートに保存し、 <a class=\"reference internal\" href=\"/ja/2.2/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">include</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># In your form template:\n<span class=\"cp\">{%</span> <span class=\"k\">include</span> <span class=\"s2\">&quot;form_snippet.html&quot;</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/2.2/ref/templates/builtins/#std-templatetag-include\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">include</span></code></a> タグの <code class=\"docutils literal notranslate\"><span class=\"pre\">with</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\">include</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span> <span class=\"k\">with</span> <span class=\"nv\">form</span><span class=\"o\">=</span><span class=\"nv\">comment_form</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>頻繁に行っている場合は、カスタム <span class=\"xref std std-ref\">inclusion tag</span> を作成することを検討してください。</p>\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/2.2/topics/forms/formsets/\">フォームセット (Formset)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#using-initial-data-with-a-formset\">フォームセットで初期データを指定する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#limiting-the-maximum-number-of-forms\">フォームの最大表示数を制限する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#formset-validation\">フォームセットのバリデーション</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#validating-the-number-of-forms-in-a-formset\">フォームセット内のフォームの数を検証する</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms\">Dealing with ordering and deletion of forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#adding-additional-fields-to-a-formset\">Adding additional fields to a formset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#passing-custom-parameters-to-formset-forms\">Passing custom parameters to formset forms</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#customizing-a-formset-s-prefix\">Customizing a formset's prefix</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/formsets/#using-a-formset-in-views-and-templates\">Using a formset in views and templates</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/\">モデルからフォームを作成する</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/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/2.2/topics/forms/modelforms/#model-formsets\">モデルのフォームセット</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/topics/forms/modelforms/#inline-formsets\">インラインフォームセット</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/ja/2.2/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/2.2/topics/forms/media/#assets-as-a-static-definition\">定数として定義されたアセット</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/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/2.2/topics/forms/media/#paths-in-asset-definitions\">アセット定義内のパス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/ja/2.2/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/2.2/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/2.2/ref/forms/\"><span class=\"doc\">The Forms Reference</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) フォームインスタンス","anchor":"bound-and-unbound-form-instances","children":[]},{"title":"フィールドについて","anchor":"more-on-fields","children":[{"title":"ウィジェット","anchor":"widgets","children":[]},{"title":"Field data","anchor":"field-data","children":[]}]}]},{"title":"フォームテンプレートを扱う","anchor":"working-with-form-templates","children":[{"title":"フォームのレンダリングオプション","anchor":"form-rendering-options","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":"reusable-form-templates","children":[]}]},{"title":"その他のトピック","anchor":"further-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/2.2/topics/"}],"prev":{"docname":"topics/http/sessions","title":"セッションの使いかた","url":"/ja/2.2/topics/http/sessions/"},"next":{"docname":"topics/forms/formsets","title":"フォームセット (Formset)","url":"/ja/2.2/topics/forms/formsets/"},"formats":{"html":"/ja/2.2/topics/forms/","markdown":"/ja/2.2/topics/forms.md","json":"/ja/2.2/topics/forms.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/topics/forms/index.txt","official":"https://docs.djangoproject.com/ja/2.2/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","pt-br","ko","es","el","pl"]}