{"title":"Skriva ditt första bidrag till Django","version":"5.2","locale":"sv","docname":"intro/contributing","url":"/sv/5.2/intro/contributing/","canonical":"https://djangodocs.dev/sv/5.2/intro/contributing/","summary":"Är du intresserad av att ge tillbaka lite till gemenskapen? Kanske har du hittat en bugg i Django som du skulle vilja se fixad, eller kanske finns det en…","html":"<h1>Skriva ditt första bidrag till Django<a class=\"heading-anchor\" href=\"#writing-your-first-contribution-for-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"introduction\">\n<h2>Introduktion<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Är du intresserad av att ge tillbaka lite till gemenskapen? Kanske har du hittat en bugg i Django som du skulle vilja se fixad, eller kanske finns det en liten funktion som du vill lägga till (men kom ihåg att förslag på nya funktioner ska följa <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/bugs-and-features/#requesting-features\"><span class=\"std std-ref\">processen för att föreslå nya funktioner</span></a>).</p>\n<p>Att bidra till Django själv är det bästa sättet att se dina egna problem hanteras. Det kan verka skrämmande i början, men det är en väl upptrampad väg med dokumentation, verktyg och en gemenskap som stöder dig. Vi guidar dig genom hela processen, så att du kan lära dig genom exempel.</p>\n<section id=\"who-s-this-tutorial-for\">\n<h3>Vem är denna guide skriven för?<a class=\"heading-anchor\" href=\"#who-s-this-tutorial-for\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p>Om du letar efter en referens om detaljerna för att göra kodbidrag, se <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/\"><span class=\"doc\">Bidra med kod</span></a> dokumentation.</p>\n</aside>\n<p>För denna handledning förväntar vi oss att du har åtminstone en grundläggande förståelse för hur Django fungerar. Detta innebär att du bör vara bekväm med att gå igenom de befintliga handledningarna om <a class=\"reference internal\" href=\"/sv/5.2/intro/tutorial01/\"><span class=\"doc\">skriva din första Django-app</span></a>. Dessutom bör du ha en god förståelse för Python självt. Men om du inte gör det är <a class=\"reference external\" href=\"https://diveintopython3.net/\">Dive Into Python</a> en fantastisk (och gratis) onlinebok för nybörjare i Python-programmering.</p>\n<p>De av er som inte är bekanta med versionshanteringssystem och Trac kommer att upptäcka att denna handledning och dess länkar innehåller tillräckligt med information för att komma igång. Men du kommer förmodligen att vilja läsa lite mer om dessa olika verktyg om du planerar att bidra till Django regelbundet.</p>\n<p>För det mesta försöker denna handledning dock förklara så mycket som möjligt, så att den kan vara till nytta för den bredaste publiken.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Var du kan få hjälp:</p>\n<p>Om du har problem med att gå igenom denna handledning, skicka ett meddelande på <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a> eller titta in på <a class=\"reference external\" href=\"https://chat.djangoproject.com\">Django Discord server</a> för att chatta med andra Django-användare som kanske kan hjälpa till.</p>\n</aside>\n</section>\n<section id=\"what-does-this-tutorial-cover\">\n<h3>Vad omfattar denna handledning?<a class=\"heading-anchor\" href=\"#what-does-this-tutorial-cover\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Vi kommer att gå igenom hur du bidrar till Django för första gången. I slutet av denna handledning bör du ha en grundläggande förståelse för både verktygen och de processer som är inblandade. Specifikt kommer vi att täcka följande:</p>\n<ul class=\"simple\">\n<li><p>Installera Git.</p></li>\n<li><p>Nedladdning av en kopia av Djangos utvecklingsversion.</p></li>\n<li><p>Kör Djangos testsvit.</p></li>\n<li><p>Skriva ett test för dina ändringar.</p></li>\n<li><p>Skriva koden för dina ändringar.</p></li>\n<li><p>Testa dina ändringar.</p></li>\n<li><p>Skicka in en pull-begäran.</p></li>\n<li><p>Var du kan söka efter mer information.</p></li>\n</ul>\n<p>När du är klar med handledningen kan du titta igenom resten av <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/\"><span class=\"doc\">Djangos dokumentation om att bidra</span></a>. Den innehåller massor av bra information och är ett måste för alla som vill bli en regelbunden bidragsgivare till Django. Om du har frågor har den förmodligen svaren.</p>\n<aside class=\"admonition-python-3-required admonition\" role=\"note\">\n<p class=\"admonition-title\">Python 3 krävs!</p>\n<p>Den nuvarande versionen av Django stöder inte Python 2.7. Hämta Python 3 på <a class=\"reference external\" href=\"https://www.python.org/downloads/\">Pythons nedladdningssida</a> eller med ditt operativsystems pakethanterare.</p>\n</aside>\n<aside class=\"admonition-for-windows-users admonition\" role=\"note\">\n<p class=\"admonition-title\">För Windows-användare</p>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/howto/windows/#install-python-windows\"><span class=\"std std-ref\">Installera Python</span></a> på Windows-dokumenten för ytterligare vägledning.</p>\n</aside>\n</section>\n</section>\n<section id=\"code-of-conduct\">\n<h2>Uppförandekod<a class=\"heading-anchor\" href=\"#code-of-conduct\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Som bidragsgivare kan du hjälpa oss att hålla Django-gemenskapen öppen och inkluderande. Läs och följ vår <a class=\"reference external\" href=\"https://www.djangoproject.com/conduct/\">Uppförandekod</a>.</p>\n</section>\n<section id=\"installing-git\">\n<h2>Installera Git<a class=\"heading-anchor\" href=\"#installing-git\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För den här handledningen behöver du ha Git installerat för att ladda ner den aktuella utvecklingsversionen av Django och för att generera en gren för de ändringar du gör.</p>\n<p>För att kontrollera om du har Git installerat skriver du <code class=\"docutils literal notranslate\">git</code> på kommandoraden. Om du får meddelanden som säger att kommandot inte kunde hittas måste du ladda ner och installera det, se <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">`Gits nedladdningssida`__</span></a>.</p>\n<p>Om du inte är så bekant med Git kan du alltid ta reda på mer om dess kommandon (när det väl är installerat) genom att skriva <code class=\"docutils literal notranslate\">git help</code> på kommandoraden.</p>\n</section>\n<section id=\"getting-a-copy-of-django-s-development-version\">\n<h2>Skaffa en kopia av Djangos utvecklingsversion<a class=\"heading-anchor\" href=\"#getting-a-copy-of-django-s-development-version\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det första steget för att bidra till Django är att få en kopia av källkoden. Först, <a class=\"reference external\" href=\"https://github.com/django/django/fork\">fork Django på GitHub</a>. Använd sedan kommandot <code class=\"docutils literal notranslate\">cd</code> från kommandoraden för att navigera till den katalog där du vill att din lokala kopia av Django ska finnas.</p>\n<p>Ladda ner Djangos källkodsarkiv med hjälp av följande kommando:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git clone https://github.com/YourGitHubName/django.git\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git clone https://github.com/YourGitHubName/django.git\n</code></pre></div></div></div>\n<aside class=\"admonition-low-bandwidth-connection admonition\" role=\"note\">\n<p class=\"admonition-title\">Anslutning med låg bandbredd?</p>\n<p>Du kan lägga till argumentet <code class=\"docutils literal notranslate\">--djup 1</code> till <code class=\"docutils literal notranslate\">git clone</code> för att hoppa över att ladda ner hela Djangos commit-historik, vilket minskar dataöverföringen från ~250 MB till ~70 MB.</p>\n</aside>\n<p>Nu när du har en lokal kopia av Django kan du installera det precis som du skulle installera vilket paket som helst med hjälp av <code class=\"docutils literal notranslate\">pip</code>. Det bekvämaste sättet att göra det är att använda en <em>virtuell miljö</em>, som är en funktion inbyggd i Python som gör att du kan hålla en separat katalog med installerade paket för vart och ett av dina projekt så att de inte stör varandra.</p>\n<p>Det är en bra idé att samla alla virtuella miljöer på ett ställe, t.ex. i <code class=\"docutils literal notranslate\">.virtualenvs/</code> i din hemkatalog.</p>\n<p id=\"intro-contributing-install-local-copy\">Skapa en ny virtuell miljö genom att köra:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python3 -m venv ~/.virtualenvs/djangodev\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m venv <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\n</code></pre></div></div></div>\n<p>Sökvägen är den plats där den nya miljön kommer att sparas på din dator.</p>\n<p>Det sista steget i konfigurationen av din virtuella miljö är att aktivera den:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nb\">source</span> ~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>Om kommandot <code class=\"docutils literal notranslate\">källa</code> inte är tillgängligt kan du försöka använda en punkt istället:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>. ~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>Du måste aktivera den virtuella miljön varje gång du öppnar ett nytt terminalfönster.</p>\n<aside class=\"admonition-for-windows-users admonition\" role=\"note\">\n<p class=\"admonition-title\">För Windows-användare</p>\n<p>För att aktivera din virtuella miljö i Windows kör du:</p>\n<div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows code\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\\Scripts\\activate.bat\n</code></pre></div>\n</aside>\n<p>Namnet på den virtuella miljö som för närvarande är aktiverad visas på kommandoraden för att hjälpa dig att hålla reda på vilken du använder. Allt som du installerar via <code class=\"docutils literal notranslate\">pip</code> medan det här namnet visas kommer att installeras i den virtuella miljön, isolerat från andra miljöer och systemomfattande paket.</p>\n<p>Gå vidare och installera den tidigare klonade kopian av Django:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python -m pip install -e /path/to/your/local/clone/django/\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -e \\path\\to\\your\\local\\clone\\django\\\n</code></pre></div></div></div>\n<p>Den installerade versionen av Django pekar nu på din lokala kopia genom att installera i redigerbart läge. Du kommer omedelbart att se alla ändringar du gör i den, vilket är till stor hjälp när du testar ditt första bidrag.</p>\n</section>\n<section id=\"running-django-s-test-suite-for-the-first-time\">\n<h2>Kör Djangos testsvit för första gången<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-first-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du bidrar till Django är det mycket viktigt att dina kodändringar inte introducerar buggar i andra delar av Django. Ett sätt att kontrollera att Django fortfarande fungerar efter att du har gjort dina ändringar är att köra Djangos testsvit. Om alla tester fortfarande godkänns kan du vara ganska säker på att dina ändringar fungerar och inte har förstört andra delar av Django. Om du aldrig har kört Djangos testsvit tidigare är det en bra idé att köra den en gång i förväg för att bekanta dig med dess resultat.</p>\n<p>Innan du kör testsviten ska du ange Djangos katalog <code class=\"docutils literal notranslate\">tests/</code> med kommandot <code class=\"docutils literal notranslate\">cd tests</code> och installera testberoenden genom att köra:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python -m pip install -r requirements/py3.txt\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -r requirements\\py3.txt\n</code></pre></div></div></div>\n<p>Om du stöter på ett fel under installationen kan det hända att ditt system saknar ett beroende för ett eller flera av Python-paketen. Läs dokumentationen för det paket som inte fungerar eller sök på webben efter det felmeddelande som du stöter på.</p>\n<p>Nu är vi redo att köra testsviten:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n<p>Nu kan du luta dig tillbaka och slappna av. Djangos hela testsvit har tusentals tester och det tar minst några minuter att köra, beroende på hastigheten på din dator.</p>\n<p>När Djangos testsvit körs kommer du att se en ström av tecken som representerar statusen för varje test när det slutförs. <code class=\"docutils literal notranslate\">E</code> indikerar att ett fel uppstod under ett test och <code class=\"docutils literal notranslate\">F</code> indikerar att ett tests påståenden misslyckades. Båda dessa anses vara testfel. Samtidigt indikerar <code class=\"docutils literal notranslate\">x</code> och <code class=\"docutils literal notranslate\">s</code> förväntade misslyckanden respektive överhoppade tester. Punkter indikerar godkända tester.</p>\n<p>Överhoppade tester beror vanligtvis på att det saknas externa bibliotek som krävs för att köra testet; se <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-dependencies\"><span class=\"std std-ref\">Kör alla tester</span></a> för en lista över beroenden och se till att installera alla för tester som är relaterade till de ändringar du gör (vi behöver inte några för den här handledningen). Vissa tester är specifika för en viss databasbackend och kommer att hoppas över om du inte testar med den backend. SQLite är databasens backend för standardinställningarna. För att köra testerna med en annan backend, se <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">Använda en annan settings-modul</span></a>.</p>\n<p>När testerna har slutförts bör du mötas av ett meddelande som informerar dig om testsviten klarade sig eller inte. Eftersom du ännu inte har gjort några ändringar i Djangos kod bör hela testsviten <strong>bli</strong> godkänd. Om du får misslyckanden eller fel, se till att du har följt alla tidigare steg korrekt. Se <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/unit-tests/#running-unit-tests\"><span class=\"std std-ref\">Kör enhetstesterna</span></a> för mer information.</p>\n<p>Observera att den senaste Django-grenen ”main” kanske inte alltid är stabil. När du utvecklar mot ”main” kan du kontrollera <a href=\"#id9\"><span class=\"problematic\" id=\"id11\">`Djangos continuous integration builds`__</span></a> för att avgöra om felen är specifika för din maskin eller om de också finns i Djangos officiella builds. Om du klickar för att visa ett visst bygge kan du visa ”Configuration Matrix” som visar fel uppdelade efter Python-version och databasbackend.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>För denna handledning och det ärende vi arbetar med är det tillräckligt att testa mot SQLite, men det är möjligt (och ibland nödvändigt) att <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">köra testerna med en annan databas</span></a>. När du gör ändringar i användargränssnittet måste du <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/unit-tests/#running-selenium-tests\"><span class=\"std std-ref\">köra Selenium-testerna</span></a>.</p>\n</aside>\n</section>\n<section id=\"working-on-an-approved-new-feature\">\n<h2>Arbetar med en godkänd ny funktion<a class=\"heading-anchor\" href=\"#working-on-an-approved-new-feature\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För denna handledning kommer vi att arbeta med en ”falskt accepterat ärendet” som en fallstudie. Här är de imaginära detaljerna:</p>\n<aside class=\"admonition-ticket-99999-allow-making-toast admonition\" role=\"note\">\n<p class=\"admonition-title\">Ticket #99999 – Tillåt att göra toast</p>\n<p>Django bör tillhandahålla en funktion <code class=\"docutils literal notranslate\">django.shortcuts.make_toast()</code> som returnerar <code class=\"docutils literal notranslate\">'toast'</code>.</p>\n</aside>\n<p>Vi kommer nu att implementera denna funktion och tillhörande tester.</p>\n</section>\n<section id=\"creating-a-branch\">\n<h2>Skapa en filial<a class=\"heading-anchor\" href=\"#creating-a-branch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Innan du gör några ändringar ska du skapa en ny gren för ärendet:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git checkout -b ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git checkout -b ticket_99999\n</code></pre></div></div></div>\n<p>Du kan välja vilket namn du vill för grenen, ”ticket_99999” är ett exempel. Alla ändringar som görs i den här grenen kommer att vara specifika för ärendet och kommer inte att påverka huvudkopian av koden som vi klonade tidigare.</p>\n</section>\n<section id=\"writing-some-tests-for-your-ticket\">\n<h2>Skriva några tester för ditt ärende<a class=\"heading-anchor\" href=\"#writing-some-tests-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att ett bidrag ska accepteras i Django måste det i de flesta fall innehålla tester. För bidrag med buggfixar innebär detta att man skriver ett regressionstest för att säkerställa att buggen aldrig återinförs i Django senare. Ett regressionstest bör skrivas på ett sådant sätt att det misslyckas medan buggen fortfarande existerar och godkänns när buggen har åtgärdats. För bidrag som innehåller nya funktioner måste du inkludera tester som säkerställer att de nya funktionerna fungerar korrekt. Även de bör misslyckas när den nya funktionen inte finns, och sedan godkännas när den har implementerats.</p>\n<p>Ett bra sätt att göra detta är att skriva de nya testerna först, innan du gör några ändringar i koden. Denna utvecklingsstil kallas ”testdriven utveckling” och kan tillämpas på både hela projekt och enstaka ändringar. När du har skrivit dina tester kör du dem sedan för att se till att de verkligen misslyckas (eftersom du inte har fixat den buggen eller lagt till den funktionen ännu). Om dina nya tester inte misslyckas måste du fixa dem så att de gör det. När allt kommer omkring är ett regressionstest som klarar sig oavsett om en bugg finns inte särskilt användbart för att förhindra att den buggen återkommer längre fram.</p>\n<p>Nu till vårt praktiska exempel.</p>\n<section id=\"writing-a-test-for-ticket-99999\">\n<h3>Skriva ett test för ärende #99999<a class=\"heading-anchor\" href=\"#writing-a-test-for-ticket-99999\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att lösa detta ärende ska vi lägga till en <code class=\"docutils literal notranslate\">make_toast()</code>-funktion i modulen <code class=\"docutils literal notranslate\">django.shortcuts</code>. Först ska vi skriva ett test som försöker använda funktionen och kontrollera att dess utdata ser korrekt ut.</p>\n<p>Navigera till Djangos mapp <code class=\"docutils literal notranslate\">tests/shortcuts/</code> och skapa en ny fil <code class=\"docutils literal notranslate\">test_make_toast.py</code>. Lägg till följande kod:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> make_toast\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MakeToastTests</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_make_toast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>make_toast<span class=\"p\">(),</span> <span class=\"s2\">&quot;toast&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Detta test kontrollerar att <code class=\"docutils literal notranslate\">make_toast()</code> returnerar <code class=\"docutils literal notranslate\">'toast'</code>.</p>\n<aside class=\"admonition-but-this-testing-thing-looks-kinda-hard admonition\" role=\"note\">\n<p class=\"admonition-title\">Men den här testgrejen verkar ganska svår…</p>\n<p>Om du aldrig har haft att göra med tester tidigare kan de se lite svåra ut att skriva vid första anblicken. Lyckligtvis är testning ett <em>mycket</em> stort ämne inom datorprogrammering, så det finns massor av information där ute:</p>\n<ul class=\"simple\">\n<li><p>En bra första titt på hur man skriver tester för Django finns i dokumentationen på <a class=\"reference internal\" href=\"/sv/5.2/topics/testing/overview/\"><span class=\"doc\">Skriva och köra tester</span></a>.</p></li>\n<li><p>Dive Into Python (en gratis onlinebok för nybörjare i Python) innehåller en bra ”introduktion till enhetstestning”.</p></li>\n<li><p>Efter att ha läst dem, om du vill ha något lite tjockare att sätta tänderna i, finns det alltid Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#module-unittest\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">unittest</code></a>-dokumentationen.</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"running-your-new-test\">\n<h3>Kör ditt nya test<a class=\"heading-anchor\" href=\"#running-your-new-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Eftersom vi inte har gjort några ändringar i <code class=\"docutils literal notranslate\">django.shortcuts</code> ännu, borde vårt test misslyckas. Låt oss köra alla tester i mappen <code class=\"docutils literal notranslate\">shortcuts</code> för att se till att det verkligen är vad som händer. <code class=\"docutils literal notranslate\">cd</code> till Django <code class=\"docutils literal notranslate\">tests/</code> katalogen och kör:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>Om testerna kördes korrekt bör du se ett fel som motsvarar den testmetod vi lade till, med detta fel:</p>\n<div class=\"code-block\" data-language=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">ImportError: cannot import name &#39;make_toast&#39; from &#39;django.shortcuts&#39;</span>\n</code></pre></div>\n<p>Om alla tester godkändes bör du se till att du lägger till det nya testet som visas ovan i rätt mapp och filnamn.</p>\n</section>\n</section>\n<section id=\"writing-the-code-for-your-ticket\">\n<h2>Skriva koden för ditt ärende<a class=\"heading-anchor\" href=\"#writing-the-code-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nu ska vi lägga till funktionen <code class=\"docutils literal notranslate\">make_toast()</code>.</p>\n<p>Navigera till mappen <code class=\"docutils literal notranslate\">django/</code> och öppna filen <code class=\"docutils literal notranslate\">shortcuts.py</code>. Längst ner lägger du till:</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=\"nf\">make_toast</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;toast&quot;</span>\n</code></pre></div>\n<p>Nu måste vi se till att testet vi skrev tidigare godkänns, så att vi kan se om koden vi lagt till fungerar korrekt. Återigen, navigera till Django <code class=\"docutils literal notranslate\">tests/</code> katalogen och kör:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-7-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>Allt ska godkännas. Om det inte gör det, kontrollera att du har lagt till funktionen i rätt fil.</p>\n</section>\n<section id=\"running-django-s-test-suite-for-the-second-time\">\n<h2>Kör Djangos testsvit för andra gången<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-second-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du har verifierat att dina ändringar och ditt test fungerar korrekt är det en bra idé att köra hela Djangos testsvit för att verifiera att din ändring inte har infört några buggar i andra delar av Django. Att klara hela testsviten garanterar inte att din kod är buggfri, men det hjälper till att identifiera många buggar och regressioner som annars kan gå obemärkt förbi.</p>\n<p>För att köra hela Djangos testsvit, <code class=\"docutils literal notranslate\">cd</code> till Djangos <code class=\"docutils literal notranslate\">tests/</code> katalog och kör:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n</section>\n<section id=\"writing-documentation\">\n<h2>Skriva dokumentation<a class=\"heading-anchor\" href=\"#writing-documentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det här är en ny funktion, så den bör dokumenteras. Öppna filen <code class=\"docutils literal notranslate\">docs/topics/http/shortcuts.txt</code> och lägg till följande i slutet av filen:</p>\n<div class=\"code-block\" data-language=\"rst\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Rst</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=\"Rst code\"><code><span class=\"gh\">``make_toast()``</span>\n<span class=\"gh\">================</span>\n\n<span class=\"p\">..</span> <span class=\"ow\">function</span><span class=\"p\">::</span> make_toast()\n\n<span class=\"p\">..</span> <span class=\"ow\">versionadded</span><span class=\"p\">::</span> 2.2\n\nReturns <span class=\"s\">``&#39;toast&#39;``</span>.\n</code></pre></div>\n<p>Eftersom den här nya funktionen kommer att finnas med i en kommande version läggs den också till i versionsinformation för nästa version av Django. Öppna versionsinformation för den senaste versionen i <code class=\"docutils literal notranslate\">docs/releases/</code>, som i skrivande stund är <code class=\"docutils literal notranslate\">2.2.txt</code>. Lägg till en anteckning under rubriken ”Minor Features”:</p>\n<div class=\"code-block\" data-language=\"rst\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Rst</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=\"Rst code\"><code><span class=\"gh\">:mod:`django.shortcuts`</span>\n<span class=\"gh\">~~~~~~~~~~~~~~~~~~~~~~~</span>\n\n<span class=\"m\">*</span> The new <span class=\"na\">:func:</span><span class=\"nv\">`django.shortcuts.make_toast`</span> function returns <span class=\"s\">``&#39;toast&#39;``</span>.\n</code></pre></div>\n<p>För mer information om hur du skriver dokumentation, inklusive en förklaring av vad <code class=\"docutils literal notranslate\">versionadded</code> handlar om, se <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-documentation/\"><span class=\"doc\">Skriva dokumentation</span></a>. Den sidan innehåller också en förklaring av hur man bygger en kopia av dokumentationen lokalt, så att du kan förhandsgranska den HTML som kommer att genereras.</p>\n</section>\n<section id=\"previewing-your-changes\">\n<h2>Förhandsgranska dina ändringar<a class=\"heading-anchor\" href=\"#previewing-your-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nu är det dags att granska de ändringar som gjorts i grenen. För att visa alla ändringar som är klara för commit, kör:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-9-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git add --all\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git add --all\n</code></pre></div></div></div>\n<p>Visa sedan skillnaderna mellan din nuvarande kopia av Django (med dina ändringar) och den revision som du ursprungligen checkade ut tidigare i handledningen med:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git diff --cached\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git diff --cached\n</code></pre></div></div></div>\n<p>Använd piltangenterna för att flytta uppåt och nedåt.</p>\n<div class=\"code-block\" data-language=\"diff\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Diff</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=\"Diff code\"><code><span class=\"gh\">diff --git a/django/shortcuts.py b/django/shortcuts.py</span>\n<span class=\"gh\">index 7ab1df0e9d..8dde9e28d9 100644</span>\n<span class=\"gd\">--- a/django/shortcuts.py</span>\n<span class=\"gi\">+++ b/django/shortcuts.py</span>\n<span class=\"gu\">@@ -156,3 +156,7 @@ def resolve_url(to, *args, **kwargs):</span>\n\n     # Finally, fall back and assume it&#39;s a URL\n     return to\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+def make_toast():</span>\n<span class=\"gi\">+    return &#39;toast&#39;</span>\n<span class=\"gh\">diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt</span>\n<span class=\"gh\">index 7d85d30c4a..81518187b3 100644</span>\n<span class=\"gd\">--- a/docs/releases/2.2.txt</span>\n<span class=\"gi\">+++ b/docs/releases/2.2.txt</span>\n<span class=\"gu\">@@ -40,6 +40,11 @@ database constraints. Constraints are added to models using the</span>\n Minor features\n --------------\n\n<span class=\"gi\">+:mod:`django.shortcuts`</span>\n<span class=\"gi\">+~~~~~~~~~~~~~~~~~~~~~~~</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+* The new :func:`django.shortcuts.make_toast` function returns ``&#39;toast&#39;``.</span>\n<span class=\"gi\">+</span>\n :mod:`django.contrib.admin`\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<span class=\"gh\">diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gh\">index 7b3a3a2c00..711bf6bb6d 100644</span>\n<span class=\"gd\">--- a/docs/topics/http/shortcuts.txt</span>\n<span class=\"gi\">+++ b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gu\">@@ -271,3 +271,12 @@ This example is equivalent to::</span>\n         my_objects = list(MyModel.objects.filter(published=True))\n         if not my_objects:\n             raise Http404(&quot;No MyModel matches the given query.&quot;)\n<span class=\"gi\">+</span>\n<span class=\"gi\">+``make_toast()``</span>\n<span class=\"gi\">+================</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. function:: make_toast()</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. versionadded:: 2.2</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+Returns ``&#39;toast&#39;``.</span>\n<span class=\"gh\">diff --git a/tests/shortcuts/test_make_toast.py b/tests/shortcuts/test_make_toast.py</span>\nnew file mode 100644\n<span class=\"gh\">index 0000000000..6f4c627b6e</span>\n<span class=\"gd\">--- /dev/null</span>\n<span class=\"gi\">+++ b/tests/shortcuts/test_make_toast.py</span>\n<span class=\"gu\">@@ -0,0 +1,7 @@</span>\n<span class=\"gi\">+from django.shortcuts import make_toast</span>\n<span class=\"gi\">+from django.test import SimpleTestCase</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+class MakeToastTests(SimpleTestCase):</span>\n<span class=\"gi\">+    def test_make_toast(self):</span>\n<span class=\"gi\">+        self.assertEqual(make_toast(), &#39;toast&#39;)</span>\n</code></pre></div>\n<p>När du är klar med förhandsgranskningen av ändringarna trycker du på tangenten ”q” för att återgå till kommandoraden. Om diffen såg okej ut är det dags att överföra ändringarna.</p>\n</section>\n<section id=\"committing-the-changes\">\n<h2>Överföra ändringarna<a class=\"heading-anchor\" href=\"#committing-the-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att bekräfta ändringarna:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-11-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git commit\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-11-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git commit\n</code></pre></div></div></div>\n<p>Detta öppnar en textredigerare för att skriva commit-meddelandet. Följ <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">riktlinjerna för commit-meddelanden</span></a> och skriv ett meddelande som:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>Fixed #99999 -- Added a shortcut function to make toast.\n</code></pre></div>\n</section>\n<section id=\"pushing-the-commit-and-making-a-pull-request\">\n<h2>Tryck på commit och gör en pull request<a class=\"heading-anchor\" href=\"#pushing-the-commit-and-making-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du har bekräftat ändringarna skickar du den till din fork på GitHub (ersätt ”ticket_99999” med namnet på din gren om det är annorlunda):</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git push origin ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git push origin ticket_99999\n</code></pre></div></div></div>\n<p>Du kan skapa en pull request genom att besöka <a class=\"reference external\" href=\"https://github.com/django/django/\">Django GitHub-sidan</a>. Du kommer att se din gren under ”Your recently pushed branches”. Klicka på ”Compare &amp; pull request” bredvid den.</p>\n<p>Gör det inte för den här handledningen, men på nästa sida som visar en förhandsgranskning av ändringarna klickar du på ”Skapa pull request”.</p>\n</section>\n<section id=\"next-steps\">\n<h2>Nästa steg<a class=\"heading-anchor\" href=\"#next-steps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Grattis, du har lärt dig hur man gör en pull request till Django! Detaljer om mer avancerade tekniker som du kan behöva finns i <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/working-with-git/\"><span class=\"doc\">Arbeta med Git och GitHub</span></a>.</p>\n<p>Nu kan du använda dessa kunskaper på ett bra sätt genom att hjälpa till att förbättra Djangos kodbas.</p>\n<section id=\"more-information-for-new-contributors\">\n<h3>Mer information för nya bidragsgivare<a class=\"heading-anchor\" href=\"#more-information-for-new-contributors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Innan du går in för att bidra till Django finns det lite mer information om att bidra som du förmodligen bör ta en titt på:</p>\n<ul class=\"simple\">\n<li><p>Du bör se till att läsa Djangos dokumentation om <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">claiming tickets and submitting pull requests</span></a>. Den täcker Trac-etikett, hur du gör anspråk på ärenden för dig själv, förväntad kodningsstil (både för kod och dokument) och många andra viktiga detaljer.</p></li>\n<li><p>Förstagångsbidragstagare bör också läsa Djangos <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/new-contributors/\"><span class=\"doc\">dokumentation för förstagångsbidragstagare</span></a>. Den innehåller många goda råd för oss som är nya när det gäller att hjälpa till med Django.</p></li>\n<li><p>Efter detta, om du fortfarande är hungrig efter mer information om att bidra, kan du alltid bläddra igenom resten av <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/\"><span class=\"doc\">Djangos dokumentation om att bidra</span></a>. Den innehåller massor av användbar information och bör vara din första källa för att svara på eventuella frågor du kan ha.</p></li>\n</ul>\n</section>\n<section id=\"finding-your-first-real-ticket\">\n<h3>Hitta ditt första riktiga ärende<a class=\"heading-anchor\" href=\"#finding-your-first-real-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du har gått igenom en del av den informationen är du redo att gå ut och hitta ett eget ärende att bidra till. Var särskilt uppmärksam på ärenden med kriteriet ”lättplockat”. Dessa ärenden är ofta mycket enklare till sin natur och passar bra för förstagångsbidragstagare. När du är bekant med att bidra till Django kan du börja arbeta med svårare och mer komplicerade ärenden.</p>\n<p>Om du bara vill komma igång redan nu (och ingen skulle klandra dig!), försök att ta en titt på listan över <a href=\"#id9\"><span class=\"problematic\" id=\"id12\">`enkla ärenden utan gren`__</span></a> och <a href=\"#id9\"><span class=\"problematic\" id=\"id13\">`enkla ärenden som har grenar som behöver förbättras`__</span></a>. Om du är bekant med att skriva tester kan du också titta på listan över ”enkla ärenden som behöver tester”. Kom ihåg att följa riktlinjerna om att göra anspråk på ärenden som nämndes i länken till Djangos dokumentation på <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">claiming tickets and submitting branches</span></a>.</p>\n</section>\n<section id=\"what-s-next-after-creating-a-pull-request\">\n<h3>Vad händer härnäst efter att du har skapat en pull request?<a class=\"heading-anchor\" href=\"#what-s-next-after-creating-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När ett ärende har en gren måste det granskas av en andra uppsättning ögon. När du har skickat in en pull request ska du uppdatera metadata för ärendet genom att ställa in flaggorna på ärendet så att det står ”har patch”, ”behöver inte tester” etc. så att andra kan hitta det för granskning. Att bidra behöver inte nödvändigtvis alltid innebära att skriva kod från grunden. Att granska öppna pull requests är också ett mycket användbart bidrag. Se <a class=\"reference internal\" href=\"/sv/5.2/internals/contributing/triaging-tickets/\"><span class=\"doc\">Bedömning av ärenden</span></a> för detaljer.</p>\n</section>\n</section>","rootId":"writing-your-first-contribution-for-django","toc":[{"title":"Introduktion","anchor":"introduction","children":[{"title":"Vem är denna guide skriven för?","anchor":"who-s-this-tutorial-for","children":[]},{"title":"Vad omfattar denna handledning?","anchor":"what-does-this-tutorial-cover","children":[]}]},{"title":"Uppförandekod","anchor":"code-of-conduct","children":[]},{"title":"Installera Git","anchor":"installing-git","children":[]},{"title":"Skaffa en kopia av Djangos utvecklingsversion","anchor":"getting-a-copy-of-django-s-development-version","children":[]},{"title":"Kör Djangos testsvit för första gången","anchor":"running-django-s-test-suite-for-the-first-time","children":[]},{"title":"Arbetar med en godkänd ny funktion","anchor":"working-on-an-approved-new-feature","children":[]},{"title":"Skapa en filial","anchor":"creating-a-branch","children":[]},{"title":"Skriva några tester för ditt ärende","anchor":"writing-some-tests-for-your-ticket","children":[{"title":"Skriva ett test för ärende #99999","anchor":"writing-a-test-for-ticket-99999","children":[]},{"title":"Kör ditt nya test","anchor":"running-your-new-test","children":[]}]},{"title":"Skriva koden för ditt ärende","anchor":"writing-the-code-for-your-ticket","children":[]},{"title":"Kör Djangos testsvit för andra gången","anchor":"running-django-s-test-suite-for-the-second-time","children":[]},{"title":"Skriva dokumentation","anchor":"writing-documentation","children":[]},{"title":"Förhandsgranska dina ändringar","anchor":"previewing-your-changes","children":[]},{"title":"Överföra ändringarna","anchor":"committing-the-changes","children":[]},{"title":"Tryck på commit och gör en pull request","anchor":"pushing-the-commit-and-making-a-pull-request","children":[]},{"title":"Nästa steg","anchor":"next-steps","children":[{"title":"Mer information för nya bidragsgivare","anchor":"more-information-for-new-contributors","children":[]},{"title":"Hitta ditt första riktiga ärende","anchor":"finding-your-first-real-ticket","children":[]},{"title":"Vad händer härnäst efter att du har skapat en pull request?","anchor":"what-s-next-after-creating-a-pull-request","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Kom igång","url":"/sv/5.2/intro/"}],"prev":{"docname":"intro/whatsnext","title":"Vad ska jag läsa härnäst?","url":"/sv/5.2/intro/whatsnext/"},"next":{"docname":"topics/index","title":"Använda Django","url":"/sv/5.2/topics/"},"formats":{"html":"/sv/5.2/intro/contributing/","markdown":"/sv/5.2/intro/contributing.md","json":"/sv/5.2/intro/contributing.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/intro/contributing.txt","official":"https://docs.djangoproject.com/sv/5.2/intro/contributing/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}