{"title":"Formsatser","version":"6.1","locale":"sv","docname":"topics/forms/formsets","url":"/sv/6.1/topics/forms/formsets/","canonical":"https://djangodocs.dev/sv/6.1/topics/forms/formsets/","summary":"En formset är ett abstraktionslager som gör det möjligt att arbeta med flera formulär på samma sida. Det kan bäst jämföras med ett datagalleri.","html":"<h1>Formsatser<a class=\"heading-anchor\" href=\"#formsets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BaseFormSet</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En formset är ett abstraktionslager som gör det möjligt att arbeta med flera formulär på samma sida. Det kan bäst jämföras med ett datagalleri. Låt oss säga att du har följande formulär:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">ArticleForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    title <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">... </span>    pub_date <span class=\"o\">=</span> forms<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<p>Du kanske vill tillåta användaren att skapa flera artiklar på en gång. För att skapa en formuläruppsättning av en <code class=\"docutils literal notranslate\">ArticleForm</code> gör du så här:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">)</span>\n</code></pre></div>\n<p>Du har nu skapat en formulärklass med namnet <code class=\"docutils literal notranslate\">ArticleFormSet</code>. Genom att instansiera formuläruppsättningen kan du iterera över formulären i formuläruppsättningen och visa dem som du skulle göra med ett vanligt formulär:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-title&quot; id=&quot;id_form-0-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-pub_date&quot; id=&quot;id_form-0-pub_date&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Som du kan se visade den bara ett tomt formulär. Antalet tomma formulär som visas styrs av parametern <code class=\"docutils literal notranslate\">extra</code>. Som standard definierar <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a> ett extra formulär; följande exempel kommer att skapa en formset-klass för att visa två tomma formulär:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> extra<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Formset kan itereras över och indexeras, så att formulären nås i den ordning de skapades. Du kan ändra ordningen på formulären genom att vid behov åsidosätta standardmetoderna <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#object.__iter__\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">__iter__()</code></a> och <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#object.__getitem__\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">__getitem__()</code></a>. (Mer information om hur dessa metoder implementeras finns i <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-sequence\" title=\"(in Python v3.14)\"><span class=\"xref std std-term\">Pythondokumentationen om sekvenser</span></a>.)</p>\n<section id=\"using-initial-data-with-a-formset\">\n<span id=\"formsets-initial-data\"></span><h2>Använda initiala data med en formulärset<a class=\"heading-anchor\" href=\"#using-initial-data-with-a-formset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Initiala data är det som styr den huvudsakliga användbarheten för en formuläruppsättning. Som visas ovan kan du definiera antalet extra formulär. Det innebär att du talar om för formuläret hur många ytterligare formulär som ska visas utöver det antal formulär som genereras utifrån de ursprungliga uppgifterna. Låt oss ta en titt på ett exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> extra<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    initial<span class=\"o\">=</span><span class=\"p\">[</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Django is now open source&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>            <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">(),</span>\n<span class=\"gp\">... </span>        <span class=\"p\">}</span>\n<span class=\"gp\">... </span>    <span class=\"p\">]</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-title&quot; value=&quot;Django is now open source&quot; id=&quot;id_form-0-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-pub_date&quot; value=&quot;2023-02-11&quot; id=&quot;id_form-0-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-1-title&quot; id=&quot;id_form-1-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-1-pub_date&quot; id=&quot;id_form-1-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-2-title&quot; id=&quot;id_form-2-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-2-pub_date&quot; id=&quot;id_form-2-pub_date&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Det finns nu totalt tre formulär som visas ovan. Ett för de initiala data som skickades in och två extra formulär. Observera också att vi skickar in en lista med ordböcker som startdata.</p>\n<p>Om du använder en <code class=\"docutils literal notranslate\">initial</code> för att visa ett formulär bör du skicka samma <code class=\"docutils literal notranslate\">initial</code> när du behandlar formulärets inlämning så att formuläret kan upptäcka vilka formulär som har ändrats av användaren. Till exempel kan du ha något liknande: <code class=\"docutils literal notranslate\">ArticleFormSet(request.POST, initial=[...])</code>.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#model-formsets\"><span class=\"std std-ref\">Skapande av formulär från modeller med modellformulär</span></a>.</p>\n</aside>\n</section>\n<section id=\"limiting-the-maximum-number-of-forms\">\n<span id=\"formsets-max-num\"></span><h2>Begränsa det maximala antalet formulär<a class=\"heading-anchor\" href=\"#limiting-the-maximum-number-of-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Parametern <code class=\"docutils literal notranslate\">max_num</code> till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a> ger dig möjlighet att begränsa antalet formulär som formuläret ska visa:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> extra<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> max_num<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-title&quot; id=&quot;id_form-0-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-pub_date&quot; id=&quot;id_form-0-pub_date&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Om värdet för <code class=\"docutils literal notranslate\">max_num</code> är större än antalet befintliga objekt i de ursprungliga uppgifterna, kommer upp till <code class=\"docutils literal notranslate\">extra</code> ytterligare blanketter att läggas till i formuläruppsättningen, så länge det totala antalet blanketter inte överstiger <code class=\"docutils literal notranslate\">max_num</code>. Om t.ex. <code class=\"docutils literal notranslate\">extra=2</code> och <code class=\"docutils literal notranslate\">max_num=2</code> och formuläruppsättningen initieras med ett <code class=\"docutils literal notranslate\">initial</code> objekt, kommer ett formulär för det första objektet och ett tomt formulär att visas.</p>\n<p>Om antalet objekt i startdata överstiger <code class=\"docutils literal notranslate\">max_num</code> visas alla formulär med startdata oavsett värdet på <code class=\"docutils literal notranslate\">max_num</code> och inga extra formulär visas. Om t.ex. <code class=\"docutils literal notranslate\">extra=3</code> och <code class=\"docutils literal notranslate\">max_num=1</code> och formuläruppsättningen initieras med två initiala objekt, visas två formulär med de initiala uppgifterna.</p>\n<p>Ett värde på <code class=\"docutils literal notranslate\">max_num</code> på <code class=\"docutils literal notranslate\">None</code> (standard) sätter en hög gräns för antalet formulär som visas (1000). I praktiken är detta likvärdigt med ingen gräns.</p>\n<p>Som standard påverkar <code class=\"docutils literal notranslate\">max_num</code> bara hur många formulär som visas och påverkar inte valideringen. Om <code class=\"docutils literal notranslate\">validate_max=True</code> skickas till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a> påverkar <code class=\"docutils literal notranslate\">max_num</code> valideringen. Se <a class=\"reference internal\" href=\"#validate-max\"><span class=\"std std-ref\">validera_max</span></a>.</p>\n</section>\n<section id=\"limiting-the-maximum-number-of-instantiated-forms\">\n<span id=\"formsets-absolute-max\"></span><h2>Begränsning av det maximala antalet instansierade formulär<a class=\"heading-anchor\" href=\"#limiting-the-maximum-number-of-instantiated-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Parametern <code class=\"docutils literal notranslate\">absolute_max</code> till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a> gör det möjligt att begränsa antalet formulär som kan instansieras när <code class=\"docutils literal notranslate\">POST</code>-data levereras. Detta skyddar mot minnesutmattningsattacker med hjälp av förfalskade <code class=\"docutils literal notranslate\">POST</code>-förfrågningar:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms.formsets</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> absolute_max<span class=\"o\">=</span><span class=\"mi\">1500</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1501&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">len</span><span class=\"p\">(</span>formset<span class=\"o\">.</span>forms<span class=\"p\">)</span>\n<span class=\"go\">1500</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>non_form_errors<span class=\"p\">()</span>\n<span class=\"go\">[&#39;Please submit at most 1000 forms.&#39;]</span>\n</code></pre></div>\n<p>När <code class=\"docutils literal notranslate\">absolute_max</code> är <code class=\"docutils literal notranslate\">None</code>, är standardvärdet <code class=\"docutils literal notranslate\">max_num + 1000</code>. (Om <code class=\"docutils literal notranslate\">max_num</code> är <code class=\"docutils literal notranslate\">None</code>, är standardvärdet <code class=\"docutils literal notranslate\">2000</code>).</p>\n<p>Om <code class=\"docutils literal notranslate\">absolute_max</code> är mindre än <code class=\"docutils literal notranslate\">max_num</code>, kommer ett <code class=\"docutils literal notranslate\">ValueError</code> att uppstå.</p>\n</section>\n<section id=\"formset-validation\">\n<h2>Validering av formulär<a class=\"heading-anchor\" href=\"#formset-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Validering med en formset är nästan identisk med en vanlig <code class=\"docutils literal notranslate\">Form</code>. Det finns en <code class=\"docutils literal notranslate\">is_valid</code>-metod på formuläret för att tillhandahålla ett bekvämt sätt att validera alla formulär i formuläret:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Vi har inte skickat in några data till formuläret, vilket resulterar i ett giltigt formulär. Formuläret är tillräckligt smart för att ignorera extra formulär som inte har ändrats. Om vi tillhandahåller en ogiltig artikel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1904-06-16&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># &lt;-- this date is missing but required</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>errors\n<span class=\"go\">[{}, {&#39;pub_date&#39;: [&#39;This field is required.&#39;]}]</span>\n</code></pre></div>\n<p>Som vi kan se är <code class=\"docutils literal notranslate\">formset.errors</code> en lista vars poster motsvarar formulären i formuläruppsättningen. Validering utfördes för vart och ett av de två formulären, och det förväntade felmeddelandet visas för det andra objektet.</p>\n<p>Precis som när du använder ett vanligt <code class=\"docutils literal notranslate\">Form</code> kan varje fält i ett formulär innehålla HTML-attribut som <code class=\"docutils literal notranslate\">maxlength</code> för webbläsarvalidering. Formulärfält i formuläruppsättningar kommer dock inte att innehålla attributet <code class=\"docutils literal notranslate\">required</code> eftersom den valideringen kan vara felaktig när formulär läggs till och tas bort.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.total_error_count\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">total_error_count</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.total_error_count\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>För att kontrollera hur många fel som finns i formuläret kan vi använda metoden <code class=\"docutils literal notranslate\">total_error_count</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Using the previous example</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>errors\n<span class=\"go\">[{}, {&#39;pub_date&#39;: [&#39;This field is required.&#39;]}]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">len</span><span class=\"p\">(</span>formset<span class=\"o\">.</span>errors<span class=\"p\">)</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>total_error_count<span class=\"p\">()</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<p>Vi kan också kontrollera om uppgifterna i formuläret skiljer sig från de ursprungliga uppgifterna (dvs. om formuläret skickades utan några uppgifter):</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>has_changed<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n<section id=\"understanding-the-managementform\">\n<span id=\"id1\"></span><h3>Förståelse för ”Managementformuläret<a class=\"heading-anchor\" href=\"#understanding-the-managementform\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kanske har lagt märke till de ytterligare data (<code class=\"docutils literal notranslate\">form-TOTAL_FORMS</code>, <code class=\"docutils literal notranslate\">form-INITIAL_FORMS</code>) som krävdes i formulärets data ovan. Dessa data krävs för <code class=\"docutils literal notranslate\">ManagementForm</code>. Detta formulär används av formuläruppsättningen för att hantera den samling formulär som finns i formuläruppsättningen. Om du inte tillhandahåller dessa hanteringsdata kommer formuläret att vara ogiltigt:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n<p>Det används för att hålla reda på hur många formulärinstanser som visas. Om du lägger till nya formulär via JavaScript bör du inkrementera count-fälten även i detta formulär. Om du å andra sidan använder JavaScript för att tillåta borttagning av befintliga objekt, måste du se till att de som tas bort är korrekt markerade för borttagning genom att inkludera <code class=\"docutils literal notranslate\">form-#-DELETE</code> i <code class=\"docutils literal notranslate\">POST</code>-data. Det förväntas att alla formulär finns i <code class=\"docutils literal notranslate\">POST</code>-datan oavsett.</p>\n<p>Hanteringsformuläret är tillgängligt som ett attribut för själva formuläret. När du renderar en formset i en mall kan du inkludera alla hanteringsdata genom att rendera <code class=\"docutils literal notranslate\">{{ my_formset.management_form }}</code> (med namnet på din formset som ersättning).</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Förutom fälten <code class=\"docutils literal notranslate\">form-TOTAL_FORMS</code> och <code class=\"docutils literal notranslate\">form-INITIAL_FORMS</code> som visas i exemplen här, innehåller hanteringsformuläret också fälten <code class=\"docutils literal notranslate\">form-MIN_NUM_FORMS</code> och <code class=\"docutils literal notranslate\">form-MAX_NUM_FORMS</code>. De matas ut tillsammans med resten av hanteringsformuläret, men endast för att underlätta för koden på klientsidan. Dessa fält är inte obligatoriska och visas därför inte i exemplet med <code class=\"docutils literal notranslate\">POST</code>-data.</p>\n</aside>\n</section>\n<section id=\"total-form-count-and-initial-form-count\">\n<h3><code class=\"docutils literal notranslate\">total_form_count</code> och <code class=\"docutils literal notranslate\">initial_form_count</code><a class=\"heading-anchor\" href=\"#total-form-count-and-initial-form-count\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">BaseFormSet</code> har ett par metoder som är nära relaterade till <code class=\"docutils literal notranslate\">ManagementForm</code>, <code class=\"docutils literal notranslate\">total_form_count</code> och <code class=\"docutils literal notranslate\">initial_form_count</code>.</p>\n<p><code class=\"docutils literal notranslate\">total_form_count</code> returnerar det totala antalet formulär i denna formuläruppsättning. <code class=\"docutils literal notranslate\">initial_form_count</code> returnerar antalet formulär i formuläruppsättningen som var förifyllda, och används också för att avgöra hur många formulär som krävs. Du kommer förmodligen aldrig att behöva åsidosätta någon av dessa metoder, så se till att du förstår vad de gör innan du gör det.</p>\n</section>\n<section id=\"empty-form\">\n<span id=\"id2\"></span><h3><code class=\"docutils literal notranslate\">tomt_formulär</code><a class=\"heading-anchor\" href=\"#empty-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">BaseFormSet</code> tillhandahåller ett ytterligare attribut <code class=\"docutils literal notranslate\">empty_form</code> som returnerar en formulärinstans med prefixet <code class=\"docutils literal notranslate\">__prefix__</code> för enklare användning i dynamiska formulär med JavaScript.</p>\n</section>\n<section id=\"error-messages\">\n<span id=\"formsets-error-messages\"></span><h3><code class=\"docutils literal notranslate\">Felmeddelanden</code><a class=\"heading-anchor\" href=\"#error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Med argumentet <code class=\"docutils literal notranslate\">error_messages</code> kan du åsidosätta de standardmeddelanden som formuläret kommer att ge upphov till. Skicka in en ordbok med nycklar som matchar de felmeddelanden som du vill åsidosätta. Felmeddelanden är bland annat <code class=\"docutils literal notranslate\">'too_few_forms'</code>, <code class=\"docutils literal notranslate\">'too_many_forms'</code> och <code class=\"docutils literal notranslate\">'missing_management_form'</code>. Felmeddelandena <code class=\"docutils literal notranslate\">'too_few_forms'</code> och <code class=\"docutils literal notranslate\">'too_many_forms'</code> kan innehålla <code class=\"docutils literal notranslate\">%(num)d</code>, som kommer att ersättas med <code class=\"docutils literal notranslate\">min_num</code> respektive <code class=\"docutils literal notranslate\">max_num</code>.</p>\n<p>Här är t.ex. standardfelmeddelandet när förvaltningsformuläret saknas:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">({})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>non_form_errors<span class=\"p\">()</span>\n<span class=\"go\">[&#39;ManagementForm data is missing or has been tampered with. Missing fields: form-TOTAL_FORMS, form-INITIAL_FORMS. You may need to file a bug report if the issue persists.&#39;]</span>\n</code></pre></div>\n<p>Och här är ett anpassat felmeddelande:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"p\">{},</span> error_messages<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;missing_management_form&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Sorry, something went wrong.&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>non_form_errors<span class=\"p\">()</span>\n<span class=\"go\">[&#39;Sorry, something went wrong.&#39;]</span>\n</code></pre></div>\n</section>\n<section id=\"custom-formset-validation\">\n<h3>Anpassad validering av formulär<a class=\"heading-anchor\" href=\"#custom-formset-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ett formulär har en <code class=\"docutils literal notranslate\">clean</code>-metod som liknar den som finns i klassen <code class=\"docutils literal notranslate\">Form</code>. Det är här du definierar din egen validering som fungerar på formulärnivå:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ValidationError\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"sd\">&quot;&quot;&quot;Checks that no two articles have the same title.&quot;&quot;&quot;</span>\n<span class=\"gp\">... </span>        <span class=\"k\">if</span> <span class=\"nb\">any</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>errors<span class=\"p\">):</span>\n<span class=\"gp\">... </span>            <span class=\"c1\"># Don&#39;t bother validating the formset unless each form is valid on its own</span>\n<span class=\"gp\">... </span>            <span class=\"k\">return</span>\n<span class=\"gp\">... </span>        titles <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span>        <span class=\"k\">for</span> form <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>forms<span class=\"p\">:</span>\n<span class=\"gp\">... </span>            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>can_delete <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span>_should_delete_form<span class=\"p\">(</span>form<span class=\"p\">):</span>\n<span class=\"gp\">... </span>                <span class=\"k\">continue</span>\n<span class=\"gp\">... </span>            title <span class=\"o\">=</span> form<span class=\"o\">.</span>cleaned_data<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>            <span class=\"k\">if</span> title <span class=\"ow\">in</span> titles<span class=\"p\">:</span>\n<span class=\"gp\">... </span>                <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span><span class=\"s2\">&quot;Articles in a set must have distinct titles.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>            titles<span class=\"o\">.</span>add<span class=\"p\">(</span>title<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1904-06-16&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1912-06-23&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>errors\n<span class=\"go\">[{}, {}]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>non_form_errors<span class=\"p\">()</span>\n<span class=\"go\">[&#39;Articles in a set must have distinct titles.&#39;]</span>\n</code></pre></div>\n<p>Metoden <code class=\"docutils literal notranslate\">clean</code> i formuläret anropas efter att alla <code class=\"docutils literal notranslate\">Form.clean</code>-metoder har anropats. Felen kommer att hittas med hjälp av metoden <code class=\"docutils literal notranslate\">non_form_errors()</code> på formuläret.</p>\n<p>Icke-formulärfel återges med en extra klass <code class=\"docutils literal notranslate\">nonform</code> för att skilja dem från formulärspecifika fel. Till exempel skulle <code class=\"docutils literal notranslate\">{{ formset.non_form_errors }}</code> se ut så här:</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 nonform&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Articles in a set must have distinct titles.<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</section>\n</section>\n<section id=\"validating-the-number-of-forms-in-a-formset\">\n<h2>Validering av antalet formulär i en formuläruppsättning<a class=\"heading-anchor\" href=\"#validating-the-number-of-forms-in-a-formset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django tillhandahåller ett par sätt att validera det lägsta eller högsta antalet inlämnade formulär. Applikationer som behöver mer anpassningsbar validering av antalet formulär bör använda anpassad validering av formuläruppsättningar.</p>\n<section id=\"validate-max\">\n<span id=\"id3\"></span><h3><code class=\"docutils literal notranslate\">validera_max</code><a class=\"heading-anchor\" href=\"#validate-max\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om <code class=\"docutils literal notranslate\">validate_max=True</code> skickas till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a>, kommer valideringen också att kontrollera att antalet formulär i datauppsättningen, minus de som är markerade för borttagning, är mindre än eller lika med <code class=\"docutils literal notranslate\">max_num</code>.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> max_num<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> validate_max<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1904-06-16&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test 2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1912-06-23&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>errors\n<span class=\"go\">[{}, {}]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>non_form_errors<span class=\"p\">()</span>\n<span class=\"go\">[&#39;Please submit at most 1 form.&#39;]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">validate_max=True</code> validerar mot <code class=\"docutils literal notranslate\">max_num</code> strikt även om <code class=\"docutils literal notranslate\">max_num</code> överskreds på grund av att mängden initiala data som levererades var för stor.</p>\n<p>Felmeddelandet kan anpassas genom att skicka meddelandet <code class=\"docutils literal notranslate\">'too_many_forms'</code> till argumentet <a class=\"reference internal\" href=\"#formsets-error-messages\"><span class=\"std std-ref\">Felmeddelanden</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Oavsett <code class=\"docutils literal notranslate\">validate_max</code>, om antalet formulär i en datauppsättning överstiger <code class=\"docutils literal notranslate\">absolute_max</code>, kommer formuläret inte att valideras som om <code class=\"docutils literal notranslate\">validate_max</code> hade angetts, och dessutom kommer endast de första <code class=\"docutils literal notranslate\">absolute_max</code> formulären att valideras. Resten kommer att avkortas helt och hållet. Detta är för att skydda mot minnesutmattningsattacker med hjälp av förfalskade POST-begäranden. Se <span class=\"xref std std-ref\">formuläruppsättningar-absolute-max</span>.</p>\n</aside>\n</section>\n<section id=\"validate-min\">\n<h3><code class=\"docutils literal notranslate\">validera_min</code><a class=\"heading-anchor\" href=\"#validate-min\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om <code class=\"docutils literal notranslate\">validate_min=True</code> skickas till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a>, kommer valideringen också att kontrollera att antalet formulär i datauppsättningen, minus de som är markerade för borttagning, är större än eller lika med <code class=\"docutils literal notranslate\">min_num</code>.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> min_num<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> validate_min<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1904-06-16&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Test 2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1912-06-23&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>data<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span>\n<span class=\"go\">False</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>errors\n<span class=\"go\">[{}, {}]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset<span class=\"o\">.</span>non_form_errors<span class=\"p\">()</span>\n<span class=\"go\">[&#39;Please submit at least 3 forms.&#39;]</span>\n</code></pre></div>\n<p>Felmeddelandet kan anpassas genom att skicka meddelandet <code class=\"docutils literal notranslate\">'too_few_forms'</code> till argumentet <a class=\"reference internal\" href=\"#formsets-error-messages\"><span class=\"std std-ref\">Felmeddelanden</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Oavsett <code class=\"docutils literal notranslate\">validate_min</code>, om en formuläruppsättning inte innehåller några data, kommer <code class=\"docutils literal notranslate\">extra + min_num</code> tomma formulär att visas.</p>\n</aside>\n</section>\n</section>\n<section id=\"dealing-with-ordering-and-deletion-of-forms\">\n<h2>Hantering av beställning och borttagning av formulär<a class=\"heading-anchor\" href=\"#dealing-with-ordering-and-deletion-of-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/sv/6.1/ref/forms/formsets/#django.forms.formsets.formset_factory\" title=\"django.forms.formsets.formset_factory\"><code class=\"xref py py-func docutils literal notranslate\">formset_factory()</code></a> tillhandahåller två valfria parametrar <code class=\"docutils literal notranslate\">can_order</code> och <code class=\"docutils literal notranslate\">can_delete</code> för att hjälpa till med ordning av formulär i formulär och borttagning av formulär från ett formulär.</p>\n<section id=\"can-order\">\n<h3><code class=\"docutils literal notranslate\">kan beställa</code><a class=\"heading-anchor\" href=\"#can-order\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.can_order\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">can_order</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.can_order\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Standard: <code class=\"docutils literal notranslate\">False</code></p>\n<p>Låter dig skapa ett formulär med möjlighet att beställa:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> can_order<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    initial<span class=\"o\">=</span><span class=\"p\">[</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #2&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>    <span class=\"p\">]</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-title&quot; value=&quot;Article #1&quot; id=&quot;id_form-0-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-pub_date&quot; value=&quot;2008-05-10&quot; id=&quot;id_form-0-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-ORDER&quot;&gt;Order:&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;form-0-ORDER&quot; value=&quot;1&quot; id=&quot;id_form-0-ORDER&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-1-title&quot; value=&quot;Article #2&quot; id=&quot;id_form-1-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-1-pub_date&quot; value=&quot;2008-05-11&quot; id=&quot;id_form-1-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-ORDER&quot;&gt;Order:&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;form-1-ORDER&quot; value=&quot;2&quot; id=&quot;id_form-1-ORDER&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-2-title&quot; id=&quot;id_form-2-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-2-pub_date&quot; id=&quot;id_form-2-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-ORDER&quot;&gt;Order:&lt;/label&gt;&lt;input type=&quot;number&quot; name=&quot;form-2-ORDER&quot; id=&quot;id_form-2-ORDER&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>Detta lägger till ett extra fält i varje formulär. Det nya fältet heter <code class=\"docutils literal notranslate\">ORDER</code> och är ett <code class=\"docutils literal notranslate\">forms.IntegerField</code>. För de formulär som kom från de ursprungliga uppgifterna tilldelades de automatiskt ett numeriskt värde. Låt oss titta på vad som kommer att hända när användaren ändrar dessa värden:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;3&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #1&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2008-05-10&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-ORDER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2008-05-11&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-ORDER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-2-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #3&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-2-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2008-05-01&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-2-ORDER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;0&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    data<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    initial<span class=\"o\">=</span><span class=\"p\">[</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #2&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>    <span class=\"p\">],</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"o\">.</span>ordered_forms<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"o\">.</span>cleaned_data<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">{&#39;title&#39;: &#39;Article #3&#39;, &#39;pub_date&#39;: datetime.date(2008, 5, 1), &#39;ORDER&#39;: 0}</span>\n<span class=\"go\">{&#39;title&#39;: &#39;Article #2&#39;, &#39;pub_date&#39;: datetime.date(2008, 5, 11), &#39;ORDER&#39;: 1}</span>\n<span class=\"go\">{&#39;title&#39;: &#39;Article #1&#39;, &#39;pub_date&#39;: datetime.date(2008, 5, 10), &#39;ORDER&#39;: 2}</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet\" title=\"django.forms.formsets.BaseFormSet\"><code class=\"xref py py-class docutils literal notranslate\">BaseFormSet</code></a> tillhandahåller också attributet <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.ordering_widget\" title=\"django.forms.formsets.BaseFormSet.ordering_widget\"><code class=\"xref py py-attr docutils literal notranslate\">ordering_widget</code></a> och metoden <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.get_ordering_widget\" title=\"django.forms.formsets.BaseFormSet.get_ordering_widget\"><code class=\"xref py py-meth docutils literal notranslate\">get_ordering_widget()</code></a> som styr widgeten som används med <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.can_order\" title=\"django.forms.formsets.BaseFormSet.can_order\"><code class=\"xref py py-attr docutils literal notranslate\">can_order</code></a>.</p>\n<section id=\"ordering-widget\">\n<h4><code class=\"docutils literal notranslate\">beställning_widget</code><a class=\"heading-anchor\" href=\"#ordering-widget\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.ordering_widget\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">ordering_widget</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.ordering_widget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Standard: <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/widgets/#django.forms.NumberInput\" title=\"django.forms.NumberInput\"><code class=\"xref py py-class docutils literal notranslate\">NumberInput</code></a></p>\n<p>Ange <code class=\"docutils literal notranslate\">ordering_widget</code> för att specificera widgetklassen som ska användas med <code class=\"docutils literal notranslate\">can_order</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet<span class=\"p\">,</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    ordering_widget <span class=\"o\">=</span> HiddenInput\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">,</span> can_order<span class=\"o\">=</span><span class=\"kc\">True</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"get-ordering-widget\">\n<h4>hämta beställningswidget<a class=\"heading-anchor\" href=\"#get-ordering-widget\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.get_ordering_widget\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">get_ordering_widget</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.get_ordering_widget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Åsidosätt <code class=\"docutils literal notranslate\">get_ordering_widget()</code> om du behöver tillhandahålla en widgetinstans för användning med <code class=\"docutils literal notranslate\">can_order</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet<span class=\"p\">,</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">get_ordering_widget</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> HiddenInput<span class=\"p\">(</span>attrs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ordering&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">,</span> can_order<span class=\"o\">=</span><span class=\"kc\">True</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"can-delete\">\n<h3><code class=\"docutils literal notranslate\">kan radera</code><a class=\"heading-anchor\" href=\"#can-delete\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.can_delete\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">can_delete</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.can_delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Standard: <code class=\"docutils literal notranslate\">False</code></p>\n<p>Låter dig skapa en formuläruppsättning med möjlighet att välja formulär för borttagning:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> can_delete<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    initial<span class=\"o\">=</span><span class=\"p\">[</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #2&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>    <span class=\"p\">]</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-title&quot; value=&quot;Article #1&quot; id=&quot;id_form-0-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-pub_date&quot; value=&quot;2008-05-10&quot; id=&quot;id_form-0-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-DELETE&quot;&gt;Delete:&lt;/label&gt;&lt;input type=&quot;checkbox&quot; name=&quot;form-0-DELETE&quot; id=&quot;id_form-0-DELETE&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-1-title&quot; value=&quot;Article #2&quot; id=&quot;id_form-1-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-1-pub_date&quot; value=&quot;2008-05-11&quot; id=&quot;id_form-1-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-1-DELETE&quot;&gt;Delete:&lt;/label&gt;&lt;input type=&quot;checkbox&quot; name=&quot;form-1-DELETE&quot; id=&quot;id_form-1-DELETE&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-2-title&quot; id=&quot;id_form-2-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-2-pub_date&quot; id=&quot;id_form-2-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-2-DELETE&quot;&gt;Delete:&lt;/label&gt;&lt;input type=&quot;checkbox&quot; name=&quot;form-2-DELETE&quot; id=&quot;id_form-2-DELETE&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n<p>I likhet med <code class=\"docutils literal notranslate\">can_order</code> lägger detta till ett nytt fält till varje formulär som heter <code class=\"docutils literal notranslate\">DELETE</code> och är ett <code class=\"docutils literal notranslate\">forms.BooleanField</code>. När data kommer genom att markera något av delete-fälten kan du komma åt dem med <code class=\"docutils literal notranslate\">deleted_forms</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>data <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-TOTAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;3&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-INITIAL_FORMS&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #1&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2008-05-10&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-0-DELETE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;on&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #2&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2008-05-11&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-1-DELETE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-2-title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-2-pub_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;form-2-DELETE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    data<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    initial<span class=\"o\">=</span><span class=\"p\">[</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>        <span class=\"p\">{</span><span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Article #2&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">)},</span>\n<span class=\"gp\">... </span>    <span class=\"p\">],</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span>form<span class=\"o\">.</span>cleaned_data <span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"o\">.</span>deleted_forms<span class=\"p\">]</span>\n<span class=\"go\">[{&#39;title&#39;: &#39;Article #1&#39;, &#39;pub_date&#39;: datetime.date(2008, 5, 10), &#39;DELETE&#39;: True}]</span>\n</code></pre></div>\n<p>Om du använder en <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.models.BaseModelFormSet\" title=\"django.forms.models.BaseModelFormSet\"><code class=\"xref py py-class docutils literal notranslate\">ModelFormSet</code></a>, kommer modellinstanser för borttagna formulär att raderas när du anropar <code class=\"docutils literal notranslate\">formset.save()</code>.</p>\n<p>Om du anropar <code class=\"docutils literal notranslate\">formset.save(commit=False)</code> tas objekten inte bort automatiskt. Du måste anropa <code class=\"docutils literal notranslate\">delete()</code> på vart och ett av <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.models.BaseModelFormSet.deleted_objects\" title=\"django.forms.models.BaseModelFormSet.deleted_objects\"><code class=\"xref py py-attr docutils literal notranslate\">formset.deleted_objects</code></a> för att faktiskt ta bort dem:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>instances <span class=\"o\">=</span> formset<span class=\"o\">.</span>save<span class=\"p\">(</span>commit<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> obj <span class=\"ow\">in</span> formset<span class=\"o\">.</span>deleted_objects<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    obj<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<p>Om du å andra sidan använder ett vanligt <code class=\"docutils literal notranslate\">FormSet</code> är det upp till dig att hantera <code class=\"docutils literal notranslate\">formset.deleted_forms</code>, kanske i ditt formsets <code class=\"docutils literal notranslate\">save()</code>-metod, eftersom det inte finns någon allmän uppfattning om vad det innebär att ta bort ett formulär.</p>\n<p><a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet\" title=\"django.forms.formsets.BaseFormSet\"><code class=\"xref py py-class docutils literal notranslate\">BaseFormSet</code></a> tillhandahåller också attributet <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.deletion_widget\" title=\"django.forms.formsets.BaseFormSet.deletion_widget\"><code class=\"xref py py-attr docutils literal notranslate\">deletion_widget</code></a> och metoden <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.get_deletion_widget\" title=\"django.forms.formsets.BaseFormSet.get_deletion_widget\"><code class=\"xref py py-meth docutils literal notranslate\">get_deletion_widget()</code></a> som styr widgeten som används med <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.can_delete\" title=\"django.forms.formsets.BaseFormSet.can_delete\"><code class=\"xref py py-attr docutils literal notranslate\">can_delete</code></a>.</p>\n<section id=\"deletion-widget\">\n<h4><code class=\"docutils literal notranslate\">deletion_widget</code><a class=\"heading-anchor\" href=\"#deletion-widget\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.deletion_widget\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">deletion_widget</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.deletion_widget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Standard: <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/widgets/#django.forms.CheckboxInput\" title=\"django.forms.CheckboxInput\"><code class=\"xref py py-class docutils literal notranslate\">CheckboxInput</code></a></p>\n<p>Ange <code class=\"docutils literal notranslate\">deletion_widget</code> för att specificera widgetklassen som ska användas med <code class=\"docutils literal notranslate\">can_delete</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet<span class=\"p\">,</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    deletion_widget <span class=\"o\">=</span> HiddenInput\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">,</span> can_delete<span class=\"o\">=</span><span class=\"kc\">True</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"get-deletion-widget\">\n<h4><code class=\"docutils literal notranslate\">get_deletion_widget</code><a class=\"heading-anchor\" href=\"#get-deletion-widget\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.get_deletion_widget\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">get_deletion_widget</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.get_deletion_widget\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Åsidosätt <code class=\"docutils literal notranslate\">get_deletion_widget()</code> om du behöver tillhandahålla en widgetinstans för användning med <code class=\"docutils literal notranslate\">can_delete</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet<span class=\"p\">,</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">get_deletion_widget</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> HiddenInput<span class=\"p\">(</span>attrs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;deletion&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    ArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">,</span> can_delete<span class=\"o\">=</span><span class=\"kc\">True</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"can-delete-extra\">\n<h3><code class=\"docutils literal notranslate\">kan_radera_extra</code><a class=\"heading-anchor\" href=\"#can-delete-extra\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.can_delete_extra\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">can_delete_extra</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.can_delete_extra\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Standard: <code class=\"docutils literal notranslate\">True</code></p>\n<p>När du anger <code class=\"docutils literal notranslate\">can_delete=True</code> och specificerar <code class=\"docutils literal notranslate\">can_delete_extra=False</code> tas möjligheten att radera extra formulär bort.</p>\n</section>\n</section>\n<section id=\"adding-additional-fields-to-a-formset\">\n<h2>Lägga till ytterligare fält i en formuläruppsättning<a class=\"heading-anchor\" href=\"#adding-additional-fields-to-a-formset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du behöver lägga till ytterligare fält i formuläret kan detta enkelt göras. Basklassen för formuläret innehåller metoden <code class=\"docutils literal notranslate\">add_fields</code>. Du kan åsidosätta denna metod för att lägga till dina egna fält eller till och med omdefiniera standardfälten/attributen för order- och borttagningsfälten:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">add_fields</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> form<span class=\"p\">,</span> index<span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>add_fields<span class=\"p\">(</span>form<span class=\"p\">,</span> index<span class=\"p\">)</span>\n<span class=\"gp\">... </span>        form<span class=\"o\">.</span>fields<span class=\"p\">[</span><span class=\"s2\">&quot;my_field&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> form <span class=\"ow\">in</span> formset<span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span>form<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-title&quot;&gt;Title:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-title&quot; id=&quot;id_form-0-title&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-pub_date&quot;&gt;Pub date:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-pub_date&quot; id=&quot;id_form-0-pub_date&quot;&gt;&lt;/div&gt;</span>\n<span class=\"go\">&lt;div&gt;&lt;label for=&quot;id_form-0-my_field&quot;&gt;My field:&lt;/label&gt;&lt;input type=&quot;text&quot; name=&quot;form-0-my_field&quot; id=&quot;id_form-0-my_field&quot;&gt;&lt;/div&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"passing-custom-parameters-to-formset-forms\">\n<span id=\"custom-formset-form-kwargs\"></span><h2>Överföra anpassade parametrar till formulär<a class=\"heading-anchor\" href=\"#passing-custom-parameters-to-formset-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ibland tar din formulärklass anpassade parametrar, till exempel <code class=\"docutils literal notranslate\">MyArticleForm</code>. Du kan skicka den här parametern när du instansierar formuläret:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">MyArticleForm</span><span class=\"p\">(</span>ArticleForm<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span>args<span class=\"p\">,</span> user<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n<span class=\"gp\">... </span>        <span class=\"bp\">self</span><span class=\"o\">.</span>user <span class=\"o\">=</span> user\n<span class=\"gp\">... </span>        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span>args<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>MyArticleForm<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>form_kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;user&quot;</span><span class=\"p\">:</span> request<span class=\"o\">.</span>user<span class=\"p\">})</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">form_kwargs</code> kan också bero på den specifika formulärinstansen. Basklassen formset tillhandahåller metoden <code class=\"docutils literal notranslate\">get_form_kwargs</code>. Metoden tar ett enda argument - indexet för formuläret i formuläruppsättningen. Indexet är <code class=\"docutils literal notranslate\">None</code> för <a class=\"reference internal\" href=\"#empty-form\"><span class=\"std std-ref\">tomt_formulär</span></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> BaseFormSet\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">class</span> <span class=\"nc\">BaseArticleFormSet</span><span class=\"p\">(</span>BaseFormSet<span class=\"p\">):</span>\n<span class=\"gp\">... </span>    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> index<span class=\"p\">):</span>\n<span class=\"gp\">... </span>        kwargs <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>get_form_kwargs<span class=\"p\">(</span>index<span class=\"p\">)</span>\n<span class=\"gp\">... </span>        kwargs<span class=\"p\">[</span><span class=\"s2\">&quot;custom_kwarg&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> index\n<span class=\"gp\">... </span>        <span class=\"k\">return</span> kwargs\n<span class=\"gp\">...</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span>ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>MyArticleForm<span class=\"p\">,</span> formset<span class=\"o\">=</span>BaseArticleFormSet<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"customizing-a-formset-s-prefix\">\n<span id=\"formset-prefix\"></span><h2>Anpassa prefixet för ett formulär<a class=\"heading-anchor\" href=\"#customizing-a-formset-s-prefix\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>I den renderade HTML-filen inkluderar formulär ett prefix på varje fältnamn. Som standard är prefixet <code class=\"docutils literal notranslate\">'form'</code>, men det kan anpassas med hjälp av formulärets <code class=\"docutils literal notranslate\">prefix</code>-argument.</p>\n<p>I standardfallet kan du till exempel se:</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html 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_form-0-title&quot;</span><span class=\"p\">&gt;</span>Title:<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;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;form-0-title&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_form-0-title&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Men med <code class=\"docutils literal notranslate\">ArticleFormset(prefix='article')</code> blir det så:</p>\n<div class=\"code-block\" data-language=\"html\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Html</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Html 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_article-0-title&quot;</span><span class=\"p\">&gt;</span>Title:<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;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;article-0-title&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;id_article-0-title&quot;</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Detta är användbart om du vill <a class=\"reference internal\" href=\"#multiple-formsets-in-view\"><span class=\"std std-ref\">använda mer än ett formulär i en vy</span></a>.</p>\n</section>\n<section id=\"using-a-formset-in-views-and-templates\">\n<span id=\"formset-rendering\"></span><h2>Använda en formulärsats i vyer och mallar<a class=\"heading-anchor\" href=\"#using-a-formset-in-views-and-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Formset har följande attribut och metoder som är associerade med rendering:</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.renderer\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">renderer</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.renderer\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Anger vilken <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/renderers/\"><span class=\"doc\">renderer</span></a> som ska användas för formuläret. Standard är den rendering som anges av inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\">FORM_RENDERER</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.template_name\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">template_name</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på den mall som återges om formuläret omvandlas till en sträng, t.ex. via <code class=\"docutils literal notranslate\">print(formset)</code> eller i en mall via <code class=\"docutils literal notranslate\">{{ formset }}</code>.</p>\n<p>Som standard en egenskap som returnerar värdet av renderingsprogrammets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/renderers/#django.forms.renderers.BaseRenderer.formset_template_name\" title=\"django.forms.renderers.BaseRenderer.formset_template_name\"><code class=\"xref py py-attr docutils literal notranslate\">formset_template_name</code></a>. Du kan ange det som ett mallnamn i form av en sträng för att åsidosätta det för en viss formulärklass.</p>\n<p>Denna mall kommer att användas för att rendera formuläruppsättningens hanteringsformulär och sedan varje formulär i formuläruppsättningen enligt den mall som definieras av formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.template_name\" title=\"django.forms.Form.template_name\"><code class=\"xref py py-attr docutils literal notranslate\">template_name</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.template_name_div\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">template_name_div</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.template_name_div\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på den mall som används vid anrop av <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_div\" title=\"django.forms.formsets.BaseFormSet.as_div\"><code class=\"xref py py-meth docutils literal notranslate\">as_div()</code></a>. Som standard är detta <code class=\"docutils literal notranslate\">&quot;django/forms/formsets/div.html&quot;</code>. Den här mallen renderar formuläruppsättningens hanteringsformulär och sedan varje formulär i formuläruppsättningen enligt formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.as_div\" title=\"django.forms.Form.as_div\"><code class=\"xref py py-meth docutils literal notranslate\">as_div()</code></a>-metod.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.template_name_p\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">template_name_p</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.template_name_p\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på den mall som används vid anrop av <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_p\" title=\"django.forms.formsets.BaseFormSet.as_p\"><code class=\"xref py py-meth docutils literal notranslate\">as_p()</code></a>. Som standard är detta <code class=\"docutils literal notranslate\">&quot;django/forms/formsets/p.html&quot;</code>. Den här mallen renderar formuläruppsättningens hanteringsformulär och sedan varje formulär i formuläruppsättningen enligt formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.as_p\" title=\"django.forms.Form.as_p\"><code class=\"xref py py-meth docutils literal notranslate\">as_p()</code></a>-metod.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.template_name_table\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">template_name_table</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.template_name_table\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på den mall som används vid anrop av <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_table\" title=\"django.forms.formsets.BaseFormSet.as_table\"><code class=\"xref py py-meth docutils literal notranslate\">as_table()</code></a>. Som standard är detta <code class=\"docutils literal notranslate\">&quot;django/forms/formsets/table.html&quot;</code>. Den här mallen renderar formuläruppsättningens hanteringsformulär och sedan varje formulär i formuläruppsättningen enligt formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.as_table\" title=\"django.forms.Form.as_table\"><code class=\"xref py py-meth docutils literal notranslate\">as_table()</code></a>-metod.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.template_name_ul\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">template_name_ul</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.template_name_ul\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Namnet på den mall som används vid anrop av <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_ul\" title=\"django.forms.formsets.BaseFormSet.as_ul\"><code class=\"xref py py-meth docutils literal notranslate\">as_ul()</code></a>. Som standard är detta <code class=\"docutils literal notranslate\">&quot;django/forms/formsets/ul.html&quot;</code>. Den här mallen renderar formuläruppsättningens hanteringsformulär och sedan varje formulär i formuläruppsättningen enligt formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.as_ul\" title=\"django.forms.Form.as_ul\"><code class=\"xref py py-meth docutils literal notranslate\">as_ul()</code></a>-metod.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.get_context\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">get_context</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.get_context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar kontexten för rendering av en formulärsats i en mall.</p>\n<p>Den tillgängliga kontexten är:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">formset</code> : Instansen av formuläret.</p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.render\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">render</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">template_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">context<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">renderer<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.render\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renderingsmetoden anropas av <code class=\"docutils literal notranslate\">__str__</code> samt metoderna <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_div\" title=\"django.forms.formsets.BaseFormSet.as_div\"><code class=\"xref py py-meth docutils literal notranslate\">as_div()</code></a>, <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_p\" title=\"django.forms.formsets.BaseFormSet.as_p\"><code class=\"xref py py-meth docutils literal notranslate\">as_p()</code></a>, <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_ul\" title=\"django.forms.formsets.BaseFormSet.as_ul\"><code class=\"xref py py-meth docutils literal notranslate\">as_ul()</code></a> och <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.as_table\" title=\"django.forms.formsets.BaseFormSet.as_table\"><code class=\"xref py py-meth docutils literal notranslate\">as_table()</code></a>. Alla argument är valfria och kommer som standard att vara:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">template_name</code>: <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.template_name\" title=\"django.forms.formsets.BaseFormSet.template_name\"><code class=\"xref py py-attr docutils literal notranslate\">template_name</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">context</code>: Värde som returneras av <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.get_context\" title=\"django.forms.formsets.BaseFormSet.get_context\"><code class=\"xref py py-meth docutils literal notranslate\">get_context()</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">renderer</code>: Värde som returneras av <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.renderer\" title=\"django.forms.formsets.BaseFormSet.renderer\"><code class=\"xref py py-attr docutils literal notranslate\">renderer</code></a></p></li>\n</ul>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.as_div\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">as_div</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.as_div\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renderar formuläret med mallen <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.template_name_div\" title=\"django.forms.formsets.BaseFormSet.template_name_div\"><code class=\"xref py py-attr docutils literal notranslate\">template_name_div</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.as_p\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">as_p</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.as_p\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renderar formuläret med mallen <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.template_name_p\" title=\"django.forms.formsets.BaseFormSet.template_name_p\"><code class=\"xref py py-attr docutils literal notranslate\">template_name_p</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.as_table\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">as_table</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.as_table\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renderar formuläret med mallen <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.template_name_table\" title=\"django.forms.formsets.BaseFormSet.template_name_table\"><code class=\"xref py py-attr docutils literal notranslate\">template_name_table</code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.formsets.BaseFormSet.as_ul\">\n<span class=\"sig-prename descclassname\">BaseFormSet.</span><span class=\"sig-name descname\">as_ul</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.formsets.BaseFormSet.as_ul\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renderar formuläret med mallen <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.template_name_ul\" title=\"django.forms.formsets.BaseFormSet.template_name_ul\"><code class=\"xref py py-attr docutils literal notranslate\">template_name_ul</code></a>.</p>\n</dd></dl>\n\n<p>Att använda en formset i en vy skiljer sig inte mycket från att använda en vanlig <code class=\"docutils literal notranslate\">Form</code>-klass. Det enda du vill vara medveten om är att se till att använda hanteringsformuläret inuti mallen. Låt oss titta på ett exempel på en vy:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm\n\n\n<span class=\"k\">def</span> <span class=\"nf\">manage_articles</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">)</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>request<span class=\"o\">.</span>POST<span class=\"p\">,</span> request<span class=\"o\">.</span>FILES<span class=\"p\">)</span>\n        <span class=\"k\">if</span> formset<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            <span class=\"c1\"># do something with the formset.cleaned_data</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">()</span>\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>request<span class=\"p\">,</span> <span class=\"s2\">&quot;manage_articles.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;formset&quot;</span><span class=\"p\">:</span> formset<span class=\"p\">})</span>\n</code></pre></div>\n<p>Mallen <code class=\"docutils literal notranslate\">manage_articles.html</code> kan se ut så här:</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\">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=\"nv\">formset.management_form</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">table</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">form</span> <span class=\"k\">in</span> <span class=\"nv\">formset</span> <span class=\"cp\">%}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">table</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>Det finns dock en liten genväg till ovanstående genom att låta själva formuläret hantera hanteringsformuläret:</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\">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\">table</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">formset</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">table</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>Ovanstående anropar metoden <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.render\" title=\"django.forms.formsets.BaseFormSet.render\"><code class=\"xref py py-meth docutils literal notranslate\">BaseFormSet.render()</code></a> på klassen formset. Detta renderar formuläret med hjälp av den mall som anges av attributet <a class=\"reference internal\" href=\"#django.forms.formsets.BaseFormSet.template_name\" title=\"django.forms.formsets.BaseFormSet.template_name\"><code class=\"xref py py-attr docutils literal notranslate\">template_name</code></a>. På samma sätt som för formulär, kommer formuläret som standard att renderas <code class=\"docutils literal notranslate\">as_div</code>, med andra hjälpmetoder för <code class=\"docutils literal notranslate\">as_p</code>, <code class=\"docutils literal notranslate\">as_ul</code> och <code class=\"docutils literal notranslate\">as_table</code> tillgängliga. Renderingen av formuläret kan anpassas genom att ange attributet <code class=\"docutils literal notranslate\">template_name</code>, eller mer allmänt genom <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/renderers/#overriding-built-in-formset-templates\"><span class=\"std std-ref\">overriding the default template</span></a>.</p>\n<section id=\"manually-rendered-can-delete-and-can-order\">\n<span id=\"id4\"></span><h3>Manuellt återgivna <code class=\"docutils literal notranslate\">can_delete</code> och <code class=\"docutils literal notranslate\">can_order</code><a class=\"heading-anchor\" href=\"#manually-rendered-can-delete-and-can-order\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du manuellt renderar fält i mallen kan du rendera parametern <code class=\"docutils literal notranslate\">can_delete</code> med <code class=\"docutils literal notranslate\">{{ form.DELETE }}</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\">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=\"nv\">formset.management_form</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">form</span> <span class=\"k\">in</span> <span class=\"nv\">formset</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.title</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.pub_date</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">formset.can_delete</span> <span class=\"cp\">%}</span>\n                <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.DELETE</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;/</span><span class=\"nt\">ul</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\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>På samma sätt, om formuläret har möjlighet att beställa (<code class=\"docutils literal notranslate\">can_order=True</code>), är det möjligt att rendera det med <code class=\"docutils literal notranslate\">{{ form.ORDER }}</code>.</p>\n</section>\n<section id=\"using-more-than-one-formset-in-a-view\">\n<span id=\"multiple-formsets-in-view\"></span><h3>Använda mer än en formuläruppsättning i en vy<a class=\"heading-anchor\" href=\"#using-more-than-one-formset-in-a-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan använda mer än en formuläruppsättning i en vy om du vill. Formsets lånar mycket av sitt beteende från formulär. Med detta sagt kan du använda <code class=\"docutils literal notranslate\">prefix</code> för att prefixera formulärfältsnamn med ett givet värde så att mer än ett formulär kan skickas till en vy utan att namnen krockar. Låt oss ta en titt på hur detta kan åstadkommas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> formset_factory\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> render\n<span class=\"kn\">from</span> <span class=\"nn\">myapp.forms</span> <span class=\"kn\">import</span> ArticleForm<span class=\"p\">,</span> BookForm\n\n\n<span class=\"k\">def</span> <span class=\"nf\">manage_articles</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    ArticleFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>ArticleForm<span class=\"p\">)</span>\n    BookFormSet <span class=\"o\">=</span> formset_factory<span class=\"p\">(</span>BookForm<span class=\"p\">)</span>\n    <span class=\"k\">if</span> request<span class=\"o\">.</span>method <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        article_formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>request<span class=\"o\">.</span>POST<span class=\"p\">,</span> request<span class=\"o\">.</span>FILES<span class=\"p\">,</span> prefix<span class=\"o\">=</span><span class=\"s2\">&quot;articles&quot;</span><span class=\"p\">)</span>\n        book_formset <span class=\"o\">=</span> BookFormSet<span class=\"p\">(</span>request<span class=\"o\">.</span>POST<span class=\"p\">,</span> request<span class=\"o\">.</span>FILES<span class=\"p\">,</span> prefix<span class=\"o\">=</span><span class=\"s2\">&quot;books&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> article_formset<span class=\"o\">.</span>is_valid<span class=\"p\">()</span> <span class=\"ow\">and</span> book_formset<span class=\"o\">.</span>is_valid<span class=\"p\">():</span>\n            <span class=\"c1\"># do something with the cleaned_data on the formsets.</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        article_formset <span class=\"o\">=</span> ArticleFormSet<span class=\"p\">(</span>prefix<span class=\"o\">=</span><span class=\"s2\">&quot;articles&quot;</span><span class=\"p\">)</span>\n        book_formset <span class=\"o\">=</span> BookFormSet<span class=\"p\">(</span>prefix<span class=\"o\">=</span><span class=\"s2\">&quot;books&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> render<span class=\"p\">(</span>\n        request<span class=\"p\">,</span>\n        <span class=\"s2\">&quot;manage_articles.html&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;article_formset&quot;</span><span class=\"p\">:</span> article_formset<span class=\"p\">,</span>\n            <span class=\"s2\">&quot;book_formset&quot;</span><span class=\"p\">:</span> book_formset<span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>Du skulle sedan rendera formuläruppsättningarna som normalt. Det är viktigt att påpeka att du måste skicka <code class=\"docutils literal notranslate\">prefix</code> i både POST- och icke-POST-fallen så att det renderas och bearbetas korrekt.</p>\n<p>Varje formuläruppsättnings <a class=\"reference internal\" href=\"#formset-prefix\"><span class=\"std std-ref\">prefix</span></a> ersätter standardprefixet <code class=\"docutils literal notranslate\">form</code> som läggs till i varje fälts HTML-attribut <code class=\"docutils literal notranslate\">name</code> och <code class=\"docutils literal notranslate\">id</code>.</p>\n</section>\n</section>","rootId":"formsets","toc":[{"title":"Använda initiala data med en formulärset","anchor":"using-initial-data-with-a-formset","children":[]},{"title":"Begränsa det maximala antalet formulär","anchor":"limiting-the-maximum-number-of-forms","children":[]},{"title":"Begränsning av det maximala antalet instansierade formulär","anchor":"limiting-the-maximum-number-of-instantiated-forms","children":[]},{"title":"Validering av formulär","anchor":"formset-validation","children":[{"title":"Förståelse för ”Managementformuläret","anchor":"understanding-the-managementform","children":[]},{"title":"total_form_count och initial_form_count","anchor":"total-form-count-and-initial-form-count","children":[]},{"title":"tomt_formulär","anchor":"empty-form","children":[]},{"title":"Felmeddelanden","anchor":"error-messages","children":[]},{"title":"Anpassad validering av formulär","anchor":"custom-formset-validation","children":[]}]},{"title":"Validering av antalet formulär i en formuläruppsättning","anchor":"validating-the-number-of-forms-in-a-formset","children":[{"title":"validera_max","anchor":"validate-max","children":[]},{"title":"validera_min","anchor":"validate-min","children":[]}]},{"title":"Hantering av beställning och borttagning av formulär","anchor":"dealing-with-ordering-and-deletion-of-forms","children":[{"title":"kan beställa","anchor":"can-order","children":[{"title":"beställning_widget","anchor":"ordering-widget","children":[]},{"title":"hämta beställningswidget","anchor":"get-ordering-widget","children":[]}]},{"title":"kan radera","anchor":"can-delete","children":[{"title":"deletion_widget","anchor":"deletion-widget","children":[]},{"title":"get_deletion_widget","anchor":"get-deletion-widget","children":[]}]},{"title":"kan_radera_extra","anchor":"can-delete-extra","children":[]}]},{"title":"Lägga till ytterligare fält i en formuläruppsättning","anchor":"adding-additional-fields-to-a-formset","children":[]},{"title":"Överföra anpassade parametrar till formulär","anchor":"passing-custom-parameters-to-formset-forms","children":[]},{"title":"Anpassa prefixet för ett formulär","anchor":"customizing-a-formset-s-prefix","children":[]},{"title":"Använda en formulärsats i vyer och mallar","anchor":"using-a-formset-in-views-and-templates","children":[{"title":"Manuellt återgivna can_delete och can_order","anchor":"manually-rendered-can-delete-and-can-order","children":[]},{"title":"Använda mer än en formuläruppsättning i en vy","anchor":"using-more-than-one-formset-in-a-view","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"},{"docname":"topics/forms/index","title":"Arbeta med formulär","url":"/sv/6.1/topics/forms/"}],"prev":{"docname":"topics/forms/index","title":"Arbeta med formulär","url":"/sv/6.1/topics/forms/"},"next":{"docname":"topics/forms/modelforms","title":"Skapa formulär från modeller","url":"/sv/6.1/topics/forms/modelforms/"},"formats":{"html":"/sv/6.1/topics/forms/formsets/","markdown":"/sv/6.1/topics/forms/formsets.md","json":"/sv/6.1/topics/forms/formsets.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/forms/formsets.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/forms/formsets/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}