{"title":"Porta dina appar från Django 0.96 till 1.0","version":"5.2","locale":"sv","docname":"releases/1.0-porting-guide","url":"/sv/5.2/releases/1.0-porting-guide/","canonical":"https://djangodocs.dev/sv/5.2/releases/1.0-porting-guide/","summary":"Django 1.0 bryter kompatibiliteten med 0.96 i vissa områden. Den här guiden hjälper dig att porta 0.96-projekt och appar till 1.0. Den första delen av detta…","html":"<h1>Porta dina appar från Django 0.96 till 1.0<a class=\"heading-anchor\" href=\"#porting-your-apps-from-django-0-96-to-1-0\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 1.0 bryter kompatibiliteten med 0.96 i vissa områden.</p>\n<p>Den här guiden hjälper dig att porta 0.96-projekt och appar till 1.0. Den första delen av detta dokument innehåller de vanliga ändringar som behövs för att köra med 1.0. Om din kod fortfarande inte fungerar efter att du har gått igenom den första delen kan du läsa avsnittet <a class=\"reference internal\" href=\"#less-common-changes\">Mindre vanliga ändringar</a> för en lista över ett antal mindre vanliga kompatibilitetsproblem.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p>Den <a class=\"reference internal\" href=\"/sv/5.2/releases/1.0/\"><span class=\"doc\">1.0 versionsinformation</span></a>. Det dokumentet förklarar de nya funktionerna i 1.0 mer ingående; portningsguiden är mer inriktad på att hjälpa dig att snabbt uppdatera din kod.</p>\n</aside>\n<section id=\"common-changes\">\n<h2>Vanliga förändringar<a class=\"heading-anchor\" href=\"#common-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>I detta avsnitt beskrivs de ändringar mellan 0.96 och 1.0 som de flesta användare kommer att behöva göra.</p>\n<section id=\"use-unicode\">\n<h3>Använd Unicode<a class=\"heading-anchor\" href=\"#use-unicode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ändra stränglitteraler (<code class=\"docutils literal notranslate\">'foo'</code>) till Unicode-litteraler (<code class=\"docutils literal notranslate\">u'foo'</code>). Django använder nu Unicode-strängar genomgående. På de flesta ställen kommer råa strängar att fortsätta att fungera, men uppdatering till att använda Unicode-litteraler kommer att förhindra vissa obskyra problem.</p>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/ref/unicode/\"><span class=\"doc\">Unicode-data</span></a> för fullständig information.</p>\n</section>\n<section id=\"models\">\n<h3>Modeller<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Vanliga ändringar i din models-fil:</p>\n<section id=\"rename-maxlength-to-max-length\">\n<h4>Byt namn på <code class=\"docutils literal notranslate\">maxlength</code> till <code class=\"docutils literal notranslate\">max_length</code><a class=\"heading-anchor\" href=\"#rename-maxlength-to-max-length\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Byt namn på argumentet <code class=\"docutils literal notranslate\">maxlength</code> till <code class=\"docutils literal notranslate\">max_length</code> (detta ändrades för att vara konsekvent med formulärfält):</p>\n</section>\n<section id=\"replace-str-with-unicode\">\n<h4>Ersätt <code class=\"docutils literal notranslate\">__str__</code> med <code class=\"docutils literal notranslate\">__unicode__</code><a class=\"heading-anchor\" href=\"#replace-str-with-unicode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ersätt din modells funktion <code class=\"docutils literal notranslate\">__str__</code> med en metod <code class=\"docutils literal notranslate\">__unicode__</code> och se till att du <a class=\"reference internal\" href=\"#use-unicode\">använder Unicode</a> (<code class=\"docutils literal notranslate\">u'foo'</code>) i den metoden.</p>\n</section>\n<section id=\"remove-prepopulated-from\">\n<h4>Ta bort <code class=\"docutils literal notranslate\">prepopulated_from</code><a class=\"heading-anchor\" href=\"#remove-prepopulated-from\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ta bort <code class=\"docutils literal notranslate\">prepopulated_from</code>-argumentet på modellfält. Det är inte längre giltigt och har flyttats till klassen <code class=\"docutils literal notranslate\">ModelAdmin</code> i <code class=\"docutils literal notranslate\">admin.py</code>. Se <a class=\"reference internal\" href=\"#the-admin\">admin</a> nedan för mer information om ändringar i admin.</p>\n</section>\n<section id=\"remove-core\">\n<h4>Ta bort <code class=\"docutils literal notranslate\">kärna</code><a class=\"heading-anchor\" href=\"#remove-core\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ta bort <code class=\"docutils literal notranslate\">core</code>-argumentet från dina modellfält. Det är inte längre nödvändigt, eftersom motsvarande funktionalitet (en del av <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#admin-inlines\"><span class=\"std std-ref\">inline editing</span></a>) hanteras annorlunda av admin-gränssnittet nu. Du behöver inte oroa dig för inline-redigering förrän du kommer till avsnittet <a class=\"reference internal\" href=\"#the-admin\">Admin</a> nedan. För tillfället, ta bort alla referenser till <code class=\"docutils literal notranslate\">core</code>.</p>\n</section>\n<section id=\"replace-class-admin-with-admin-py\">\n<h4>Ersätt <code class=\"docutils literal notranslate\">class Admin:</code> med <code class=\"docutils literal notranslate\">admin.py</code><a class=\"heading-anchor\" href=\"#replace-class-admin-with-admin-py\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ta bort alla dina inre <code class=\"docutils literal notranslate\">class Admin</code>-deklarationer från dina modeller. De kommer inte att förstöra något om du låter dem vara kvar, men de kommer inte heller att göra något. För att registrera appar med administratören kommer du att flytta dessa deklarationer till en <code class=\"docutils literal notranslate\">admin.py</code>-fil; se <a class=\"reference internal\" href=\"#the-admin\">the admin</a> nedan för mer information.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p>En bidragsgivare till <a class=\"reference external\" href=\"https://djangosnippets.org/\">djangosnippets</a> har skrivit ett skript som <a class=\"reference external\" href=\"https://djangosnippets.org/snippets/603/\">söker igenom din models.py och genererar en motsvarande admin.py</a>.</p>\n</aside>\n</section>\n<section id=\"example\">\n<h4>Exempel<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Nedan följer ett exempel på filen <code class=\"docutils literal notranslate\">models.py</code> med alla de ändringar du behöver göra:</p>\n<p>Gammal (0.96) <code class=\"docutils literal notranslate\">models.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>maxlength<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>maxlength<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    slug <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>maxlength<span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">,</span> prepopulate_from<span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Admin</span><span class=\"p\">:</span>\n        list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name<span class=\"p\">)</span>\n</code></pre></div>\n<p>Ny (1.0) <code class=\"docutils literal notranslate\">models.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    slug <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__unicode__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>last_name<span class=\"p\">)</span>\n</code></pre></div>\n<p>Ny (1.0) <code class=\"docutils literal notranslate\">admin.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">models</span> <span class=\"kn\">import</span> Author\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AuthorAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    list_display <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">]</span>\n    prepopulated_fields <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;slug&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">)}</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Author<span class=\"p\">,</span> AuthorAdmin<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"the-admin\">\n<h3>Administratören<a class=\"heading-anchor\" href=\"#the-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>En av de största förändringarna i 1.0 är den nya administratören. Djangos administrativa gränssnitt (<code class=\"docutils literal notranslate\">django.contrib.admin</code>) har helt omarbetats; admin-definitioner är nu helt frikopplade från modelldefinitioner, ramverket har skrivits om för att använda Djangos nya formulärhanteringsbibliotek och omdesignats med tanke på utdragbarhet och anpassning.</p>\n<p>I praktiken innebär det att du måste skriva om alla dina <code class=\"docutils literal notranslate\">class Admin</code>-deklarationer. Du har redan sett i <a class=\"reference internal\" href=\"#models\">models</a> ovan hur du kan ersätta din <code class=\"docutils literal notranslate\">class Admin</code> med ett <code class=\"docutils literal notranslate\">admin.site.register()</code>-anrop i en <code class=\"docutils literal notranslate\">admin.py</code>-fil. Nedan följer lite mer information om hur man skriver om <code class=\"docutils literal notranslate\">Admin</code> deklarationen till den nya syntaxen.</p>\n<section id=\"use-new-inline-syntax\">\n<h4>Använd ny inline-syntax<a class=\"heading-anchor\" href=\"#use-new-inline-syntax\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>De nya <code class=\"docutils literal notranslate\">edit_inline</code>-alternativen har alla flyttats till <code class=\"docutils literal notranslate\">admin.py</code>. Här är ett exempel:</p>\n<p>Gammal (0,96):</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=\"nc\">Parent</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span> <span class=\"o\">...</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Child</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    parent <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Parent<span class=\"p\">,</span> edit_inline<span class=\"o\">=</span>models<span class=\"o\">.</span>STACKED<span class=\"p\">,</span> num_in_admin<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ny (1.0):</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=\"nc\">ChildInline</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>StackedInline<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Child\n    extra <span class=\"o\">=</span> <span class=\"mi\">3</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ParentAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    model <span class=\"o\">=</span> Parent\n    inlines <span class=\"o\">=</span> <span class=\"p\">[</span>ChildInline<span class=\"p\">]</span>\n\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>Parent<span class=\"p\">,</span> ParentAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p>Se <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/#admin-inlines\"><span class=\"std std-ref\">objekt av typen ``InlineModelAdmin</span></a> för mer information.</p>\n</section>\n<section id=\"simplify-fields-or-use-fieldsets\">\n<h4>Förenkla <code class=\"docutils literal notranslate\">fields</code>, eller använd <code class=\"docutils literal notranslate\">fieldsets</code><a class=\"heading-anchor\" href=\"#simplify-fields-or-use-fieldsets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Den gamla syntaxen <code class=\"docutils literal notranslate\">fields</code> var ganska förvirrande och har förenklats. Den gamla syntaxen fungerar fortfarande, men du måste använda <code class=\"docutils literal notranslate\">fieldsets</code> istället.</p>\n<p>Gammal (0,96):</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=\"nc\">ModelOne</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Admin</span><span class=\"p\">:</span>\n        fields <span class=\"o\">=</span> <span class=\"p\">((</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">)}),)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ModelTwo</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Admin</span><span class=\"p\">:</span>\n        fields <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;group1&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">}),</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;group2&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;spam&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;eggs&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse wide&quot;</span><span class=\"p\">}),</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>Ny (1.0):</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=\"nc\">ModelOneAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fields <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ModelTwoAdmin</span><span class=\"p\">(</span>admin<span class=\"o\">.</span>ModelAdmin<span class=\"p\">):</span>\n    fieldsets <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;group1&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse&quot;</span><span class=\"p\">}),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;group2&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s2\">&quot;spam&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;eggs&quot;</span><span class=\"p\">),</span> <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collapse wide&quot;</span><span class=\"p\">}),</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<ul class=\"simple\">\n<li><p>Mer detaljerad information om ändringarna och orsakerna bakom dem finns på wikisidan <a class=\"reference external\" href=\"https://code.djangoproject.com/wiki/NewformsAdminBranch\">NewformsAdminBranch</a></p></li>\n<li><p>Den nya admin kommer med massor av nya funktioner; du kan läsa om dem i <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/admin/\"><span class=\"doc\">admin dokumentation</span></a>.</p></li>\n</ul>\n</aside>\n</section>\n</section>\n<section id=\"urls\">\n<h3>URL:er<a class=\"heading-anchor\" href=\"#urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"update-your-root-urls-py\">\n<h4>Uppdatera din root <code class=\"docutils literal notranslate\">urls.py</code><a class=\"heading-anchor\" href=\"#update-your-root-urls-py\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om du använder administratörssidan måste du uppdatera din root <code class=\"docutils literal notranslate\">urls.py</code>.</p>\n<p>Gammal (0.96) <code class=\"docutils literal notranslate\">urls.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls.defaults</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n\nurlpatterns <span class=\"o\">=</span> patterns<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^admin/&quot;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s2\">&quot;django.contrib.admin.urls&quot;</span><span class=\"p\">)),</span>\n    <span class=\"c1\"># ... the rest of your URLs here ...</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Ny (1.0) <code class=\"docutils literal notranslate\">urls.py</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls.defaults</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n\n<span class=\"c1\"># The next two lines enable the admin and load each admin.py file:</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\nadmin<span class=\"o\">.</span>autodiscover<span class=\"p\">()</span>\n\nurlpatterns <span class=\"o\">=</span> patterns<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^admin/(.*)&quot;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>root<span class=\"p\">),</span>\n    <span class=\"c1\"># ... the rest of your URLs here ...</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"views\">\n<h3>Vyer<a class=\"heading-anchor\" href=\"#views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"use-django-forms-instead-of-newforms\">\n<h4>Använd <code class=\"docutils literal notranslate\">django.forms</code> istället för <code class=\"docutils literal notranslate\">newforms</code><a class=\"heading-anchor\" href=\"#use-django-forms-instead-of-newforms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ersätt <code class=\"docutils literal notranslate\">django.newforms</code> med <code class=\"docutils literal notranslate\">django.forms</code> – Django 1.0 bytte namn på modulen <code class=\"docutils literal notranslate\">newforms</code> (introducerad i 0.96) till gamla vanliga <code class=\"docutils literal notranslate\">forms</code>. Modulen <code class=\"docutils literal notranslate\">oldforms</code> togs också bort.</p>\n<p>Om du redan använder biblioteket <code class=\"docutils literal notranslate\">newforms</code> och du använde vår rekommenderade syntax för <code class=\"docutils literal notranslate\">import</code>-satser behöver du bara ändra dina importsatser.</p>\n<p>Gammal:</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</span> <span class=\"kn\">import</span> newforms <span class=\"k\">as</span> forms\n</code></pre></div>\n<p>Ny:</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</span> <span class=\"kn\">import</span> forms\n</code></pre></div>\n<p>Om du använder det gamla formulärsystemet (tidigare känt som <code class=\"docutils literal notranslate\">django.forms</code> och <code class=\"docutils literal notranslate\">django.oldforms</code>) måste du skriva om dina formulär. Ett bra ställe att börja på är <a class=\"reference internal\" href=\"/sv/5.2/topics/forms/\"><span class=\"doc\">formulärdokumentation</span></a></p>\n</section>\n<section id=\"handle-uploaded-files-using-the-new-api\">\n<h4>Hantera uppladdade filer med hjälp av det nya API:et<a class=\"heading-anchor\" href=\"#handle-uploaded-files-using-the-new-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ersätt användningen av uppladdade filer - det vill säga poster i <code class=\"docutils literal notranslate\">request.FILES</code> - som enkla ordböcker med den nya <a class=\"reference internal\" href=\"/sv/5.2/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile\" title=\"django.core.files.uploadedfile.UploadedFile\"><code class=\"xref py py-class docutils literal notranslate\">UploadedFile</code></a>. Den gamla syntaxen för ordböcker fungerar inte längre.</p>\n<p>Alltså, i en vy som:</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\">my_view</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    f <span class=\"o\">=</span> request<span class=\"o\">.</span>FILES<span class=\"p\">[</span><span class=\"s2\">&quot;file_field_name&quot;</span><span class=\"p\">]</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>…måste du göra följande ändringar:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Gammal (0,96)</p></th>\n<th class=\"head\"><p>Ny (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">f['content']</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">f.read()</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">f['filnamn']</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">f.namn</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">f['content-type']</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">f.content_type</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"work-with-file-fields-using-the-new-api\">\n<h4>Arbeta med filfält med hjälp av det nya API:et<a class=\"heading-anchor\" href=\"#work-with-file-fields-using-the-new-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Den interna implementeringen av <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\">django.db.models.FileField</code></a> har ändrats. Ett synligt resultat av detta är att sättet du kommer åt specialattribut (URL, filnamn, bildstorlek etc.) för dessa modellfält har ändrats. Du kommer att behöva göra följande ändringar, förutsatt att din modells <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\">FileField</code></a> heter <code class=\"docutils literal notranslate\">myfile</code>:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Gammal (0,96)</p></th>\n<th class=\"head\"><p>Ny (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">myfile.get_content_filename()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">minfil.innehåll.sökväg</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">myfile.get_content_url()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">minfil.innehåll.url</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">myfile.get_content_size()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">minfil.innehåll.storlek</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">myfile.save_content_file()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">myfile.content.save()</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">myfile.get_content_width()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">myfile.content.width</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">myfile.get_content_height()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">myfile.content.height</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<p>Observera att attributen <code class=\"docutils literal notranslate\">width</code> och <code class=\"docutils literal notranslate\">height</code> endast är meningsfulla för <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\">ImageField</code></a>-fält. Mer information finns i dokumentationen <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/\"><span class=\"doc\">model API</span></a>.</p>\n</section>\n<section id=\"use-paginator-instead-of-objectpaginator\">\n<h4>Använd <code class=\"docutils literal notranslate\">Paginator</code> istället för <code class=\"docutils literal notranslate\">ObjectPaginator</code><a class=\"heading-anchor\" href=\"#use-paginator-instead-of-objectpaginator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">ObjectPaginator</code> i 0.96 har tagits bort och ersatts med en förbättrad version, <a class=\"reference internal\" href=\"/sv/5.2/ref/paginator/#django.core.paginator.Paginator\" title=\"django.core.paginator.Paginator\"><code class=\"xref py py-class docutils literal notranslate\">django.core.paginator.Paginator</code></a>.</p>\n</section>\n</section>\n<section id=\"templates\">\n<h3>Mallar<a class=\"heading-anchor\" href=\"#templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"learn-to-love-autoescaping\">\n<h4>Lär dig att älska autoescaping<a class=\"heading-anchor\" href=\"#learn-to-love-autoescaping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Som standard HTML-eskapsätter mallsystemet nu automatiskt utdata från varje variabel. För mer information, se <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/language/#automatic-html-escaping\"><span class=\"std std-ref\">Automatisk HTML-escaping</span></a>.</p>\n<p>Om du vill inaktivera automatisk eskapning för en enskild variabel använder du filtret <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\">safe</code></a>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code>This will be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span> <span class=\"cp\">}}</span>\nThis will not be escaped: <span class=\"cp\">{{</span> <span class=\"nv\">data</span><span class=\"o\">|</span><span class=\"nf\">safe</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n<p>Om du vill inaktivera auto-escaping för en hel mall, linda in mallen (eller bara en viss del av mallen) i taggen <a class=\"reference internal\" href=\"/sv/5.2/ref/templates/builtins/#std-templatetag-autoescape\"><code class=\"xref std std-ttag docutils literal notranslate\">autoescape</code></a>:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">autoescape</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n   ... unescaped template content here ...\n<span class=\"cp\">{%</span> <span class=\"k\">endautoescape</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"less-common-changes\">\n<h2>Mindre vanliga förändringar<a class=\"heading-anchor\" href=\"#less-common-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Följande ändringar är mindre, mer lokala ändringar. De bör endast påverka mer avancerade användare, men det är förmodligen värt att läsa igenom listan och kontrollera din kod för dessa saker.</p>\n<section id=\"signals\">\n<h3>Signaler<a class=\"heading-anchor\" href=\"#signals\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ul class=\"simple\">\n<li><p>Lägg till <code class=\"docutils literal notranslate\">**kwargs</code> till alla registrerade signalhanterare.</p></li>\n<li><p>Anslut, koppla från och skicka signaler via metoder på objektet <a class=\"reference internal\" href=\"/sv/5.2/topics/signals/#django.dispatch.Signal\" title=\"django.dispatch.Signal\"><code class=\"xref py py-class docutils literal notranslate\">Signal</code></a> istället för via modulmetoder i <code class=\"docutils literal notranslate\">django.dispatch.dispatcher</code>.</p></li>\n<li><p>Ta bort all användning av avsändaralternativen <code class=\"docutils literal notranslate\">Anonymous</code> och <code class=\"docutils literal notranslate\">Any</code>; de finns inte längre. Du kan fortfarande ta emot signaler som skickas av vilken avsändare som helst genom att använda <code class=\"docutils literal notranslate\">sender=None</code></p></li>\n<li><p>Gör alla anpassade signaler som du har deklarerat till instanser av <a class=\"reference internal\" href=\"/sv/5.2/topics/signals/#django.dispatch.Signal\" title=\"django.dispatch.Signal\"><code class=\"xref py py-class docutils literal notranslate\">django.dispatch.Signal</code></a> istället för anonyma objekt.</p></li>\n</ul>\n<p>Här är en snabb sammanfattning av de kodändringar du behöver göra:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Gammal (0,96)</p></th>\n<th class=\"head\"><p>Ny (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">def callback(avsändare)</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">def callback(avsändare, **kwargs)</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">sig = objekt()</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">sig = django.dispatch.Signal()</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">dispatcher.connect(callback, sig)</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">sig.connect(callback)</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">dispatcher.send(sig, avsändare)</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">sig.send(avsändare)</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">dispatcher.connect(callback, sig, avsändare=Any)</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">sig.connect(callback, avsändare=None)</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"comments\">\n<h3>Kommentarer<a class=\"heading-anchor\" href=\"#comments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du använde Django 0.96:s app <code class=\"docutils literal notranslate\">django.contrib.comments</code> måste du uppgradera till den nya kommentarsappen som introducerades i 1.0. Se uppgraderingsguiden för mer information.</p>\n</section>\n<section id=\"template-tags\">\n<h3>Malltaggar<a class=\"heading-anchor\" href=\"#template-tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"spaceless-tag\">\n<h4><code class=\"xref std std-ttag docutils literal notranslate\">utrymmeslös</code> tagg<a class=\"heading-anchor\" href=\"#spaceless-tag\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Malltaggen <code class=\"docutils literal notranslate\">spaceless</code> tar nu bort <em>alla</em> mellanslag mellan HTML-taggar, istället för att bevara ett enda mellanslag.</p>\n</section>\n</section>\n<section id=\"local-flavors\">\n<h3>Lokala smaker<a class=\"heading-anchor\" href=\"#local-flavors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"u-s-local-flavor\">\n<h4>Lokal smak från USA<a class=\"heading-anchor\" href=\"#u-s-local-flavor\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">django.contrib.localflavor.usa</code> har bytt namn till <code class=\"docutils literal notranslate\">django.contrib.localflavor.us</code>. Denna förändring gjordes för att matcha namngivningsschemat för andra lokala smaker. För att migrera din kod är allt du behöver göra att ändra importen.</p>\n</section>\n</section>\n<section id=\"sessions\">\n<h3>Sessioner<a class=\"heading-anchor\" href=\"#sessions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"getting-a-new-session-key\">\n<h4>Få en ny sessionsnyckel<a class=\"heading-anchor\" href=\"#getting-a-new-session-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">SessionBase.get_new_session_key()</code> har bytt namn till <code class=\"docutils literal notranslate\">_get_new_session_key()</code>. <code class=\"docutils literal notranslate\">get_new_session_object()</code> finns inte längre.</p>\n</section>\n</section>\n<section id=\"fixtures\">\n<h3>Fixturer<a class=\"heading-anchor\" href=\"#fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"loading-a-row-no-longer-calls-save\">\n<h4>Laddning av en rad kräver inte längre <code class=\"docutils literal notranslate\">save()</code><a class=\"heading-anchor\" href=\"#loading-a-row-no-longer-calls-save\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Tidigare körde laddning av en rad automatiskt modellens <code class=\"docutils literal notranslate\">save()</code>-metod. Detta är inte längre fallet, så alla fält (till exempel: tidsstämplar) som automatiskt fylldes i av en <code class=\"docutils literal notranslate\">save()</code> behöver nu uttryckliga värden i alla fixturer.</p>\n</section>\n</section>\n<section id=\"settings\">\n<h3>Inställningar<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"better-exceptions\">\n<h4>Bättre undantag<a class=\"heading-anchor\" href=\"#better-exceptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Det gamla <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#EnvironmentError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">EnvironmentError</code></a> har delats upp i ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ImportError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">ImportError</code></a> när Django misslyckas med att hitta inställningsmodulen och ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#RuntimeError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">RuntimeError</code></a> när du försöker konfigurera om inställningar efter att du redan har använt dem.</p>\n</section>\n<section id=\"login-url-has-moved\">\n<h4><a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">LOGIN_URL</code></a> har flyttats<a class=\"heading-anchor\" href=\"#login-url-has-moved\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Konstanten <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">LOGIN_URL</code></a> flyttades från <code class=\"docutils literal notranslate\">django.contrib.auth</code> till modulen <code class=\"docutils literal notranslate\">settings</code>. Istället för att använda <code class=\"docutils literal notranslate\">from django.contrib.auth import LOGIN_URL</code> hänvisa till <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\">settings.LOGIN_URL</code></a>.</p>\n</section>\n<section id=\"append-slash-behavior-has-been-updated\">\n<h4><a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\">APPEND_SLASH</code></a>-beteendet har uppdaterats<a class=\"heading-anchor\" href=\"#append-slash-behavior-has-been-updated\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>I 0.96, om en URL inte slutade med ett snedstreck eller hade en punkt i den sista komponenten i sökvägen, och <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\">APPEND_SLASH</code></a> var True, skulle Django omdirigera till samma URL, men med ett snedstreck i slutet. Nu kontrollerar Django för att se om mönstret utan det efterföljande snedstrecket skulle matchas av något i dina URL-mönster. Om så är fallet sker ingen omdirigering, eftersom det antas att du avsiktligt ville fånga det mönstret.</p>\n<p>För de flesta människor kommer detta inte att kräva några ändringar. Vissa människor har dock URL-mönster som ser ut så hä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=\"sa\">r</span><span class=\"s2\">&quot;/some_prefix/(.*)$&quot;</span>\n</code></pre></div>\n<p>Tidigare skulle dessa mönster ha omdirigerats till att ha ett efterföljande snedstreck. Om du alltid vill ha ett snedstreck på sådana webbadresser skriver du om mönstret 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=\"sa\">r</span><span class=\"s2\">&quot;/some_prefix/(.*/)$&quot;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"smaller-model-changes\">\n<h3>Mindre modellförändringar<a class=\"heading-anchor\" href=\"#smaller-model-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"different-exception-from-get\">\n<h4>Olika undantag från <code class=\"docutils literal notranslate\">get()</code><a class=\"heading-anchor\" href=\"#different-exception-from-get\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Hanterare returnerar nu ett <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned\" title=\"django.core.exceptions.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\">MultipleObjectsReturned</code></a> undantag istället för <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#AssertionError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">AssertionError</code></a>:</p>\n<p>Gammal (0,96):</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\">try</span><span class=\"p\">:</span>\n    Model<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"ne\">AssertionError</span><span class=\"p\">:</span>\n    handle_the_error<span class=\"p\">()</span>\n</code></pre></div>\n<p>Ny (1.0):</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\">try</span><span class=\"p\">:</span>\n    Model<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> Model<span class=\"o\">.</span>MultipleObjectsReturned<span class=\"p\">:</span>\n    handle_the_error<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"lazydate-has-been-fired\">\n<h4><code class=\"docutils literal notranslate\">LazyDate</code> har avfyrats<a class=\"heading-anchor\" href=\"#lazydate-has-been-fired\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Hjälpklassen <code class=\"docutils literal notranslate\">LazyDate</code> finns inte längre.</p>\n<p>Standardfältvärden och frågeargument kan båda vara anropsbara objekt, så instanser av <code class=\"docutils literal notranslate\">LazyDate</code> kan ersättas med en referens till <code class=\"docutils literal notranslate\">datetime.datetime.now</code>:</p>\n<p>Gammal (0,96):</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=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>maxlength<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    published <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>default<span class=\"o\">=</span>LazyDate<span class=\"p\">())</span>\n</code></pre></div>\n<p>Ny (1.0):</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\">import</span> <span class=\"nn\">datetime</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    published <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>default<span class=\"o\">=</span>datetime<span class=\"o\">.</span>datetime<span class=\"o\">.</span>now<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"decimalfield-is-new-and-floatfield-is-now-a-proper-float\">\n<h4><code class=\"docutils literal notranslate\">DecimalField</code> är ny, och <code class=\"docutils literal notranslate\">FloatField</code> är nu en riktig float<a class=\"heading-anchor\" href=\"#decimalfield-is-new-and-floatfield-is-now-a-proper-float\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Gammal (0,96):</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=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    field_name <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">(</span>max_digits<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> decimal_places<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Ny (1.0):</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=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    field_name <span class=\"o\">=</span> models<span class=\"o\">.</span>DecimalField<span class=\"p\">(</span>max_digits<span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> decimal_places<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Om du glömmer att göra denna ändring kommer du att se fel om att <code class=\"docutils literal notranslate\">FloatField</code> inte tar ett <code class=\"docutils literal notranslate\">max_digits</code>-attribut i <code class=\"docutils literal notranslate\">__init__</code>, eftersom den nya <code class=\"docutils literal notranslate\">FloatField</code> inte tar några precisionsrelaterade argument.</p>\n<p>Om du använder MySQL eller PostgreSQL behövs inga ytterligare ändringar. Databasens kolumntyper för <code class=\"docutils literal notranslate\">DecimalField</code> är desamma som för den gamla <code class=\"docutils literal notranslate\">FloatField</code>.</p>\n<p>Om du använder SQLite måste du tvinga databasen att visa de aktuella kolumnerna som decimaltyper i stället för flyttal. För att göra detta måste du ladda om dina data. Gör detta efter att du har gjort ändringen till att använda <code class=\"docutils literal notranslate\">DecimalField</code> i din kod och uppdaterat Django-koden.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><strong>Säkerhetskopiera din databas först!</strong></p>\n<p>För SQLite innebär detta att du gör en kopia av den enda fil som lagrar databasen (namnet på den filen är <code class=\"docutils literal notranslate\">DATABASE_NAME</code> i filen <code class=\"docutils literal notranslate\">settings.py</code>).</p>\n</aside>\n<p>För att uppgradera varje applikation till att använda en <code class=\"docutils literal notranslate\">DecimalField</code> kan du göra följande och ersätta <code class=\"docutils literal notranslate\">&lt;app&gt;</code> i koden nedan med varje apps namn:</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>./manage.py dumpdata --format<span class=\"o\">=</span>xml &lt;app&gt; &gt; data-dump.xml\n<span class=\"gp\">$ </span>./manage.py reset &lt;app&gt;\n<span class=\"gp\">$ </span>./manage.py loaddata data-dump.xml\n</code></pre></div>\n<p>Anteckningar:</p>\n<ol class=\"arabic simple\">\n<li><p>Det är viktigt att du kommer ihåg att använda XML-format i det första steget av den här processen. Vi utnyttjar en funktion i XML-datadumparna som gör det möjligt att porta floats till decimaler med SQLite.</p></li>\n<li><p>I det andra steget kommer du att bli ombedd att bekräfta att du är beredd att förlora data för applikationen/applikationerna i fråga. Säg ja, så återställer vi dessa data i det tredje steget.</p></li>\n<li><p><code class=\"docutils literal notranslate\">DecimalField</code> används inte i någon av de appar som levererades med Django innan denna ändring gjordes, så du behöver inte oroa dig för att utföra denna procedur för någon av Djangos standardmodeller.</p></li>\n</ol>\n<p>Om något går fel under processen ovan är det bara att kopiera den säkerhetskopierade databasfilen över originalfilen och börja om.</p>\n</section>\n</section>\n<section id=\"internationalization\">\n<h3>Internationalisering<a class=\"heading-anchor\" href=\"#internationalization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"django-views-i18n-set-language-now-requires-a-post-request\">\n<h4><a class=\"reference internal\" href=\"/sv/5.2/topics/i18n/translation/#django.views.i18n.set_language\" title=\"django.views.i18n.set_language\"><code class=\"xref py py-func docutils literal notranslate\">django.views.i18n.set_language()</code></a> kräver nu en POST-begäran<a class=\"heading-anchor\" href=\"#django-views-i18n-set-language-now-requires-a-post-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Tidigare användes en GET-begäran. Det gamla beteendet innebar att state (den locale som används för att visa webbplatsen) kunde ändras genom en GET-begäran, vilket strider mot HTTP-specifikationens rekommendationer. Kod som anropar denna vy måste se till att en POST-begäran nu görs, istället för en GET. Det innebär att du inte längre kan använda en länk för att komma åt vyn, utan du måste använda någon form av formulär (t.ex. en knapp).</p>\n</section>\n<section id=\"is-no-longer-in-builtins\">\n<h4><code class=\"docutils literal notranslate\">_()</code> finns inte längre i inbyggda program<a class=\"heading-anchor\" href=\"#is-no-longer-in-builtins\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">_()</code> (det anropsbara objektet vars namn är ett enda understreck) är inte längre monkeypatchat i builtins - det vill säga, det finns inte längre magiskt tillgängligt i varje modul.</p>\n<p>Om du tidigare förlitade dig på att <code class=\"docutils literal notranslate\">_()</code> alltid skulle finnas, bör du nu uttryckligen importera <code class=\"docutils literal notranslate\">ugettext</code> eller <code class=\"docutils literal notranslate\">ugettext_lazy</code>, om det är lämpligt, och alias det till <code class=\"docutils literal notranslate\">_</code> själv:</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.utils.translation</span> <span class=\"kn\">import</span> ugettext <span class=\"k\">as</span> _\n</code></pre></div>\n</section>\n</section>\n<section id=\"http-request-response-objects\">\n<h3>Objekt för HTTP-begäran/-svar<a class=\"heading-anchor\" href=\"#http-request-response-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"dictionary-access-to-httprequest\">\n<h4>Dictionary-åtkomst till <code class=\"docutils literal notranslate\">HttpRequest</code><a class=\"heading-anchor\" href=\"#dictionary-access-to-httprequest\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>objekten <code class=\"docutils literal notranslate\">HttpRequest</code> stöder inte längre direkt åtkomst i ordboksstil; tidigare var både <code class=\"docutils literal notranslate\">GET</code> och <code class=\"docutils literal notranslate\">POST</code> data direkt tillgängliga på objektet <code class=\"docutils literal notranslate\">HttpRequest</code> (t.ex. kunde du söka efter en bit formulärdata genom att använda <code class=\"docutils literal notranslate\">if 'some_form_key' in request</code> eller genom att läsa <code class=\"docutils literal notranslate\">request['some_form_key']</code>. Detta stöds inte längre; om du behöver tillgång till kombinerade <code class=\"docutils literal notranslate\">GET</code> och <code class=\"docutils literal notranslate\">POST</code> data, använd <code class=\"docutils literal notranslate\">request.REQUEST</code> istället.</p>\n<p>Det rekommenderas dock starkt att du alltid uttryckligen letar i lämplig ordbok efter den typ av begäran du förväntar dig att få (<code class=\"docutils literal notranslate\">request.GET</code> eller <code class=\"docutils literal notranslate\">request.POST</code>); att förlita sig på den kombinerade ordboken <code class=\"docutils literal notranslate\">request.REQUEST</code> kan maskera ursprunget till inkommande data.</p>\n</section>\n<section id=\"accessing-httpresponse-headers\">\n<h4>Tillgång till <code class=\"docutils literal notranslate\">HTTPResponse</code>-rubriker<a class=\"heading-anchor\" href=\"#accessing-httpresponse-headers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">django.http.HttpResponse.headers</code> har bytt namn till <code class=\"docutils literal notranslate\">_headers</code> och <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\">HttpResponse</code></a> stöder nu containment checking direkt. Så använd <code class=\"docutils literal notranslate\">if header in response:</code> istället för <code class=\"docutils literal notranslate\">if header in response.headers:</code>.</p>\n</section>\n</section>\n<section id=\"generic-relations\">\n<h3>Generiska relationer<a class=\"heading-anchor\" href=\"#generic-relations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"generic-relations-have-been-moved-out-of-core\">\n<h4>Generiska relationer har flyttats ut ur kärnan<a class=\"heading-anchor\" href=\"#generic-relations-have-been-moved-out-of-core\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>De generiska relationsklasserna - <code class=\"docutils literal notranslate\">GenericForeignKey</code> och <code class=\"docutils literal notranslate\">GenericRelation</code> - har flyttats till modulen <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/contenttypes/#module-django.contrib.contenttypes\" title=\"django.contrib.contenttypes: Provides generic interface to installed models.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.contenttypes</code></a>.</p>\n</section>\n</section>\n<section id=\"testing\">\n<h3>Testar<a class=\"heading-anchor\" href=\"#testing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"django-test-client-login-has-changed\">\n<h4><a class=\"reference internal\" href=\"/sv/5.2/topics/testing/tools/#django.test.Client.login\" title=\"django.test.Client.login\"><code class=\"xref py py-meth docutils literal notranslate\">django.test.Client.login()</code></a> har ändrats<a class=\"heading-anchor\" href=\"#django-test-client-login-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Gammal (0,96):</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.test</span> <span class=\"kn\">import</span> Client\n\nc <span class=\"o\">=</span> Client<span class=\"p\">()</span>\nc<span class=\"o\">.</span>login<span class=\"p\">(</span><span class=\"s2\">&quot;/path/to/login&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;myuser&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mypassword&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ny (1.0):</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=\"c1\"># ... same as above, but then:</span>\nc<span class=\"o\">.</span>login<span class=\"p\">(</span>username<span class=\"o\">=</span><span class=\"s2\">&quot;myuser&quot;</span><span class=\"p\">,</span> password<span class=\"o\">=</span><span class=\"s2\">&quot;mypassword&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"management-commands\">\n<h3>Ledningskommandon<a class=\"heading-anchor\" href=\"#management-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"running-management-commands-from-your-code\">\n<h4>Kör kommandon för hantering från din kod<a class=\"heading-anchor\" href=\"#running-management-commands-from-your-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><a class=\"reference internal\" href=\"/sv/5.2/howto/custom-management-commands/#module-django.core.management\" title=\"django.core.management\"><code class=\"xref py py-mod docutils literal notranslate\">django.core.management</code></a> har genomgått en omfattande omarbetning.</p>\n<p>Anrop till hanteringstjänster i din kod måste nu använda <code class=\"docutils literal notranslate\">call_command</code>. Om du till exempel har en testkod som anropar flush och load_data:</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.core</span> <span class=\"kn\">import</span> management\n\nmanagement<span class=\"o\">.</span>flush<span class=\"p\">(</span>verbosity<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> interactive<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\nmanagement<span class=\"o\">.</span>load_data<span class=\"p\">([</span><span class=\"s2\">&quot;test_data&quot;</span><span class=\"p\">],</span> verbosity<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>…måste du ändra den här koden så att den lyder:</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.core</span> <span class=\"kn\">import</span> management\n\nmanagement<span class=\"o\">.</span>call_command<span class=\"p\">(</span><span class=\"s2\">&quot;flush&quot;</span><span class=\"p\">,</span> verbosity<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> interactive<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\nmanagement<span class=\"o\">.</span>call_command<span class=\"p\">(</span><span class=\"s2\">&quot;loaddata&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;test_data&quot;</span><span class=\"p\">,</span> verbosity<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"subcommands-must-now-precede-options\">\n<h4>Underkommandon måste nu föregå alternativ<a class=\"heading-anchor\" href=\"#subcommands-must-now-precede-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">django-admin.py</code> och <code class=\"docutils literal notranslate\">manage.py</code> kräver nu att underkommandon föregår alternativen. Så här är det:</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>django-admin.py --settings<span class=\"o\">=</span>foo.bar runserver\n</code></pre></div>\n<p>…fungerar inte längre och bör ändras till:</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>django-admin.py runserver --settings<span class=\"o\">=</span>foo.bar\n</code></pre></div>\n</section>\n</section>\n<section id=\"syndication\">\n<h3>Syndikering<a class=\"heading-anchor\" href=\"#syndication\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"feed-init-has-changed\">\n<h4><code class=\"docutils literal notranslate\">Feed.__init__</code> har ändrats<a class=\"heading-anchor\" href=\"#feed-init-has-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Metoden <code class=\"docutils literal notranslate\">__init__()</code> i syndikeringsramverkets klass <code class=\"docutils literal notranslate\">Feed</code> tar nu ett <code class=\"docutils literal notranslate\">HttpRequest</code>-objekt som sin andra parameter, istället för feedens URL. Detta gör att syndikeringsramverket kan fungera utan att kräva webbplatsramverket. Detta påverkar endast kod som subklassar <code class=\"docutils literal notranslate\">Feed</code> och åsidosätter metoden <code class=\"docutils literal notranslate\">__init__()</code>, och kod som anropar <code class=\"docutils literal notranslate\">Feed.__init__()</code> direkt.</p>\n</section>\n</section>\n<section id=\"data-structures\">\n<h3>Datastrukturer<a class=\"heading-anchor\" href=\"#data-structures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"sorteddictfromlist-is-gone\">\n<h4><code class=\"docutils literal notranslate\">SortedDictFromList</code> är borta<a class=\"heading-anchor\" href=\"#sorteddictfromlist-is-gone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">django.newforms.forms.SortedDictFromList</code> togs bort. <code class=\"docutils literal notranslate\">django.utils.datastructures.SortedDict</code> kan nu instansieras med en sekvens av tupler.</p>\n<p>För att uppdatera din kod:</p>\n<ol class=\"arabic simple\">\n<li><p>Använd <code class=\"docutils literal notranslate\">django.utils.datastructures.SortedDict</code> där du tidigare använde <code class=\"docutils literal notranslate\">django.newforms.forms.SortedDictFromList</code>.</p></li>\n<li><p>Eftersom <code class=\"docutils literal notranslate\">django.utils.datastructures.SortedDict.copy</code> inte returnerar en deepcopy som <code class=\"docutils literal notranslate\">SortedDictFromList.copy()</code> gjorde, måste du uppdatera din kod om du förlitade dig på en deepcopy. Gör detta genom att använda <code class=\"docutils literal notranslate\">copy.deepcopy</code> direkt.</p></li>\n</ol>\n</section>\n</section>\n<section id=\"database-backend-functions\">\n<h3>Funktioner för databasens backend<a class=\"heading-anchor\" href=\"#database-backend-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"database-backend-functions-have-been-renamed\">\n<h4>Databasens backend-funktioner har bytt namn<a class=\"heading-anchor\" href=\"#database-backend-functions-have-been-renamed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Nästan <em>alla</em> funktioner på databasens backend-nivå har bytt namn och/eller flyttats. Ingen av dessa har dokumenterats, men du måste ändra din kod om du använder någon av dessa funktioner, som alla finns i <a class=\"reference internal\" href=\"/sv/5.2/topics/db/#module-django.db\" title=\"django.db\"><code class=\"xref py py-mod docutils literal notranslate\">django.db</code></a>:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Gammal (0,96)</p></th>\n<th class=\"head\"><p>Ny (1.0)</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_autoinc_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.autoinc_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_date_extract_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.datum_extrahera_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_date_trunc_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.datum_trunc_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_datetime_cast_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.datetime_cast_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_deferrable_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.deferrable_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_drop_foreignkey_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.drop_foreignkey_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_fulltext_search_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.fulltext_search_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_last_insert_id</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.sista_insättning_id</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_limit_offset_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.limit_offset_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_max_name_length</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.max_namn_längd</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_pk_default_value</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">connection.ops.pk_default_value</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_random_function_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.random_function_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_sql_flush</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.sql_flush</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_sql_sequence_reset</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.sequence_reset_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_start_transaction_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.start_transaktion_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_tablespace_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.tablespace_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.quote_name</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.quote_namn</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_query_set_class</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">connection.ops.query_set_class</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.get_field_cast_sql</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.fält_cast_sql</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.get_drop_sequence</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.ops.drop_sequence_sql</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.OPERATOR_MAPPING</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.operatörer</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.tillåter_gruppering_per_ordinal</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.tillåter_gruppering_vid_ordinal</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.allows_unique_and_pk</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.tillåter_unika_och_pk</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.autoindexes_primära_nycklar</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.autoindex_primära_nycklar</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.needs_datetime_string_cast</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.behöver_datatid_sträng_cast</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.needs_upper_for_iops</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.behov_av_övre_del_för_iops</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.stöd_begränsningar</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.stödjer_begränsningar</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.stöder_bordsytor</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.stödjer_bordsytor</code></p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\">backend.uses_case_insensitive_names</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">connection.features.uses_case_insensitive_names</code></p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\">backend.uses_custom_queryset</code> <code class=\"docutils literal notranslate\">backend.uses_custom_queryset</code></p></td>\n<td><p><code class=\"docutils literal notranslate\">anslutning.funktioner.använder_custom_queryset</code></p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n</section>\n</section>","rootId":"porting-your-apps-from-django-0-96-to-1-0","toc":[{"title":"Vanliga förändringar","anchor":"common-changes","children":[{"title":"Använd Unicode","anchor":"use-unicode","children":[]},{"title":"Modeller","anchor":"models","children":[{"title":"Byt namn på maxlength till max_length","anchor":"rename-maxlength-to-max-length","children":[]},{"title":"Ersätt __str__ med __unicode__","anchor":"replace-str-with-unicode","children":[]},{"title":"Ta bort prepopulated_from","anchor":"remove-prepopulated-from","children":[]},{"title":"Ta bort kärna","anchor":"remove-core","children":[]},{"title":"Ersätt class Admin: med admin.py","anchor":"replace-class-admin-with-admin-py","children":[]},{"title":"Exempel","anchor":"example","children":[]}]},{"title":"Administratören","anchor":"the-admin","children":[{"title":"Använd ny inline-syntax","anchor":"use-new-inline-syntax","children":[]},{"title":"Förenkla fields, eller använd fieldsets","anchor":"simplify-fields-or-use-fieldsets","children":[]}]},{"title":"URL:er","anchor":"urls","children":[{"title":"Uppdatera din root urls.py","anchor":"update-your-root-urls-py","children":[]}]},{"title":"Vyer","anchor":"views","children":[{"title":"Använd django.forms istället för newforms","anchor":"use-django-forms-instead-of-newforms","children":[]},{"title":"Hantera uppladdade filer med hjälp av det nya API:et","anchor":"handle-uploaded-files-using-the-new-api","children":[]},{"title":"Arbeta med filfält med hjälp av det nya API:et","anchor":"work-with-file-fields-using-the-new-api","children":[]},{"title":"Använd Paginator istället för ObjectPaginator","anchor":"use-paginator-instead-of-objectpaginator","children":[]}]},{"title":"Mallar","anchor":"templates","children":[{"title":"Lär dig att älska autoescaping","anchor":"learn-to-love-autoescaping","children":[]}]}]},{"title":"Mindre vanliga förändringar","anchor":"less-common-changes","children":[{"title":"Signaler","anchor":"signals","children":[]},{"title":"Kommentarer","anchor":"comments","children":[]},{"title":"Malltaggar","anchor":"template-tags","children":[{"title":"utrymmeslös tagg","anchor":"spaceless-tag","children":[]}]},{"title":"Lokala smaker","anchor":"local-flavors","children":[{"title":"Lokal smak från USA","anchor":"u-s-local-flavor","children":[]}]},{"title":"Sessioner","anchor":"sessions","children":[{"title":"Få en ny sessionsnyckel","anchor":"getting-a-new-session-key","children":[]}]},{"title":"Fixturer","anchor":"fixtures","children":[{"title":"Laddning av en rad kräver inte längre save()","anchor":"loading-a-row-no-longer-calls-save","children":[]}]},{"title":"Inställningar","anchor":"settings","children":[{"title":"Bättre undantag","anchor":"better-exceptions","children":[]},{"title":"LOGIN_URL har flyttats","anchor":"login-url-has-moved","children":[]},{"title":"APPEND_SLASH-beteendet har uppdaterats","anchor":"append-slash-behavior-has-been-updated","children":[]}]},{"title":"Mindre modellförändringar","anchor":"smaller-model-changes","children":[{"title":"Olika undantag från get()","anchor":"different-exception-from-get","children":[]},{"title":"LazyDate har avfyrats","anchor":"lazydate-has-been-fired","children":[]},{"title":"DecimalField är ny, och FloatField är nu en riktig float","anchor":"decimalfield-is-new-and-floatfield-is-now-a-proper-float","children":[]}]},{"title":"Internationalisering","anchor":"internationalization","children":[{"title":"django.views.i18n.set_language() kräver nu en POST-begäran","anchor":"django-views-i18n-set-language-now-requires-a-post-request","children":[]},{"title":"_() finns inte längre i inbyggda program","anchor":"is-no-longer-in-builtins","children":[]}]},{"title":"Objekt för HTTP-begäran/-svar","anchor":"http-request-response-objects","children":[{"title":"Dictionary-åtkomst till HttpRequest","anchor":"dictionary-access-to-httprequest","children":[]},{"title":"Tillgång till HTTPResponse-rubriker","anchor":"accessing-httpresponse-headers","children":[]}]},{"title":"Generiska relationer","anchor":"generic-relations","children":[{"title":"Generiska relationer har flyttats ut ur kärnan","anchor":"generic-relations-have-been-moved-out-of-core","children":[]}]},{"title":"Testar","anchor":"testing","children":[{"title":"django.test.Client.login() har ändrats","anchor":"django-test-client-login-has-changed","children":[]}]},{"title":"Ledningskommandon","anchor":"management-commands","children":[{"title":"Kör kommandon för hantering från din kod","anchor":"running-management-commands-from-your-code","children":[]},{"title":"Underkommandon måste nu föregå alternativ","anchor":"subcommands-must-now-precede-options","children":[]}]},{"title":"Syndikering","anchor":"syndication","children":[{"title":"Feed.__init__ har ändrats","anchor":"feed-init-has-changed","children":[]}]},{"title":"Datastrukturer","anchor":"data-structures","children":[{"title":"SortedDictFromList är borta","anchor":"sorteddictfromlist-is-gone","children":[]}]},{"title":"Funktioner för databasens backend","anchor":"database-backend-functions","children":[{"title":"Databasens backend-funktioner har bytt namn","anchor":"database-backend-functions-have-been-renamed","children":[]}]}]}],"breadcrumbs":[{"docname":"releases/index","title":"Versionsinformation","url":"/sv/5.2/releases/"},{"docname":"releases/1.0","title":"Django 1.0 versionsinformation","url":"/sv/5.2/releases/1.0/"}],"prev":{"docname":"releases/1.0","title":"Django 1.0 versionsinformation","url":"/sv/5.2/releases/1.0/"},"next":{"docname":"releases/0.96","title":"Django version 0.96 versionsinformation","url":"/sv/5.2/releases/0.96/"},"formats":{"html":"/sv/5.2/releases/1.0-porting-guide/","markdown":"/sv/5.2/releases/1.0-porting-guide.md","json":"/sv/5.2/releases/1.0-porting-guide.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/releases/1.0-porting-guide.txt","official":"https://docs.djangoproject.com/sv/5.2/releases/1.0-porting-guide/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}