{"title":"Arbeta med formulär","version":"6.1","locale":"sv","docname":"topics/forms/index","url":"/sv/6.1/topics/forms/","canonical":"https://djangodocs.dev/sv/6.1/topics/forms/","summary":"Om detta dokument Detta dokument ger en introduktion till grunderna i webbformulär och hur de hanteras i Django. För en mer detaljerad titt på specifika områden av…","html":"<h1>Arbeta med formulär<a class=\"heading-anchor\" href=\"#working-with-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition-about-this-document admonition\">\n<p class=\"admonition-title\">Om detta dokument</p>\n<p>Detta dokument ger en introduktion till grunderna i webbformulär och hur de hanteras i Django. För en mer detaljerad titt på specifika områden av formulär-API:et, se <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/\"><span class=\"doc\">API för formulär</span></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/\"><span class=\"doc\">Formulärfält</span></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/validation/\"><span class=\"doc\">Validering av formulär och fält</span></a>.</p>\n</aside>\n<p>Om du inte planerar att bygga webbplatser och applikationer som inte gör något annat än att publicera innehåll och inte accepterar inmatning från dina besökare, kommer du att behöva förstå och använda formulär.</p>\n<p>Django tillhandahåller en rad verktyg och bibliotek som hjälper dig att bygga formulär för att acceptera inmatning från webbplatsbesökare och sedan bearbeta och svara på inmatningen.</p>\n<section id=\"html-forms\">\n<h2>HTML-formulär<a class=\"heading-anchor\" href=\"#html-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>I HTML är ett formulär en samling element inuti <code class=\"docutils literal notranslate\"><span class=\"pre\">.&lt;form&gt;.&lt;/form&gt;.</span></code> som gör det möjligt för en besökare att göra saker som att skriva in text, välja alternativ, manipulera objekt eller kontroller och så vidare, och sedan skicka tillbaka informationen till servern.</p>\n<p>Vissa av dessa formulärgränssnittselement - textinmatning eller kryssrutor - är inbyggda i själva HTML. Andra är mycket mer komplexa; ett gränssnitt som visar en datumväljare eller låter dig flytta ett skjutreglage eller manipulera kontroller använder vanligtvis JavaScript och CSS samt HTML-formulär <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> element för att uppnå dessa effekter.</p>\n<p>Förutom dess <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code>-element måste ett formulär ange två saker:</p>\n<ul class=\"simple\">\n<li><p><em>där</em>: den URL till vilken de data som motsvarar användarens inmatning ska returneras</p></li>\n<li><p><em>how</em>: den HTTP-metod som data ska returneras med</p></li>\n</ul>\n<p>Som ett exempel innehåller inloggningsformuläret för Django-administratören flera <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code>-element: ett av <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;text&quot;</span></code> för användarnamnet, ett av <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;password&quot;</span></code> för lösenordet och ett av <code class=\"docutils literal notranslate\"><span class=\"pre\">type=&quot;submit&quot;</span></code> för knappen ”Logga in”. Det innehåller också några dolda textfält som användaren inte ser, som Django använder för att avgöra vad som ska göras härnäst.</p>\n<p>Den talar också om för webbläsaren att formulärdata ska skickas till den URL som anges i <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">action</span></code> attribut - <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code> - och att det ska skickas med hjälp av HTTP-mekanismen som anges av <code class=\"docutils literal notranslate\"><span class=\"pre\">method</span></code> attribut - <code class=\"docutils literal notranslate\"><span class=\"pre\">post</span></code>.</p>\n<p>När elementet <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;submit&quot;</span> <span class=\"pre\">value=&quot;Log</span> <span class=\"pre\">in&quot;&gt;</span></code> utlöses, returneras data till <code class=\"docutils literal notranslate\"><span class=\"pre\">/admin/</span></code>.</p>\n<section id=\"get-and-post\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code><a class=\"heading-anchor\" href=\"#get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> är de enda HTTP-metoder som ska användas när man hanterar formulär.</p>\n<p>Djangos inloggningsformulär returneras med hjälp av metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, där webbläsaren buntar ihop formulärdata, kodar den för överföring, skickar den till servern och sedan får tillbaka svaret.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> samlar däremot de data som skickas i en sträng och använder denna för att skapa en URL. URL:en innehåller adressen dit data ska skickas, samt datanycklar och värden. Du kan se detta i aktion om du gör en sökning i Django-dokumentationen, som kommer att producera en URL av formen <code class=\"docutils literal notranslate\"><span class=\"pre\">https://docs.djangoproject.com/search/?q=forms&amp;release=1</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> används vanligtvis för olika ändamål.</p>\n<p>Alla förfrågningar som kan användas för att ändra systemets tillstånd - t.ex. en förfrågan som gör ändringar i databasen - bör använda <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> bör endast användas för förfrågningar som inte påverkar systemets tillstånd.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> skulle också vara olämpligt för ett lösenordsformulär, eftersom lösenordet skulle visas i URL:en och därmed också i webbläsarhistoriken och serverloggarna, allt i klartext. Det är inte heller lämpligt för stora datamängder eller för binära data, t.ex. en bild. En webbapplikation som använder <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>-begäranden för administratörsformulär är en säkerhetsrisk: det kan vara lätt för en angripare att efterlikna ett formulärs begäran för att få tillgång till känsliga delar av systemet. <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, i kombination med andra skydd som Djangos <a class=\"reference internal\" href=\"/sv/6.1/ref/csrf/\"><span class=\"doc\">CSRF-skydd</span></a> ger mer kontroll över åtkomsten.</p>\n<p>Å andra sidan är <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> lämpligt för saker som ett webbsökningsformulär, eftersom de webbadresser som representerar en <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>-begäran enkelt kan bokmärkas, delas eller skickas igen.</p>\n</section>\n</section>\n<section id=\"django-s-role-in-forms\">\n<h2>Djangos roll i formulär<a class=\"heading-anchor\" href=\"#django-s-role-in-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Att hantera formulär är en komplex verksamhet. Tänk på Djangos admin, där många dataobjekt av flera olika typer kan behöva förberedas för visning i ett formulär, återges som HTML, redigeras med hjälp av ett bekvämt gränssnitt, returneras till servern, valideras och rensas upp och sedan sparas eller skickas vidare för vidare bearbetning.</p>\n<p>Djangos formulärfunktionalitet kan förenkla och automatisera stora delar av detta arbete, och kan dessutom göra det på ett säkrare sätt än vad de flesta programmerare skulle kunna göra i kod som de själva skrivit.</p>\n<p>Django hanterar tre olika delar av arbetet med formulär:</p>\n<ul class=\"simple\">\n<li><p>förbereda och omstrukturera data för att göra dem redo för rendering</p></li>\n<li><p>skapa HTML-formulär för data</p></li>\n<li><p>ta emot och bearbeta inlämnade formulär och uppgifter från kunden</p></li>\n</ul>\n<p>Det är <em>möjligt</em> att skriva kod som gör allt detta manuellt, men Django kan ta hand om allt åt dig.</p>\n</section>\n<section id=\"forms-in-django\">\n<h2>Formulär i Django<a class=\"heading-anchor\" href=\"#forms-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vi har beskrivit HTML-formulär kortfattat, men en HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> är bara en del av det maskineri som krävs.</p>\n<p>I samband med en webbapplikation kan ”formulär” hänvisa till HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>, eller till Django <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> som producerar det, eller till de strukturerade data som returneras när det skickas in, eller till den genomgående fungerande samlingen av dessa delar.</p>\n<section id=\"the-django-form-class\">\n<h3>Django <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>-klassen<a class=\"heading-anchor\" href=\"#the-django-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kärnan i detta system av komponenter är Djangos klass <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>. På ungefär samma sätt som en Django-modell beskriver den logiska strukturen hos ett objekt, dess beteende och hur dess delar representeras för oss, beskriver en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>-klass ett formulär och bestämmer hur det fungerar och ser ut.</p>\n<p>På liknande sätt som en modellklass fält mappar till databasfält, mappar en formulärklass fält till HTML-formulär <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> element. (En <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> mappar en modellklass fält till HTML-formulär <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> element via en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>; detta är vad Django admin är baserad på)</p>\n<p>Fälten i ett formulär är själva klasser; de hanterar formulärdata och utför validering när ett formulär skickas in. En <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.DateField\" title=\"django.forms.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> och en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> hanterar mycket olika typer av data och måste göra olika saker med dem.</p>\n<p>Ett formulärfält representeras för en användare i webbläsaren som en HTML-”widget” - en del av användargränssnittet. Varje fälttyp har en lämplig standard <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/widgets/\"><span class=\"doc\">Widget-klass</span></a>, men dessa kan åsidosättas efter behov.</p>\n</section>\n<section id=\"instantiating-processing-and-rendering-forms\">\n<h3>Instansiering, bearbetning och rendering av formulär<a class=\"heading-anchor\" href=\"#instantiating-processing-and-rendering-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När vi renderar ett objekt i Django gör vi det i allmänhet:</p>\n<ol class=\"arabic simple\">\n<li><p>få tag på den i vyn (hämta den från databasen, till exempel)</p></li>\n<li><p>skicka det till mallkontexten</p></li>\n<li><p>expandera den till HTML-markup med hjälp av mallvariabler</p></li>\n</ol>\n<p>Rendering av ett formulär i en mall innebär nästan samma arbete som rendering av alla andra typer av objekt, men det finns några viktiga skillnader.</p>\n<p>När det gäller en modellinstans som inte innehåller några data skulle det sällan eller aldrig vara användbart att göra något med den i en mall. Å andra sidan är det helt logiskt att rendera ett obefolkat formulär - det är vad vi gör när vi vill att användaren ska fylla i det.</p>\n<p>Så när vi hanterar en modellinstans i en vy hämtar vi den vanligtvis från databasen. När vi hanterar ett formulär instansierar vi det vanligtvis i vyn.</p>\n<p>När vi instansierar ett formulär kan vi välja att lämna det tomt eller fylla i det i förväg, till exempel med:</p>\n<ul class=\"simple\">\n<li><p>data från en sparad modellinstans (som i fallet med adminformulär för redigering)</p></li>\n<li><p>uppgifter som vi har samlat in från andra källor</p></li>\n<li><p>data som mottagits från en tidigare HTML-formulärinlämning</p></li>\n</ul>\n<p>Det sista av dessa fall är det mest intressanta, eftersom det är det som gör det möjligt för användare att inte bara läsa en webbplats utan också skicka information tillbaka till den.</p>\n</section>\n</section>\n<section id=\"building-a-form\">\n<h2>Bygga upp ett formulär<a class=\"heading-anchor\" href=\"#building-a-form\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"the-work-that-needs-to-be-done\">\n<h3>Det arbete som behöver göras<a class=\"heading-anchor\" href=\"#the-work-that-needs-to-be-done\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Anta att du vill skapa ett enkelt formulär på din webbplats för att få fram användarens namn. Du skulle behöva något liknande i din mall:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">current_name</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;OK&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Detta säger till webbläsaren att returnera formulärdata till URL:en <code class=\"docutils literal notranslate\"><span class=\"pre\">/ditt-namn/</span></code>, med hjälp av metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>. Det kommer att visa ett textfält, märkt ”Ditt namn:”, och en knapp märkt ”OK”. Om mallkontexten innehåller variabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code> kommer den att användas för att förfylla fältet <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>.</p>\n<p>Du behöver en vy som renderar mallen som innehåller HTML-formuläret, och som kan tillhandahålla fältet <code class=\"docutils literal notranslate\"><span class=\"pre\">current_name</span></code> på lämpligt sätt.</p>\n<p>När formuläret skickas in kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>-begäran som skickas till servern att innehålla formulärdata.</p>\n<p>Nu behöver du också en vy som motsvarar URL:en ”ditt namn” och som hittar lämpliga nyckel-/värdepar i begäran och sedan bearbetar dem.</p>\n<p>Det här är ett mycket enkelt formulär. I praktiken kan ett formulär innehålla dussintals eller hundratals fält, varav många kan behöva fyllas i i förväg, och vi kan förvänta oss att användaren arbetar igenom redigera-sänd-cykeln flera gånger innan han avslutar åtgärden.</p>\n<p>Vi kan kräva att viss validering sker i webbläsaren, till och med innan formuläret skickas in; vi kanske vill använda mycket mer komplexa fält, som gör att användaren kan göra saker som att välja datum från en kalender och så vidare.</p>\n<p>I det här läget är det mycket enklare att få Django att göra det mesta av det här arbetet åt oss.</p>\n</section>\n<section id=\"building-a-form-in-django\">\n<h3>Skapa ett formulär i Django<a class=\"heading-anchor\" href=\"#building-a-form-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"the-form-class\">\n<h4>Klassen :class:<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Form<a class=\"heading-anchor\" href=\"#the-form-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Vi vet redan hur vi vill att vårt HTML-formulär ska se ut. Vår startpunkt för det i Django är detta:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">NameForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">your_name</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s2\">&quot;Your name&quot;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Detta definierar en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>-klass med ett enda fält (<code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>). Vi har använt en människovänlig etikett för fältet, som kommer att visas i <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> när det renderas (även om <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.Field.label\" title=\"django.forms.Field.label\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label</span></code></a> som vi angav i det här fallet faktiskt är samma som skulle genereras automatiskt om vi hade utelämnat den).</p>\n<p>Fältets maximalt tillåtna längd definieras av <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.CharField.max_length\" title=\"django.forms.CharField.max_length\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">max_length</span></code></a>. Detta gör två saker. Det sätter en <code class=\"docutils literal notranslate\"><span class=\"pre\">maxlength=&quot;100&quot;</span></code> på HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> (så att webbläsaren ska förhindra användaren från att ange mer än det antalet tecken i första hand). Det betyder också att när Django får tillbaka formuläret från webbläsaren, kommer det att validera längden på data.</p>\n<p>A <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a> instance has an <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> method, which runs\nvalidation routines for all its fields. When this method is called, if all\nfields contain valid data, it will:</p>\n<ul class=\"simple\">\n<li><p>returnera <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code></p></li>\n<li><p>placera formulärets data i dess <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.cleaned_data\" title=\"django.forms.Form.cleaned_data\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code></a>-attribut.</p></li>\n</ul>\n<p>Hela formuläret kommer att se ut så här när det visas för första gången:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span><span class=\"p\">&gt;</span>Your name: <span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text&quot;</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;your_name&quot;</span> <span class=\"na\">maxlength</span><span class=\"o\">=</span><span class=\"s\">&quot;100&quot;</span> <span class=\"na\">required</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Observera att den <strong>inte</strong> innehåller taggarna <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> eller en skicka-knapp. Vi måste tillhandahålla dem själva i mallen.</p>\n</section>\n<section id=\"the-view\">\n<span id=\"using-a-form-in-a-view\"></span><h4>Utsikten<a class=\"heading-anchor\" href=\"#the-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Formulärdata som skickas tillbaka till en Django-webbplats behandlas av en vy, vanligtvis samma vy som publicerade formuläret. Detta gör att vi kan återanvända en del av samma logik.</p>\n<p>För att hantera formuläret måste vi instansiera det i vyn för den URL där vi vill att det ska publiceras:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Vyer.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NameForm</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_name</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># if this is a POST request we need to process the form data</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># create a form instance and populate it with data from the request:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">NameForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"c1\"># check whether it&#39;s valid:</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># process the data in form.cleaned_data as required</span>\n            <span class=\"c1\"># ...</span>\n            <span class=\"c1\"># redirect to a new URL:</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/thanks/&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># if a GET (or any other method) we&#39;ll create a blank form</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">NameForm</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;name.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n</code></pre></figure>\n<p>Om vi kommer till den här vyn med en <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code>-begäran kommer den att skapa en tom formulärinstans och placera den i mallkontexten för att renderas. Det här är vad vi kan förvänta oss ska hända första gången vi besöker webbadressen.</p>\n<p>Om formuläret skickas in med en <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>-begäran kommer vyn återigen att skapa en formulärinstans och fylla den med data från begäran: <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span> <span class=\"pre\">=</span> <span class=\"pre\">NameForm(request.POST)</span></code> Detta kallas ”binda data till formuläret” (det är nu ett <em>bundet</em> formulär).</p>\n<p>Vi anropar formulärets metod <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code>; om den inte är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> går vi tillbaka till mallen med formuläret. Den här gången är formuläret inte längre tomt (<em>unbound</em>) så HTML-formuläret kommer att fyllas i med de data som tidigare skickats in, där de kan redigeras och korrigeras efter behov.</p>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kan vi nu hitta alla validerade formulärdata i dess <code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code>-attribut. Vi kan använda dessa data för att uppdatera databasen eller göra annan bearbetning innan vi skickar en HTTP-omdirigering till webbläsaren som berättar vart den ska gå härnäst.</p>\n</section>\n<section id=\"the-template\">\n<span id=\"topics-forms-index-basic-form-template\"></span><h4>Mallen<a class=\"heading-anchor\" href=\"#the-template\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Vi behöver inte göra så mycket i vår mall <code class=\"docutils literal notranslate\"><span class=\"pre\">name.html</span></code>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;/your-name/&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;post&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;Submit&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Alla formulärets fält och deras attribut kommer att packas upp till HTML-markup från den <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">formulär</span> <span class=\"pre\">}}</span></code> av Djangos mallspråk.</p>\n<aside class=\"admonition-forms-and-cross-site-request-forgery-protection admonition\">\n<p class=\"admonition-title\">Formulär och skydd mot Cross Site Request Forgery</p>\n<p>Django levereras med ett lättanvänt <a class=\"reference internal\" href=\"/sv/6.1/ref/csrf/\"><span class=\"doc\">skydd mot Cross Site Request Forgeries</span></a>. När du skickar in ett formulär via <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> med CSRF-skydd aktiverat måste du använda <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> mall tagg som i föregående exempel. Eftersom CSRF-skydd inte är direkt kopplat till formulär i mallar utelämnas dock denna tagg i följande exempel i detta dokument.</p>\n</aside>\n<aside class=\"admonition-html5-input-types-and-browser-validation admonition\">\n<p class=\"admonition-title\">HTML5-ingångstyper och webbläsarvalidering</p>\n<p>Om ditt formulär innehåller en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.URLField\" title=\"django.forms.URLField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">URLField</span></code></a>, en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a> eller någon heltalsfältstyp, kommer Django att använda HTML5-ingångstyperna <code class=\"docutils literal notranslate\"><span class=\"pre\">url</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">number</span></code>. Som standard kan webbläsare tillämpa sin egen validering på dessa fält, vilket kan vara strängare än Djangos validering. Om du vill inaktivera detta beteende, ställ in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">novalidate</span></code> på taggen <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>, eller ange en annan widget på fältet, som <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>.</p>\n</aside>\n<p>Vi har nu ett fungerande webbformulär, beskrivet av en Django <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>, bearbetat av en vy och återgivet som en HTML <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>.</p>\n<p>Det är allt du behöver för att komma igång, men ramverket för formulär ger dig mycket mer till hands. När du har förstått grunderna i den process som beskrivs ovan bör du vara beredd att förstå andra funktioner i formulärsystemet och redo att lära dig lite mer om det underliggande maskineriet.</p>\n</section>\n</section>\n</section>\n<section id=\"more-about-django-form-classes\">\n<h2>Mer om Django <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Form</span></code></a>-klasser<a class=\"heading-anchor\" href=\"#more-about-django-form-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Alla formulärklasser skapas som underklasser till antingen <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form\" title=\"django.forms.Form\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.Form</span></code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.ModelForm</span></code></a>. Du kan tänka på <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> som en underklass till <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code> ärver faktiskt gemensam funktionalitet från en (privat) <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseForm</span></code>-klass, men denna implementeringsdetalj är sällan viktig.</p>\n<aside class=\"admonition-models-and-forms admonition\">\n<p class=\"admonition-title\">Modeller och formulär</p>\n<p>Om ditt formulär ska användas för att direkt lägga till eller redigera en Django-modell kan en <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/\"><span class=\"doc\">ModelForm</span></a> faktiskt spara dig en hel del tid, ansträngning och kod, eftersom det kommer att bygga ett formulär, tillsammans med lämpliga fält och deras attribut, från en <code class=\"docutils literal notranslate\"><span class=\"pre\">Model</span></code>-klass.</p>\n</aside>\n<section id=\"bound-and-unbound-form-instances\">\n<h3>Bindande och obundna forminstanser<a class=\"heading-anchor\" href=\"#bound-and-unbound-form-instances\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Skillnaden mellan <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">Inbundna och obundna formulär</span></a> är viktig:</p>\n<ul class=\"simple\">\n<li><p>Ett obundet formulär har inga data kopplade till sig. När det visas för användaren kommer det att vara tomt eller innehålla standardvärden.</p></li>\n<li><p>Ett bundet formulär har skickat in data och kan därför användas för att avgöra om dessa data är giltiga. Om ett ogiltigt bundet formulär återges kan det innehålla inline-felmeddelanden som talar om för användaren vilka data som ska korrigeras.</p></li>\n</ul>\n<p>Formulärets attribut <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.is_bound\" title=\"django.forms.Form.is_bound\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_bound</span></code></a> talar om för dig om ett formulär har data bundna till sig eller inte.</p>\n</section>\n<section id=\"more-on-fields\">\n<h3>Mer om fält<a class=\"heading-anchor\" href=\"#more-on-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tänk dig ett mer användbart formulär än vårt minimala exempel ovan, som vi skulle kunna använda för att implementera ”kontakta mig”-funktionen på en personlig webbplats:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Textarea</span><span class=\"p\">)</span>\n    <span class=\"n\">contact_email</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">urgent</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">required</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>Our earlier form used a single field, <code class=\"docutils literal notranslate\"><span class=\"pre\">your_name</span></code>, a <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>. In\nthis case, our form has four fields: <code class=\"docutils literal notranslate\"><span class=\"pre\">subject</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">contact_email</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">urgent</span></code>. <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.EmailField\" title=\"django.forms.EmailField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailField</span></code></a> and\n<a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.BooleanField\" title=\"django.forms.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a> are just three of the available field types; a full list\ncan be found in <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/\"><span class=\"doc\">Formulärfält</span></a>.</p>\n<section id=\"widgets\">\n<h4>Widgets<a class=\"heading-anchor\" href=\"#widgets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Varje formulärfält har en motsvarande <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/widgets/\"><span class=\"doc\">Widget class</span></a>, som i sin tur motsvarar en HTML-formulärwidget som till exempel <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code>.</p>\n<p>I de flesta fall kommer fältet att ha en förnuftig standardwidget. Till exempel kommer ett <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.CharField\" title=\"django.forms.CharField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CharField</span></code></a> som standard att ha en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/widgets/#django.forms.TextInput\" title=\"django.forms.TextInput\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TextInput</span></code></a>-widget, som producerar en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;text&quot;&gt;</span></code> i HTML. Om du behöver <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;textarea&gt;</span></code> istället, anger du lämplig widget när du definierar ditt formulärfält, som vi har gjort för fältet <code class=\"docutils literal notranslate\"><span class=\"pre\">message</span></code>.</p>\n</section>\n<section id=\"field-data\">\n<h4>Fältdata<a class=\"heading-anchor\" href=\"#field-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Oavsett vilka data som skickas in med ett formulär, när de har validerats framgångsrikt genom att anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> (och <code class=\"docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code> har returnerat <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>), kommer de validerade formulärdata att finnas i ordlistan <code class=\"docutils literal notranslate\"><span class=\"pre\">form.cleaned_data</span></code>. Dessa data har på ett snyggt sätt konverterats till Python-typer åt dig.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Du kan fortfarande komma åt de icke validerade uppgifterna direkt från <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> vid denna tidpunkt, men de validerade uppgifterna är bättre.</p>\n</aside>\n<p>In the contact form example above, <code class=\"docutils literal notranslate\"><span class=\"pre\">urgent</span></code> will be a boolean value.\nLikewise, fields such as <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.IntegerField\" title=\"django.forms.IntegerField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code></a> and <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.FloatField\" title=\"django.forms.FloatField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FloatField</span></code></a> convert\nvalues to a Python <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> respectively.</p>\n<p>Så här skulle formulärdata kunna behandlas i den vy som hanterar formuläret:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Vyer.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.mail</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">EmailMessage</span>\n\n<span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;message&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">contact_email</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;contact_email&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">urgent</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;urgent&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"s2\">&quot;Submitted through the contact form.</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n        <span class=\"sa\">f</span><span class=\"s2\">&quot;Contact email (unverified): </span><span class=\"si\">{</span><span class=\"n\">contact_email</span><span class=\"si\">}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n        <span class=\"sa\">f</span><span class=\"s2\">&quot;Marked urgent: </span><span class=\"si\">{</span><span class=\"s1\">&#39;yes&#39;</span><span class=\"w\"> </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"n\">urgent</span><span class=\"w\"> </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"s1\">&#39;no&#39;</span><span class=\"si\">}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span>\n        <span class=\"sa\">f</span><span class=\"s2\">&quot;Message:</span><span class=\"se\">\\n</span><span class=\"si\">{</span><span class=\"n\">message</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"c1\"># Send the message, directing replies to the contact_email.</span>\n    <span class=\"n\">EmailMessage</span><span class=\"p\">(</span>\n        <span class=\"n\">subject</span><span class=\"o\">=</span><span class=\"sa\">f</span><span class=\"s2\">&quot;[contact form] </span><span class=\"si\">{</span><span class=\"n\">subject</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">body</span><span class=\"o\">=</span><span class=\"n\">body</span><span class=\"p\">,</span>\n        <span class=\"n\">from_email</span><span class=\"o\">=</span><span class=\"s2\">&quot;contact-form@example.com&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;info@example.com&quot;</span><span class=\"p\">],</span>\n        <span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;Importance&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;high&quot;</span><span class=\"p\">}</span> <span class=\"k\">if</span> <span class=\"n\">urgent</span> <span class=\"k\">else</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">contact_email</span><span class=\"p\">],</span>\n    <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/thanks/&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<aside class=\"admonition admonition-tip\">\n<p class=\"admonition-title\">Tips</p>\n<p>För mer information om att skicka e-post från Django, se <a class=\"reference internal\" href=\"/sv/6.1/topics/email/\"><span class=\"doc\">Skicka e-post</span></a>.</p>\n</aside>\n<p>Vissa fälttyper behöver lite extra hantering. Till exempel måste filer som laddas upp med hjälp av ett formulär hanteras annorlunda (de kan hämtas från <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code>, i stället för <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code>). För detaljer om hur du hanterar filuppladdningar med ditt formulär, se <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Binder uppladdade filer till ett formulär</span></a>.</p>\n</section>\n</section>\n</section>\n<section id=\"working-with-form-templates\">\n<h2>Arbeta med formulärmallar<a class=\"heading-anchor\" href=\"#working-with-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Allt du behöver göra för att få in ditt formulär i en mall är att placera formulärinstansen i mallkontexten. Så om ditt formulär kallas <code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> i sammanhanget, kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form</span> <span class=\"pre\">}}</span></code> att rendera sina <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input&gt;</span></code> element på lämpligt sätt.</p>\n<aside class=\"admonition-additional-form-template-furniture admonition\">\n<p class=\"admonition-title\">Ytterligare formulärmallar för möbler</p>\n<p>Glöm inte att ett formulärs utdata <em>inte</em> inkluderar de omgivande <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code>-taggarna eller formulärets <code class=\"docutils literal notranslate\"><span class=\"pre\">submit</span></code>-kontroll. Du måste tillhandahålla dessa själv.</p>\n</aside>\n<section id=\"reusable-form-templates\">\n<span id=\"id1\"></span><h3>Återanvändbara formulärmallar<a class=\"heading-anchor\" href=\"#reusable-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>HTML-utdata vid rendering av ett formulär genereras i sig via en mall. Du kan kontrollera detta genom att skapa en lämplig mallfil och ange en anpassad <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a> för att använda den <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/renderers/#django.forms.renderers.BaseRenderer.form_template_name\" title=\"django.forms.renderers.BaseRenderer.form_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">form_template_name</span></code></a> på hela webbplatsen. Du kan också anpassa per formulär genom att åsidosätta 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\"><span class=\"pre\">template_name</span></code></a>-attribut för att rendera formuläret med den anpassade mallen, eller genom att skicka mallnamnet direkt till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.render\" title=\"django.forms.Form.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.render()</span></code></a>.</p>\n<p>Exemplet nedan resulterar i att <code class=\"docutils literal notranslate\"><span class=\"pre\">{{form}</span></code> återges som utdata i mallen <code class=\"docutils literal notranslate\"><span class=\"pre\">form_snippet.html</span></code>.</p>\n<p>I dina mallar:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code># In your template:\n<span class=\"cp\">{{</span> <span class=\"nv\">form</span> <span class=\"cp\">}}</span>\n\n# In form_snippet.html:\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Sedan kan du konfigurera 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\"><span class=\"pre\">FORM_RENDERER</span></code></a>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms.renderers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplatesSetting</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomFormRenderer</span><span class=\"p\">(</span><span class=\"n\">TemplatesSetting</span><span class=\"p\">):</span>\n    <span class=\"n\">form_template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span>\n\n\n<span class=\"n\">FORM_RENDERER</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;project.settings.CustomFormRenderer&quot;</span>\n</code></pre></figure>\n<p>… eller för ett enda formulär:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;form_snippet.html&quot;</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>… eller för en enda rendering av en formulärinstans, genom att skicka in mallnamnet till <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.render\" title=\"django.forms.Form.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.render()</span></code></a>. Här är ett exempel på hur detta används i 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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">MyForm</span><span class=\"p\">()</span>\n    <span class=\"n\">rendered_form</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;form_snippet.html&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">rendered_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#ref-forms-api-outputting-html\"><span class=\"std std-ref\">Utmatning av formulär som HTML</span></a> för mer information.</p>\n</section>\n<section id=\"reusable-field-group-templates\">\n<span id=\"id2\"></span><h3>Återanvändbara mallar för fältgrupper<a class=\"heading-anchor\" href=\"#reusable-field-group-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Each field is available as an attribute of the form, using\n<code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.name_of_field</span> <span class=\"pre\">}}</span></code> in a template. A field has an\n<a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.BoundField.as_field_group\" title=\"django.forms.BoundField.as_field_group\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">as_field_group()</span></code></a> method which renders the\nrelated elements of the field as a group: its label, widget, errors, and help\ntext.</p>\n<p>This allows generic templates to be written that arrange each field’s elements\nin the required layout. For example:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">form.non_field_errors</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.message.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.contact_email.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{{</span> <span class=\"nv\">form.urgent.as_field_group</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Som standard använder Django mallen <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/field.html&quot;</span></code> som är utformad för användning med standardformulärsstilen <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/div.html&quot;</span></code>.</p>\n<p>Standardmallen kan anpassas genom att ställa in <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/renderers/#django.forms.renderers.BaseRenderer.field_template_name\" title=\"django.forms.renderers.BaseRenderer.field_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">field_template_name</span></code></a> i din projektnivå <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.forms.renderers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TemplatesSetting</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomFormRenderer</span><span class=\"p\">(</span><span class=\"n\">TemplatesSetting</span><span class=\"p\">):</span>\n    <span class=\"n\">field_template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;field_snippet.html&quot;</span>\n</code></pre></div>\n<p>… eller på ett enda fält:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;my_custom_template.html&quot;</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>… eller per förfrågan genom att anropa <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.BoundField.render\" title=\"django.forms.BoundField.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">BoundField.render()</span></code></a> och ange ett mallnamn:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ContactForm</span><span class=\"p\">()</span>\n    <span class=\"n\">subject</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"p\">[</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">:</span> <span class=\"n\">subject</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"s2\">&quot;my_custom_template.html&quot;</span><span class=\"p\">)}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"rendering-fields-manually\">\n<h3>Rendering av fält manuellt<a class=\"heading-anchor\" href=\"#rendering-fields-manually\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det är också möjligt att få mer detaljerad kontroll över fältrenderingen. Sannolikt kommer detta att ske i en anpassad fältmall, så att mallen kan skrivas en gång och återanvändas för varje fält. Men det kan också nås direkt från fältattributet på formuläret. Ett exempel:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{{</span> <span class=\"nv\">form.non_field_errors</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.subject.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Email subject:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.message.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your message:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.message</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.contact_email.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.contact_email.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Your email address:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.contact_email</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.urgent.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">form.urgent.id_for_label</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span>Urgent reply needed?<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.urgent</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Kompletta <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code> element kan också genereras med hjälp av <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.BoundField.label_tag\" title=\"django.forms.BoundField.label_tag\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">label_tag()</span></code></a>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject.label_tag</span> <span class=\"cp\">}}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">form.subject</span> <span class=\"cp\">}}</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<section id=\"rendering-form-error-messages\">\n<h4>Rendering av felmeddelanden för formulär<a class=\"heading-anchor\" href=\"#rendering-form-error-messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Priset för denna flexibilitet är lite mer arbete. Hittills har vi inte behövt oroa oss för hur vi ska visa formulärfel, eftersom det har tagits hand om åt oss. I det här exemplet har vi varit tvungna att se till att vi tar hand om eventuella fel för varje fält och eventuella fel för formuläret som helhet. Notera <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span> <span class=\"pre\">}}</span></code> högst upp i formuläret och mallens uppslagning för fel i varje fält.</p>\n<p>Om du använder <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.name_of_field.errors</span> <span class=\"pre\">}}</span></code> visas en lista över formulärfel, återgiven som en oordnad lista. Detta 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\">ul</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;errorlist&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Contact email is required.<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Listan har CSS-klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">errorlist</span></code> för att du ska kunna anpassa dess utseende. Om du vill anpassa visningen av fel ytterligare kan du göra det genom att loopa över dem:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">error</span> <span class=\"k\">in</span> <span class=\"nv\">form.subject.errors</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;&lt;</span><span class=\"nt\">strong</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">error</span><span class=\"o\">|</span><span class=\"nf\">escape</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">strong</span><span class=\"p\">&gt;&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">ol</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Fel som inte är fältfel (och/eller dolda fältfel som återges högst upp i formuläret när hjälpfunktioner som <code class=\"docutils literal notranslate\"><span class=\"pre\">form.as_p()</span></code> används) kommer att återges med en extra klass <code class=\"docutils literal notranslate\"><span class=\"pre\">nonfield</span></code> för att skilja dem från fältspecifika fel. Till exempel skulle <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">form.non_field_errors</span> <span class=\"pre\">}}</span></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 nonfield&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>Generic validation error<span class=\"p\">&lt;/</span><span class=\"nt\">li</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">ul</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/\"><span class=\"doc\">API för formulär</span></a> för mer information om fel, styling och att arbeta med formulärattribut i mallar.</p>\n</section>\n</section>\n<section id=\"looping-over-the-form-s-fields\">\n<h3>Looping över formulärets fält<a class=\"heading-anchor\" href=\"#looping-over-the-form-s-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du använder samma HTML för alla dina formulärfält kan du minska dubblerad kod genom att slinga dig igenom varje fält i tur och ordning med hjälp av en <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">feller</span> <span class=\"pre\">%}</span></code>-slinga:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.help_text</span> <span class=\"cp\">%}</span>\n          <span class=\"p\">&lt;</span><span class=\"nt\">p</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;help&quot;</span> <span class=\"na\">id</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">field.auto_id</span> <span class=\"cp\">}}</span><span class=\"s\">_helptext&quot;</span><span class=\"p\">&gt;</span>\n            <span class=\"cp\">{{</span> <span class=\"nv\">field.help_text</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span>\n          <span class=\"p\">&lt;/</span><span class=\"nt\">p</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>Användbara attribut på <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field</span> <span class=\"pre\">}}</span></code> inkluderar:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.errors</span> <span class=\"pre\">}}</span></code></dt><dd><p>Skickar ut en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;ul</span> <span class=\"pre\">class=&quot;errorlist&quot;&gt;</span></code> som innehåller alla valideringsfel som motsvarar detta fält. Du kan anpassa presentationen av felen med en <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">for</span> <span class=\"pre\">error</span> <span class=\"pre\">in</span> <span class=\"pre\">field.errors</span> <span class=\"pre\">%}</span></code> loop. I det här fallet är varje objekt i slingan en sträng som innehåller felmeddelandet.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.field</span> <span class=\"pre\">}}</span></code></dt><dd><p>Instansen <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a> från formulärklassen som denna <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a> omsluter. Du kan använda den för att komma åt <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.Field\" title=\"django.forms.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>-attribut, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">char_field.field.max_length</span> <span class=\"pre\">}}</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.help_text</span> <span class=\"pre\">}}</span></code></dt><dd><p>Eventuell hjälptext som har kopplats till fältet.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.html_name</span> <span class=\"pre\">}}</span></code></dt><dd><p>Namnet på det fält som ska användas i input-elementets namnfält. Detta tar hänsyn till formulärprefixet, om det har ställts in.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.id_for_label</span> <span class=\"pre\">}}</span></code></dt><dd><p>The ID that will be used for this field (<code class=\"docutils literal notranslate\"><span class=\"pre\">id_contact_email</span></code> in the\nexample above). If you are constructing the label manually, you may want to\nuse this in lieu of <code class=\"docutils literal notranslate\"><span class=\"pre\">label_tag</span></code>. It’s also useful, for example, if you\nhave some inline JavaScript and want to avoid hardcoding the field’s ID.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.is_hidden</span> <span class=\"pre\">}}</span></code></dt><dd><p>Detta attribut är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> om formulärfältet är ett dolt fält och <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> annars. Det är inte särskilt användbart som en mallvariabel, men kan vara användbart i villkorliga tester som t.ex:</p>\n</dd>\n</dl>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.is_hidden</span> <span class=\"cp\">%}</span>\n   <span class=\"c\">{# Do something special #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<dl>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.label</span> <span class=\"pre\">}}</span></code></dt><dd><p>The label of the field, e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">Contact</span> <span class=\"pre\">email</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.label_tag</span> <span class=\"pre\">}}</span></code></dt><dd><p>Fältets etikett förpackad i lämplig HTML-tagg <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code>. Detta inkluderar formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.label_suffix\" title=\"django.forms.Form.label_suffix\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code></a>. Till exempel är standardvärdet för <code class=\"docutils literal notranslate\"><span class=\"pre\">label_suffix</span></code> ett kolon:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;id_contact_email&quot;</span><span class=\"p\">&gt;</span>Contact email:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.legend_tag</span> <span class=\"pre\">}}</span></code></dt><dd><p>Liknar <code class=\"docutils literal notranslate\"><span class=\"pre\">field.label_tag</span></code> men använder en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;legend&gt;</span></code> tagg i stället för <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;label&gt;</span></code>, för widgets med flera inmatningar inslagna i en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code>.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.use_fieldset</span> <span class=\"pre\">}}</span></code></dt><dd><p>Detta attribut är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> om formulärfältets widget innehåller flera inmatningar som bör grupperas semantiskt i en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fieldset&gt;</span></code> med en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;legend&gt;</span></code> för att förbättra tillgängligheten. Ett exempel på användning i en mall:</p>\n</dd>\n</dl>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.use_fieldset</span> <span class=\"cp\">%}</span>\n  <span class=\"p\">&lt;</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span>\n  <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.label</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">field.legend_tag</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">else</span> <span class=\"cp\">%}</span>\n  <span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.label</span> <span class=\"cp\">%}{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">field.use_fieldset</span> <span class=\"cp\">%}</span><span class=\"p\">&lt;/</span><span class=\"nt\">fieldset</span><span class=\"p\">&gt;</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">{{</span> <span class=\"pre\">field.value</span> <span class=\"pre\">}}</span></code></dt><dd><p>Fältets värde, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">someone&#64;example.com</span></code>.</p>\n</dd>\n</dl>\n<p>For a complete list of attributes and methods, see the reference guide for\n<a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a>.</p>\n<section id=\"looping-over-hidden-and-visible-fields\">\n<h4>Looping över dolda och synliga fält<a class=\"heading-anchor\" href=\"#looping-over-hidden-and-visible-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om du manuellt lägger ut ett formulär i en mall, i motsats till att förlita dig på Djangos standardformulärslayout, kanske du vill behandla <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;input</span> <span class=\"pre\">type=&quot;hidden&quot;&gt;</span></code> fält annorlunda än icke-dolda fält. Eftersom dolda fält inte visar något kan det till exempel orsaka förvirring för dina användare om du lägger felmeddelanden ”bredvid” fältet - så fel för dessa fält bör hanteras annorlunda.</p>\n<p>Django tillhandahåller två metoder på ett formulär som gör att du kan loopa över de dolda och synliga fälten oberoende av varandra: <code class=\"docutils literal notranslate\"><span class=\"pre\">hidden_fields()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">visible_fields()</span></code>. Här är en modifiering av ett tidigare exempel som använder dessa två metoder:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"c\">{# Include the hidden fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">hidden</span> <span class=\"k\">in</span> <span class=\"nv\">form.hidden_fields</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{{</span> <span class=\"nv\">hidden</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n<span class=\"c\">{# Include the visible fields #}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">field</span> <span class=\"k\">in</span> <span class=\"nv\">form.visible_fields</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">div</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;fieldWrapper&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.errors</span> <span class=\"cp\">}}</span>\n        <span class=\"cp\">{{</span> <span class=\"nv\">field.label_tag</span> <span class=\"cp\">}}</span> <span class=\"cp\">{{</span> <span class=\"nv\">field</span> <span class=\"cp\">}}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">div</span><span class=\"p\">&gt;</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>I det här exemplet hanteras inte eventuella fel i de dolda fälten. Vanligtvis är ett fel i ett dolt fält ett tecken på att formuläret har manipulerats, eftersom normal formulärinteraktion inte ändrar dem. Du kan dock enkelt infoga några felvisningar för dessa formulärfel också.</p>\n</section>\n</section>\n</section>\n<section id=\"further-topics\">\n<h2>Ytterligare ämnen<a class=\"heading-anchor\" href=\"#further-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Detta täcker grunderna, men formulär kan göra mycket mer:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/\">Formsatser</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#using-initial-data-with-a-formset\">Använda initiala data med en formulärset</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#limiting-the-maximum-number-of-forms\">Begränsa det maximala antalet formulär</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#limiting-the-maximum-number-of-instantiated-forms\">Begränsning av det maximala antalet instansierade formulär</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#formset-validation\">Validering av formulär</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#validating-the-number-of-forms-in-a-formset\">Validering av antalet formulär i en formuläruppsättning</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms\">Hantering av beställning och borttagning av formulär</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#adding-additional-fields-to-a-formset\">Lägga till ytterligare fält i en formuläruppsättning</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#passing-custom-parameters-to-formset-forms\">Överföra anpassade parametrar till formulär</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#customizing-a-formset-s-prefix\">Anpassa prefixet för ett formulär</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/formsets/#using-a-formset-in-views-and-templates\">Använda en formulärsats i vyer och mallar</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/\">Skapa formulär från modeller</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#modelform\"><code class=\"docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#model-formsets\">Modellformsatser</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#inline-formsets\">Inline-formulär</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/media/\">Formtillgångar (klassen ”Media”)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/media/#assets-as-a-static-definition\">Tillgångar som en statisk definition</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/media/#media-as-a-dynamic-property\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> som en dynamisk egenskap</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/media/#paths-in-asset-definitions\">Vägar i tillgångsdefinitioner</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/media/#media-objects\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> objekt</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"/sv/6.1/topics/forms/media/#media-on-forms\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Media</span></code> på formulär</a></li>\n</ul>\n</li>\n</ul>\n</div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/forms/\"><span class=\"doc\">Formulärreferensen</span></a></dt><dd><p>Täcker hela API-referensen, inklusive formulärfält, formulärwidgets och validering av formulär och fält.</p>\n</dd>\n<dt><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/django-formtools/\">django-formtools</a></dt><dd><p>Provides additional form utilities, such as form previews and wizards\n(<a class=\"reference external\" href=\"https://django-formtools.readthedocs.io/\">documentation</a>).</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"working-with-forms","toc":[{"title":"HTML-formulär","anchor":"html-forms","children":[{"title":"GET och POST","anchor":"get-and-post","children":[]}]},{"title":"Djangos roll i formulär","anchor":"django-s-role-in-forms","children":[]},{"title":"Formulär i Django","anchor":"forms-in-django","children":[{"title":"Django Form-klassen","anchor":"the-django-form-class","children":[]},{"title":"Instansiering, bearbetning och rendering av formulär","anchor":"instantiating-processing-and-rendering-forms","children":[]}]},{"title":"Bygga upp ett formulär","anchor":"building-a-form","children":[{"title":"Det arbete som behöver göras","anchor":"the-work-that-needs-to-be-done","children":[]},{"title":"Skapa ett formulär i Django","anchor":"building-a-form-in-django","children":[{"title":"Klassen :class:`Form","anchor":"the-form-class","children":[]},{"title":"Utsikten","anchor":"the-view","children":[]},{"title":"Mallen","anchor":"the-template","children":[]}]}]},{"title":"Mer om Django Form-klasser","anchor":"more-about-django-form-classes","children":[{"title":"Bindande och obundna forminstanser","anchor":"bound-and-unbound-form-instances","children":[]},{"title":"Mer om fält","anchor":"more-on-fields","children":[{"title":"Widgets","anchor":"widgets","children":[]},{"title":"Fältdata","anchor":"field-data","children":[]}]}]},{"title":"Arbeta med formulärmallar","anchor":"working-with-form-templates","children":[{"title":"Återanvändbara formulärmallar","anchor":"reusable-form-templates","children":[]},{"title":"Återanvändbara mallar för fältgrupper","anchor":"reusable-field-group-templates","children":[]},{"title":"Rendering av fält manuellt","anchor":"rendering-fields-manually","children":[{"title":"Rendering av felmeddelanden för formulär","anchor":"rendering-form-error-messages","children":[]}]},{"title":"Looping över formulärets fält","anchor":"looping-over-the-form-s-fields","children":[{"title":"Looping över dolda och synliga fält","anchor":"looping-over-hidden-and-visible-fields","children":[]}]}]},{"title":"Ytterligare ämnen","anchor":"further-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"}],"prev":{"docname":"topics/http/sessions","title":"Hur man använder sessioner","url":"/sv/6.1/topics/http/sessions/"},"next":{"docname":"topics/forms/formsets","title":"Formsatser","url":"/sv/6.1/topics/forms/formsets/"},"formats":{"html":"/sv/6.1/topics/forms/","markdown":"/sv/6.1/topics/forms.md","json":"/sv/6.1/topics/forms.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/forms/index.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/forms/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}