{"title":"Migreringar","version":"6.1","locale":"sv","docname":"topics/migrations","url":"/sv/6.1/topics/migrations/","canonical":"https://djangodocs.dev/sv/6.1/topics/migrations/","summary":"Migreringar är Djangos sätt att sprida ändringar som du gör i dina modeller (lägga till ett fält, ta bort en modell etc.) till ditt databasschema. De är utformade…","html":"<span id=\"migrations\"></span><h1>Migreringar<a class=\"heading-anchor\" href=\"#module-django.db.migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Migreringar är Djangos sätt att sprida ändringar som du gör i dina modeller (lägga till ett fält, ta bort en modell etc.) till ditt databasschema. De är utformade för att vara mestadels automatiska, men du måste veta när du ska göra migreringar, när du ska köra dem och de vanliga problem du kan stöta på.</p>\n<section id=\"the-commands\">\n<h2>Kommandon<a class=\"heading-anchor\" href=\"#the-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det finns flera kommandon som du kommer att använda för att interagera med migreringar och Djangos hantering av databasscheman:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a>, som ansvarar för att applicera och avapplicera migreringar.</p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a>, som ansvarar för att skapa nya migreringar baserat på de ändringar du har gjort i dina modeller.</p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">sqlmigrate</span></code></a>, som visar SQL-satserna för en migrering.</p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-showmigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">showmigrations</span></code></a>, som listar ett projekts migreringar och deras status.</p></li>\n</ul>\n<p>Du bör tänka på migreringar som ett versionskontrollsystem för ditt databasschema. <code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code> ansvarar för att paketera dina modelländringar i enskilda migreringsfiler - analogt med commits - och <code class=\"docutils literal notranslate\"><span class=\"pre\">migrate</span></code> ansvarar för att tillämpa dem på din databas.</p>\n<p>Migreringsfilerna för varje app finns i en ”migrations”-katalog inuti appen och är utformade för att läggas till och distribueras som en del av dess kodbas. Du bör göra dem en gång på din utvecklingsmaskin och sedan köra samma migreringar på dina kollegors maskiner, dina staging-maskiner och så småningom dina produktionsmaskiner.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Det är möjligt att åsidosätta namnet på paketet som innehåller migreringarna för varje enskild app genom att ändra inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MIGRATION_MODULES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIGRATION_MODULES</span></code></a>.</p>\n</aside>\n<p>Migreringar körs på samma sätt på samma dataset och ger konsekventa resultat, vilket innebär att det du ser i utveckling och staging under samma omständigheter är exakt vad som kommer att hända i produktion.</p>\n<p>Django kommer att göra migreringar för alla ändringar av dina modeller eller fält - även alternativ som inte påverkar databasen - eftersom det enda sättet att rekonstruera ett fält korrekt är att ha alla ändringar i historiken, och du kan behöva dessa alternativ i vissa datamigreringar senare (till exempel om du har ställt in anpassade validerare).</p>\n</section>\n<section id=\"backend-support\">\n<h2>Support för backend<a class=\"heading-anchor\" href=\"#backend-support\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Migreringar stöds på alla backends som Django levereras med, liksom alla backends från tredje part om de har programmerat in stöd för schemaändring (görs via <a class=\"reference internal\" href=\"/sv/6.1/ref/schema-editor/\"><span class=\"doc\">SchemaEditor</span></a>-klassen).</p>\n<p>Vissa databaser är dock mer kapabla än andra när det gäller schemamigreringar; några av förbehållen tas upp nedan.</p>\n<section id=\"postgresql\">\n<h3>PostgreSQL<a class=\"heading-anchor\" href=\"#postgresql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>PostgreSQL är den mest kapabla av alla databaser här när det gäller schemastöd.</p>\n</section>\n<section id=\"mysql\">\n<h3>MySQL<a class=\"heading-anchor\" href=\"#mysql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>MySQL saknar stöd för transaktioner kring schemaändringsoperationer, vilket innebär att om en migrering misslyckas med att tillämpas måste du manuellt plocka bort ändringarna för att försöka igen (det är omöjligt att rulla tillbaka till en tidigare punkt).</p>\n<p>MySQL 8.0 introducerade betydande prestandaförbättringar för <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/innodb-online-ddl-operations.html\">DDL-operationer</a>, vilket gör dem mer effektiva och minskar behovet av fullständiga tabellåteruppbyggnader. Det kan dock inte garantera en fullständig frånvaro av lås eller avbrott. I situationer där lås fortfarande är nödvändiga kommer varaktigheten för dessa operationer att stå i proportion till antalet rader som är inblandade.</p>\n<p>Slutligen har MySQL en relativt liten gräns för den kombinerade storleken på alla kolumner som ett index täcker. Detta innebär att index som är möjliga på andra backends inte kommer att kunna skapas under MySQL.</p>\n</section>\n<section id=\"sqlite\">\n<h3>SQLite<a class=\"heading-anchor\" href=\"#sqlite\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>SQLite har mycket lite inbyggt stöd för schemaändring, och därför försöker Django emulera det genom att:</p>\n<ul class=\"simple\">\n<li><p>Skapa en ny tabell med det nya schemat</p></li>\n<li><p>Kopiering av data över</p></li>\n<li><p>Ta bort det gamla bordet</p></li>\n<li><p>Byt namn på den nya tabellen så att den matchar det ursprungliga namnet</p></li>\n</ul>\n<p>Den här processen fungerar i allmänhet bra, men den kan vara långsam och ibland buggig. Det rekommenderas inte att du kör och migrerar SQLite i en produktionsmiljö om du inte är mycket medveten om riskerna och dess begränsningar; det stöd som Django levereras med är utformat för att tillåta utvecklare att använda SQLite på sina lokala maskiner för att utveckla mindre komplexa Django-projekt utan behov av en fullständig databas.</p>\n</section>\n</section>\n<section id=\"workflow\">\n<h2>Arbetsflöde<a class=\"heading-anchor\" href=\"#workflow\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django kan skapa migreringar åt dig. Gör ändringar i dina modeller - lägg till exempel till ett fält och ta bort en modell - och kör sedan <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"shell\"><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=\"w\"> </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>makemigrations\nMigrations<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"s1\">&#39;books&#39;</span>:\n<span class=\"w\">  </span>books/migrations/0003_auto.py:\n<span class=\"w\">    </span>~<span class=\"w\"> </span>Alter<span class=\"w\"> </span>field<span class=\"w\"> </span>author<span class=\"w\"> </span>on<span class=\"w\"> </span>book\n</code></pre></div>\n<p>Dina modeller kommer att skannas och jämföras med de versioner som för närvarande finns i dina migreringsfiler, och sedan kommer en ny uppsättning migreringar att skrivas ut. Se till att läsa utdata för att se vad <code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code> tror att du har ändrat - den är inte perfekt, och för komplexa ändringar kanske den inte upptäcker vad du förväntar dig.</p>\n<p>När du har dina nya migreringsfiler bör du tillämpa dem på din databas för att se till att de fungerar som förväntat:</p>\n<div class=\"code-block\" data-language=\"shell\"><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=\"w\"> </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>migrate\nOperations<span class=\"w\"> </span>to<span class=\"w\"> </span>perform:\n<span class=\"w\">  </span>Apply<span class=\"w\"> </span>all<span class=\"w\"> </span>migrations:<span class=\"w\"> </span>books\nRunning<span class=\"w\"> </span>migrations:\n<span class=\"w\">  </span>Applying<span class=\"w\"> </span>books.0003_auto...<span class=\"w\"> </span>OK\n</code></pre></div>\n<p>När migreringen har tillämpats ska du överföra migreringen och modelländringen till ditt versionshanteringssystem som en enda överföring - på så sätt får andra utvecklare (eller dina produktionsservrar) både ändringarna i dina modeller och den åtföljande migreringen samtidigt när de kontrollerar koden.</p>\n<p>Om du vill ge migreringarna ett meningsfullt namn i stället för ett genererat namn kan du använda alternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-makemigrations-name\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">makemigrations</span> <span class=\"pre\">--name</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"shell\"><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=\"w\"> </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>makemigrations<span class=\"w\"> </span>--name<span class=\"w\"> </span>changed_my_model<span class=\"w\"> </span>your_app_label\n</code></pre></div>\n<section id=\"version-control\">\n<h3>Versionskontroll<a class=\"heading-anchor\" href=\"#version-control\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Eftersom migreringar lagras i versionshanteringen kan du ibland stöta på situationer där du och en annan utvecklare har genomfört en migrering till samma app samtidigt, vilket resulterar i två migreringar med samma nummer.</p>\n<p>Oroa dig inte - siffrorna är bara där för utvecklarnas referens, Django bryr sig bara om att varje migrering har ett annat namn. Migreringar anger vilka andra migreringar de är beroende av - inklusive tidigare migreringar i samma app - i filen, så det är möjligt att upptäcka när det finns två nya migreringar för samma app som inte är ordnade.</p>\n<p>När detta händer kommer Django att fråga dig och ge dig några alternativ. Om det tycker att det är tillräckligt säkert kommer det att erbjuda att automatiskt linearisera de två migreringarna åt dig. Om inte, måste du gå in och modifiera migreringarna själv - oroa dig inte, det är inte svårt och förklaras mer i <a class=\"reference internal\" href=\"#migration-files\"><span class=\"std std-ref\">Migreringsfiler</span></a> nedan.</p>\n</section>\n</section>\n<section id=\"transactions\">\n<h2>Transaktioner<a class=\"heading-anchor\" href=\"#transactions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>På databaser som stöder DDL-transaktioner (SQLite och PostgreSQL) kommer alla migreringsoperationer att köras i en enda transaktion som standard. Om en databas däremot inte stöder DDL-transaktioner (t.ex. MySQL, Oracle) kommer alla operationer att köras utan en transaktion.</p>\n<p>Du kan förhindra att en migrering körs i en transaktion genom att ställa in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">migrations</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">atomic</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n<p>It’s also possible to execute parts of the migration inside a transaction using\n<a class=\"reference internal\" href=\"/sv/6.1/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">atomic()</span></code></a> or by passing <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic=True</span></code> to\n<a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a>. See\n<a class=\"reference internal\" href=\"/sv/6.1/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">Icke-atomiska migreringar</span></a> for more details.</p>\n</section>\n<section id=\"dependencies\">\n<h2>Beroenden<a class=\"heading-anchor\" href=\"#dependencies\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Även om migreringar sker per app är tabellerna och relationerna i dina modeller för komplexa för att skapas för en app i taget. När du gör en migrering som kräver att något annat körs - till exempel om du lägger till en <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> i appen <code class=\"docutils literal notranslate\"><span class=\"pre\">books</span></code> till appen <code class=\"docutils literal notranslate\"><span class=\"pre\">authors</span></code> - kommer den resulterande migreringen att innehålla ett beroende av en migrering i <code class=\"docutils literal notranslate\"><span class=\"pre\">authors</span></code>.</p>\n<p>Detta innebär att när du kör migreringarna körs <code class=\"docutils literal notranslate\"><span class=\"pre\">authors</span></code>-migreringen först och skapar tabellen som <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> refererar till, och sedan körs migreringen som skapar <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>-kolumnen efteråt och skapar begränsningen. Om detta inte hände skulle migreringen försöka skapa kolumnen <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> utan att tabellen som den hänvisar till existerar och din databas skulle ge ett fel.</p>\n<p>Detta beroendebeteende påverkar de flesta migreringar där du begränsar till en enda app. Att begränsa till en enda app (antingen i <code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">migrate</span></code>) är ett löfte om bästa möjliga ansträngning och inte en garanti; alla andra appar som behöver användas för att få beroenden korrekta kommer att bli det.</p>\n<p>Appar utan migreringar får inte ha relationer (<code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code>, etc.) till appar med migreringar. Ibland kan det fungera, men det stöds inte.</p>\n<section id=\"swappable-dependencies\">\n<h3>Utbytbara beroenden<a class=\"heading-anchor\" href=\"#swappable-dependencies\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.django.db.migrations.swappable_dependency\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.db.migrations.</span></span><span class=\"sig-name descname\"><span class=\"pre\">swappable_dependency</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.django.db.migrations.swappable_dependency\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">swappable_dependency()</span></code> används i migreringar för att deklarera ”swappable” beroenden av migreringar i appen för den inbytta modellen, för närvarande vid den första migreringen av denna app. Som en följd av detta bör den inbytta modellen skapas i den första migreringen. Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> är en sträng <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&lt;app</span> <span class=\"pre\">label&gt;.&lt;model&gt;&quot;</span></code> som beskriver en appetikett och ett modellnamn, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;myapp.MyModel&quot;</span></code>.</p>\n<p>Genom att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">swappable_dependency()</span></code> informerar du migreringsramverket om att migreringen är beroende av en annan migrering som skapar en swappable-modell, vilket ger möjlighet att ersätta modellen med en annan implementering i framtiden. Detta används vanligtvis för att referera till modeller som är föremål för anpassning eller ersättning, till exempel den anpassade användarmodellen (<code class=\"docutils literal notranslate\"><span class=\"pre\">settings.AUTH_USER_MODEL</span></code>, som standard är <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;auth.User&quot;</span></code>) i Djangos autentiseringssystem.</p>\n</section>\n</section>\n<section id=\"migration-files\">\n<span id=\"id1\"></span><h2>Migreringsfiler<a class=\"heading-anchor\" href=\"#migration-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Migreringar lagras i ett diskformat som här kallas ”migreringsfiler”. Dessa filer är egentligen vanliga Python-filer med en överenskommen objektlayout, skrivna i en deklarativ stil.</p>\n<p>En grundläggande migreringsfil 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">migrations</span><span class=\"p\">,</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"s2\">&quot;migrations&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">)]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">DeleteModel</span><span class=\"p\">(</span><span class=\"s2\">&quot;Tribble&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AddField</span><span class=\"p\">(</span><span class=\"s2\">&quot;Author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Vad Django letar efter när den laddar en migreringsfil (som en Python-modul) är en underklass av <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.migrations.Migration</span></code> som heter <code class=\"docutils literal notranslate\"><span class=\"pre\">Migration</span></code>. Det inspekterar sedan detta objekt för fyra attribut, varav endast två används för det mesta:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code>, en lista över migreringar som den här beror på.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">operations</span></code>, en lista över <code class=\"docutils literal notranslate\"><span class=\"pre\">Operation</span></code>-klasser som definierar vad denna migrering gör.</p></li>\n</ul>\n<p>Operationerna är nyckeln; de är en uppsättning deklarativa instruktioner som talar om för Django vilka schemaändringar som behöver göras. Django skannar dem och bygger en representation i minnet av alla schemaändringar för alla appar och använder detta för att generera SQL som gör schemaändringarna.</p>\n<p>Den minnesstrukturen används också för att ta reda på vad skillnaderna är mellan dina modeller och det aktuella läget för dina migreringar; Django kör igenom alla ändringar, i ordning, på en minnesuppsättning av modeller för att komma fram till läget för dina modeller förra gången du körde <code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code>. Den använder sedan dessa modeller för att jämföra med dem i dina <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code>-filer för att räkna ut vad du har ändrat.</p>\n<p>Du behöver sällan eller aldrig redigera migreringsfiler för hand, men det är fullt möjligt att skriva dem manuellt om du behöver. Vissa av de mer komplexa operationerna kan inte autodetekteras och är endast tillgängliga via en handskriven migrering, så var inte rädd för att redigera dem om du måste.</p>\n<section id=\"custom-fields\">\n<h3>Anpassade fält<a class=\"heading-anchor\" href=\"#custom-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan inte ändra antalet positionella argument i ett redan migrerat anpassat fält utan att det uppstår ett <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code>. Den gamla migreringen kommer att anropa den modifierade metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> med den gamla signaturen. Så om du behöver ett nytt argument, skapa ett nyckelordsargument och lägg till något i stil med <code class=\"docutils literal notranslate\"><span class=\"pre\">assert</span> <span class=\"pre\">'argument_name'</span> <span class=\"pre\">in</span> <span class=\"pre\">kwargs</span></code> i konstruktören.</p>\n</section>\n<section id=\"model-managers\">\n<span id=\"using-managers-in-migrations\"></span><h3>Modell chefer<a class=\"heading-anchor\" href=\"#model-managers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan valfritt serialisera chefer till migreringar och ha dem tillgängliga i <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a>-operationer. Detta görs genom att definiera ett <code class=\"docutils literal notranslate\"><span class=\"pre\">use_in_migrations</span></code>-attribut på managerklassen:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"n\">use_in_migrations</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">MyManager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Om du använder funktionen <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.from_queryset\" title=\"django.db.models.from_queryset\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">from_queryset()</span></code></a> för att dynamiskt generera en managerklass måste du ärva från den genererade klassen för att göra den importerbar:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyManager</span><span class=\"p\">(</span><span class=\"n\">MyBaseManager</span><span class=\"o\">.</span><span class=\"n\">from_queryset</span><span class=\"p\">(</span><span class=\"n\">CustomQuerySet</span><span class=\"p\">)):</span>\n    <span class=\"n\">use_in_migrations</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">MyManager</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Se anteckningarna om <a class=\"reference internal\" href=\"#historical-models\"><span class=\"std std-ref\">Historiska modeller</span></a> i migreringar för att se vilka konsekvenser som följer med.</p>\n</section>\n<section id=\"initial-migrations\">\n<h3>Inledande migreringar<a class=\"heading-anchor\" href=\"#initial-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.Migration.initial\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Migration.</span></span><span class=\"sig-name descname\"><span class=\"pre\">initial</span></span><a class=\"heading-anchor\" href=\"#django.db.migrations.Migration.initial\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>De ”initiala migreringarna” för en app är de migreringar som skapar den första versionen av appens tabeller. Vanligtvis har en app en första migrering, men i vissa fall med komplexa modellberoenden kan den ha två eller fler.</p>\n<p>Initiala migreringar markeras med ett klassattribut <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> på migreringsklassen. Om klassattributet <code class=\"docutils literal notranslate\"><span class=\"pre\">initial</span></code> inte hittas betraktas en migrering som ”initial” om den är den första migreringen i appen (dvs. om den inte har några beroenden till någon annan migrering i samma app).</p>\n<p>När alternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-migrate-fake-initial\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">migrate</span> <span class=\"pre\">--fake-initial</span></code></a> används, behandlas dessa initiala migreringar speciellt. För en initial migrering som skapar en eller flera tabeller (<code class=\"docutils literal notranslate\"><span class=\"pre\">CreateModel</span></code> operation), kontrollerar Django att alla dessa tabeller redan finns i databasen och tillämpar migreringen om så är fallet. På samma sätt, för en initial migrering som lägger till ett eller flera fält (<code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> operation), kontrollerar Django att alla respektive kolumner redan finns i databasen och fejkapplicerar migreringen om så är fallet. Utan <code class=\"docutils literal notranslate\"><span class=\"pre\">--fake-initial</span></code> behandlas initiala migreringar inte annorlunda än någon annan migrering.</p>\n</section>\n<section id=\"history-consistency\">\n<span id=\"migration-history-consistency\"></span><h3>Historisk konsekvens<a class=\"heading-anchor\" href=\"#history-consistency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som tidigare nämnts kan du behöva linjärisera migreringar manuellt när två utvecklingsgrenar sammanfogas. När du redigerar migreringsberoenden kan du oavsiktligt skapa ett inkonsekvent historiktillstånd där en migrering har tillämpats men vissa av dess beroenden inte har gjort det. Detta är en stark indikation på att beroendena är felaktiga, så Django kommer att vägra att köra migreringar eller göra nya migreringar tills det är åtgärdat. När du använder flera databaser kan du använda metoden <a class=\"reference internal\" href=\"/sv/6.1/topics/db/multi-db/#allow_migrate\" title=\"allow_migrate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">allow_migrate()</span></code></a> i <a class=\"reference internal\" href=\"/sv/6.1/topics/db/multi-db/#topics-db-multi-db-routing\"><span class=\"std std-ref\">database routers</span></a> för att kontrollera vilka databaser som <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> kontrollerar för konsekvent historik.</p>\n</section>\n</section>\n<section id=\"adding-migrations-to-apps\">\n<h2>Lägga till migreringar i appar<a class=\"heading-anchor\" href=\"#adding-migrations-to-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nya appar är förkonfigurerade för att acceptera migreringar, så du kan lägga till migreringar genom att köra <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> när du har gjort några ändringar.</p>\n<p>Om din app redan har modeller och databastabeller och inte har migreringar ännu (till exempel om du skapade den mot en tidigare Django-version) måste du konvertera den till att använda migreringar genom att köra:</p>\n<div class=\"code-block\" data-language=\"shell\"><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=\"w\"> </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>makemigrations<span class=\"w\"> </span>your_app_label\n</code></pre></div>\n<p>Detta kommer att skapa en ny initial migrering för din app. Kör nu <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span> <span class=\"pre\">--fake-initial</span></code>, och Django kommer att upptäcka att du har en initial migrering <em>och</em> att de tabeller som den vill skapa redan finns, och kommer att markera migreringen som redan tillämpad. (Utan <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-migrate-fake-initial\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">migrate</span> <span class=\"pre\">--fake-initial</span></code></a> flaggan skulle kommandot misslyckas eftersom tabellerna som den vill skapa redan existerar)</p>\n<p>Observera att detta bara fungerar under förutsättning att två saker inträffar:</p>\n<ul class=\"simple\">\n<li><p>Du har inte ändrat dina modeller sedan du skapade deras tabeller. För att migreringar ska fungera måste du göra den första migreringen <em>först</em> och sedan göra ändringar, eftersom Django jämför ändringar mot migreringsfiler, inte databasen.</p></li>\n<li><p>Du har inte redigerat din databas manuellt - Django kommer inte att kunna upptäcka att din databas inte matchar dina modeller, du kommer bara att få fel när migreringar försöker ändra dessa tabeller.</p></li>\n</ul>\n</section>\n<section id=\"reversing-migrations\">\n<span id=\"id2\"></span><h2>Återvändande av migration<a class=\"heading-anchor\" href=\"#reversing-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Migreringar kan återställas med <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> genom att ange numret på den föregående migreringen. Till exempel, för att vända migreringen <code class=\"docutils literal notranslate\"><span class=\"pre\">books.0003</span></code>:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>migrate<span class=\"w\"> </span>books<span class=\"w\"> </span><span class=\"m\">0002</span>\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Target specific migration: 0002_auto, from books</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Unapplying books.0003_auto... OK</span>\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> py manage.py migrate books 0002\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Target specific migration: 0002_auto, from books</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Unapplying books.0003_auto... OK</span>\n</code></pre></div></div></div>\n<p>Använd namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">zero</span></code> om du vill återkalla alla migreringar som gjorts för en app:</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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>migrate<span class=\"w\"> </span>books<span class=\"w\"> </span>zero\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Unapply all migrations: books</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Unapplying books.0002_auto... OK</span>\n<span class=\"go\">  Unapplying books.0001_initial... OK</span>\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 manage.py migrate books zero\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Unapply all migrations: books</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Unapplying books.0002_auto... OK</span>\n<span class=\"go\">  Unapplying books.0001_initial... OK</span>\n</code></pre></div></div></div>\n<p>En migrering är irreversibel om den innehåller några irreversibla åtgärder. Försök att vända sådana migreringar kommer att ge upphov till <code class=\"docutils literal notranslate\"><span class=\"pre\">IrreversibleError</span></code>:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>migrate<span class=\"w\"> </span>books<span class=\"w\"> </span><span class=\"m\">0002</span>\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Target specific migration: 0002_auto, from books</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Unapplying books.0003_auto...Traceback (most recent call last):</span>\n<span class=\"go\">django.db.migrations.exceptions.IrreversibleError: Operation &lt;RunSQL  sql=&#39;DROP TABLE demo_books&#39;&gt; in books.0003_auto is not reversible</span>\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 manage.py migrate books 0002\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Target specific migration: 0002_auto, from books</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  Rendering model states... DONE</span>\n<span class=\"go\">  Unapplying books.0003_auto...Traceback (most recent call last):</span>\n<span class=\"gp\">django.db.migrations.exceptions.IrreversibleError: Operation &lt;RunSQL  sql=&#39;DROP TABLE demo_books&#39;&gt;</span> in books.0003_auto is not reversible\n</code></pre></div></div></div>\n</section>\n<section id=\"historical-models\">\n<span id=\"id3\"></span><h2>Historiska modeller<a class=\"heading-anchor\" href=\"#historical-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du kör migreringar arbetar Django från historiska versioner av dina modeller som lagras i migreringsfilerna. Om du skriver Python-kod med hjälp av <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a>, eller om du har <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_migrate</span></code>-metoder på dina databasroutrar, måste du <strong>använda</strong> dessa historiska modellversioner istället för att importera dem direkt.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Om du importerar modeller direkt i stället för att använda de historiska modellerna kan dina migreringar <em>fungera initialt</em>, men de kommer att misslyckas i framtiden när du försöker köra gamla migreringar igen (vanligtvis när du skapar en ny installation och kör igenom alla migreringar för att skapa databasen).</p>\n<p>Detta innebär att problem med historiska modeller kanske inte är omedelbart uppenbara. Om du stöter på den här typen av fel är det OK att redigera migreringen så att den använder de historiska modellerna i stället för direktimport och genomföra dessa ändringar.</p>\n</aside>\n<p>Eftersom det är omöjligt att serialisera godtycklig Python-kod kommer dessa historiska modeller inte att ha några anpassade metoder som du har definierat. De kommer dock att ha samma fält, relationer, chefer (begränsat till dem med <code class=\"docutils literal notranslate\"><span class=\"pre\">use_in_migrations</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code>) och <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>-alternativ (även versionerade, så de kan skilja sig från dina nuvarande).</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Detta innebär att du INTE kommer att ha anpassade <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code>-metoder som anropas på objekt när du kommer åt dem i migreringar, och du kommer INTE att ha några anpassade konstruktörer eller instansmetoder. Planera på lämpligt sätt!</p>\n</aside>\n<p>Hänvisningar till funktioner i fältalternativ som <code class=\"docutils literal notranslate\"><span class=\"pre\">upload_to</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">limit_choices_to</span></code> och modellhanterardeklarationer med hanterare som har <code class=\"docutils literal notranslate\"><span class=\"pre\">use_in_migrations</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> serialiseras i migreringar, så funktionerna och klasserna måste sparas så länge det finns en migrering som hänvisar till dem. Eventuella <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-model-fields/\"><span class=\"doc\">custom model fields</span></a> måste också sparas, eftersom dessa importeras direkt av migreringar.</p>\n<p>Dessutom lagras modellens konkreta basklasser som pekare, så du måste alltid ha kvar basklasserna så länge det finns en migration som innehåller en referens till dem. På plussidan är att metoder och managers från dessa basklasser ärvs normalt, så om man absolut behöver tillgång till dessa kan man välja att flytta dem till en superklass.</p>\n<p>För att ta bort gamla referenser kan du <a class=\"reference internal\" href=\"#migration-squashing\"><span class=\"std std-ref\">squash migrations</span></a> eller, om det inte finns så många referenser, kopiera dem till migreringsfilerna.</p>\n</section>\n<section id=\"considerations-when-removing-model-fields\">\n<span id=\"migrations-removing-model-fields\"></span><h2>Överväganden vid borttagning av modellfält<a class=\"heading-anchor\" href=\"#considerations-when-removing-model-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>På samma sätt som när det gäller ”referenser till historiska funktioner” i föregående avsnitt kan det uppstå problem om du tar bort anpassade modellfält från ditt projekt eller din tredjepartsapp om de refereras till i gamla migreringar.</p>\n<p>För att hjälpa till med den här situationen tillhandahåller Django några modellfältsattribut för att hjälpa till med borttagning av modellfält med hjälp av <a class=\"reference internal\" href=\"/sv/6.1/topics/checks/\"><span class=\"doc\">systemets ramverk för kontroller</span></a>.</p>\n<p>Lägg till attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">system_check_deprecated_details</span></code> till ditt modellfält på följande sätt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">IPAddressField</span><span class=\"p\">(</span><span class=\"n\">Field</span><span class=\"p\">):</span>\n    <span class=\"n\">system_check_deprecated_details</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;msg&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span>\n            <span class=\"s2\">&quot;IPAddressField has been deprecated. Support for it (except &quot;</span>\n            <span class=\"s2\">&quot;in historical migrations) will be removed in Django 1.9.&quot;</span>\n        <span class=\"p\">),</span>\n        <span class=\"s2\">&quot;hint&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Use GenericIPAddressField instead.&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># optional</span>\n        <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fields.W900&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># pick a unique ID for your field.</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>Efter en utfasningsperiod som du väljer (två eller tre funktionsutgåvor för fält i Django själv), ändra attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">system_check_deprecated_details</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">system_check_removed_details</span></code> och uppdatera ordlistan på liknande sätt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">IPAddressField</span><span class=\"p\">(</span><span class=\"n\">Field</span><span class=\"p\">):</span>\n    <span class=\"n\">system_check_removed_details</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;msg&quot;</span><span class=\"p\">:</span> <span class=\"p\">(</span>\n            <span class=\"s2\">&quot;IPAddressField has been removed except for support in &quot;</span>\n            <span class=\"s2\">&quot;historical migrations.&quot;</span>\n        <span class=\"p\">),</span>\n        <span class=\"s2\">&quot;hint&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Use GenericIPAddressField instead.&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fields.E900&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># pick a unique ID for your field.</span>\n    <span class=\"p\">}</span>\n</code></pre></div>\n<p>Du bör behålla fältets metoder som krävs för att det ska fungera i databasmigreringar, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">deconstruct()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">get_internal_type()</span></code>. Behåll detta stubbfält så länge som de migreringar som refererar till fältet existerar. Till exempel, efter att ha krossat migreringar och tagit bort de gamla, bör du kunna ta bort fältet helt och hållet.</p>\n</section>\n<section id=\"data-migrations\">\n<span id=\"id4\"></span><h2>Migrering av data<a class=\"heading-anchor\" href=\"#data-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Förutom att ändra databasschemat kan du också använda migreringar för att ändra data i själva databasen, i kombination med schemat om du vill.</p>\n<p>Migreringar som ändrar data kallas vanligtvis ”datamigreringar”; det är bäst att skriva dem som separata migreringar vid sidan av dina schemamigreringar.</p>\n<p>Django kan inte automatiskt generera datamigreringar åt dig, som det gör med schemamigreringar, men det är inte särskilt svårt att skriva dem. Migreringsfiler i Django består av <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/\"><span class=\"doc\">Operations</span></a>, och den huvudsakliga operationen du använder för datamigreringar är <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a>.</p>\n<p>Börja med att skapa en tom migreringsfil som du kan arbeta utifrån (Django placerar filen på rätt plats, föreslår ett namn och lägger till beroenden åt dig):</p>\n<div class=\"code-block\" data-language=\"shell\"><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>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>makemigrations<span class=\"w\"> </span>--empty<span class=\"w\"> </span>yourappname\n</code></pre></div>\n<p>Öppna sedan filen; den ska se ut ungefär 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=\"c1\"># Generated by Django A.B on YYYY-MM-DD HH:MM</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">migrations</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;yourappname&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n</code></pre></div>\n<p>Now, all you need to do is create a new function and have\n<a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> use it.\n<a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> expects a callable as its\nargument which takes two arguments - the first is an <a class=\"reference internal\" href=\"/sv/6.1/ref/applications/\"><span class=\"doc\">app registry</span></a> that has the historical versions of all your models\nloaded into it to match where in your history the migration sits, and the\nsecond is a <a class=\"reference internal\" href=\"/sv/6.1/ref/schema-editor/\"><span class=\"doc\">SchemaEditor</span></a>, which you can use to\nmanually effect database schema changes (but beware, doing this can confuse\nthe migration autodetector).</p>\n<p>Låt oss skriva en migrering som fyller vårt nya fält <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> med de kombinerade värdena för <code class=\"docutils literal notranslate\"><span class=\"pre\">first_name</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">last_name</span></code> (vi har tagit vårt förnuft till fånga och insett att alla inte har för- och efternamn). Allt vi behöver göra är att använda den historiska modellen och iterera över raderna:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">migrations</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">combine_names</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"c1\"># We can&#39;t import the Person model directly as it may be a newer</span>\n    <span class=\"c1\"># version than this migration expects. We use the historical version.</span>\n    <span class=\"n\">Person</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s2\">&quot;yourappname&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Person&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">person</span> <span class=\"ow\">in</span> <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n        <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"si\">}</span><span class=\"s2\"> </span><span class=\"si\">{</span><span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n        <span class=\"n\">person</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;yourappname&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">combine_names</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>När det är gjort kan vi köra <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code> som vanligt och datamigreringen kommer att köras på plats tillsammans med andra migreringar.</p>\n<p>Du kan skicka en andra callable till <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> för att köra den logik du vill ska köras när du migrerar bakåt. Om denna callable utelämnas kommer migreringen bakåt att ge upphov till ett undantag.</p>\n<section id=\"accessing-models-from-other-apps\">\n<h3>Åtkomst till modeller från andra appar<a class=\"heading-anchor\" href=\"#accessing-models-from-other-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du skriver en <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>-funktion som använder modeller från andra appar än den där migreringen finns, bör migreringens <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code>-attribut innehålla den senaste migreringen av varje app som är inblandad, annars kan du få ett fel som liknar: <code class=\"docutils literal notranslate\"><span class=\"pre\">LookupError:</span> <span class=\"pre\">No</span> <span class=\"pre\">installed</span> <span class=\"pre\">app</span> <span class=\"pre\">with</span> <span class=\"pre\">label</span> <span class=\"pre\">'myappname'</span></code> när du försöker hämta modellen i <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>-funktionen med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.get_model()</span></code>.</p>\n<p>I följande exempel har vi en migrering i <code class=\"docutils literal notranslate\"><span class=\"pre\">app1</span></code> som behöver använda modeller i <code class=\"docutils literal notranslate\"><span class=\"pre\">app2</span></code>. Vi bryr oss inte om detaljerna i <code class=\"docutils literal notranslate\"><span class=\"pre\">move_m1</span></code> annat än att den kommer att behöva komma åt modeller från båda apparna. Därför har vi lagt till ett beroende som anger den senaste migreringen av <code class=\"docutils literal notranslate\"><span class=\"pre\">app2</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;app1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">),</span>\n        <span class=\"c1\"># added dependency to enable using models from app2 in move_m1</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;app2&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0004_foobar&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">move_m1</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"more-advanced-migrations\">\n<h3>Mer avancerade migreringar<a class=\"heading-anchor\" href=\"#more-advanced-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du är intresserad av de mer avancerade migreringsoperationerna eller vill kunna skriva dina egna, se <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/\"><span class=\"doc\">migration operations reference</span></a> och ”how-to” på <a class=\"reference internal\" href=\"/sv/6.1/howto/writing-migrations/\"><span class=\"doc\">writing migrations</span></a>.</p>\n</section>\n</section>\n<section id=\"squashing-migrations\">\n<span id=\"migration-squashing\"></span><h2>Minska antalet migreringar<a class=\"heading-anchor\" href=\"#squashing-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Du uppmuntras att göra migreringar fritt och inte oroa dig för hur många du har; migreringskoden är optimerad för att hantera hundratals åt gången utan större nedgång. Men så småningom kommer du att vilja gå tillbaka från att ha flera hundra migreringar till bara några få, och det är där squashing kommer in i bilden.</p>\n<p>Squashing innebär att man reducerar en befintlig uppsättning med många migreringar till en (eller ibland ett fåtal) migreringar som fortfarande representerar samma ändringar.</p>\n<p>Django gör detta genom att ta alla dina befintliga migreringar, extrahera deras <code class=\"docutils literal notranslate\"><span class=\"pre\">Operation</span></code> och sätta dem alla i ordning, och sedan köra en optimerare över dem för att försöka minska längden på listan - till exempel vet den att <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.CreateModel\" title=\"django.db.migrations.operations.CreateModel\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CreateModel</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.DeleteModel\" title=\"django.db.migrations.operations.DeleteModel\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DeleteModel</span></code></a> upphäver varandra, och den vet att <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.AddField\" title=\"django.db.migrations.operations.AddField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AddField</span></code></a> kan rullas in i <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.CreateModel\" title=\"django.db.migrations.operations.CreateModel\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CreateModel</span></code></a>.</p>\n<p>När operationssekvensen har reducerats så mycket som möjligt - hur mycket som är möjligt beror på hur nära sammanflätade dina modeller är och om du har några <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a> operationer (som inte kan optimeras om de inte är markerade som <code class=\"docutils literal notranslate\"><span class=\"pre\">elidable</span></code>) - kommer Django sedan att skriva ut det igen i en ny uppsättning migreringsfiler.</p>\n<p>These files are marked to say they replace the previously-squashed migrations,\nso they can coexist with the old migration files, and Django will intelligently\nswitch between them depending on where you are in the history. If you’re still\npart-way through the set of migrations that you squashed, it will keep using\nthem until it hits the end and then switch to the squashed history, while new\ninstalls will use the new squashed migration and skip all the old ones.</p>\n<p>Detta gör att du kan göra en squash och inte förstöra system som för närvarande är i produktion och som inte är helt uppdaterade ännu. Den rekommenderade processen är att krossa, behålla de gamla filerna, commita och släppa, vänta tills alla system är uppgraderade med den nya versionen (eller om du är ett tredjepartsprojekt, se till att dina användare uppgraderar versioner i ordning utan att hoppa över någon), och sedan ta bort de gamla filerna, commita och göra en andra version.</p>\n<p>Kommandot som ligger bakom allt detta är <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-squashmigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">squashmigrations</span></code></a> - skicka appens etikett och migreringsnamnet som du vill squasha upp till, så börjar det arbeta:</p>\n<div class=\"code-block\" data-language=\"shell\"><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=\"w\"> </span>./manage.py<span class=\"w\"> </span>squashmigrations<span class=\"w\"> </span>myapp<span class=\"w\"> </span><span class=\"m\">0004</span>\nWill<span class=\"w\"> </span>squash<span class=\"w\"> </span>the<span class=\"w\"> </span>following<span class=\"w\"> </span>migrations:\n<span class=\"w\"> </span>-<span class=\"w\"> </span>0001_initial\n<span class=\"w\"> </span>-<span class=\"w\"> </span>0002_some_change\n<span class=\"w\"> </span>-<span class=\"w\"> </span>0003_another_change\n<span class=\"w\"> </span>-<span class=\"w\"> </span>0004_undo_something\nDo<span class=\"w\"> </span>you<span class=\"w\"> </span>wish<span class=\"w\"> </span>to<span class=\"w\"> </span>proceed?<span class=\"w\"> </span><span class=\"o\">[</span>y/N<span class=\"o\">]</span><span class=\"w\"> </span>y\nOptimizing...\n<span class=\"w\">  </span>Optimized<span class=\"w\"> </span>from<span class=\"w\"> </span><span class=\"m\">12</span><span class=\"w\"> </span>operations<span class=\"w\"> </span>to<span class=\"w\"> </span><span class=\"m\">7</span><span class=\"w\"> </span>operations.\nCreated<span class=\"w\"> </span>new<span class=\"w\"> </span>squashed<span class=\"w\"> </span>migration<span class=\"w\"> </span>/home/andrew/Programs/DjangoTest/test/migrations/0001_squashed_0004_undo_something.py\n<span class=\"w\">  </span>You<span class=\"w\"> </span>should<span class=\"w\"> </span>commit<span class=\"w\"> </span>this<span class=\"w\"> </span>migration<span class=\"w\"> </span>but<span class=\"w\"> </span>leave<span class=\"w\"> </span>the<span class=\"w\"> </span>old<span class=\"w\"> </span>ones<span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span>place<span class=\"p\">;</span>\n<span class=\"w\">  </span>the<span class=\"w\"> </span>new<span class=\"w\"> </span>migration<span class=\"w\"> </span>will<span class=\"w\"> </span>be<span class=\"w\"> </span>used<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span>new<span class=\"w\"> </span>installs.<span class=\"w\"> </span>Once<span class=\"w\"> </span>you<span class=\"w\"> </span>are<span class=\"w\"> </span>sure\n<span class=\"w\">  </span>all<span class=\"w\"> </span>instances<span class=\"w\"> </span>of<span class=\"w\"> </span>the<span class=\"w\"> </span>codebase<span class=\"w\"> </span>have<span class=\"w\"> </span>applied<span class=\"w\"> </span>the<span class=\"w\"> </span>migrations<span class=\"w\"> </span>you<span class=\"w\"> </span>squashed,\n<span class=\"w\">  </span>you<span class=\"w\"> </span>can<span class=\"w\"> </span>delete<span class=\"w\"> </span>them.\n</code></pre></div>\n<p>Använd alternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-squashmigrations-squashed-name\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">squashmigrations</span> <span class=\"pre\">--squashed-name</span></code></a> om du vill ange namnet på den krossade migreringen i stället för att använda ett autogenererat namn.</p>\n<p>Observera att modellberoenden i Django kan bli mycket komplexa, och squashing kan resultera i migreringar som inte körs; antingen feloptimerade (i vilket fall du kan försöka igen med <code class=\"docutils literal notranslate\"><span class=\"pre\">--no-optimize</span></code>, men du bör också rapportera ett problem), eller med ett <code class=\"docutils literal notranslate\"><span class=\"pre\">CircularDependencyError</span></code>, i vilket fall du kan lösa det manuellt.</p>\n<p>För att manuellt lösa ett <code class=\"docutils literal notranslate\"><span class=\"pre\">CircularDependencyError</span></code>, bryt ut en av ForeignKeys i den cirkulära beroendeslingan till en separat migrering och flytta beroendet av den andra appen med den. Om du är osäker kan du se hur <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> hanterar problemet när den ombeds skapa helt nya migreringar från dina modeller. I en framtida version av Django kommer <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-squashmigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">squashmigrations</span></code></a> att uppdateras för att försöka lösa dessa fel själv.</p>\n<p>När du har krossat din migrering bör du sedan överföra den tillsammans med de migreringar som den ersätter och distribuera denna ändring till alla körande instanser av din applikation och se till att de kör <code class=\"docutils literal notranslate\"><span class=\"pre\">migrate</span></code> för att lagra ändringen i sin databas.</p>\n<p>You can then transition the squashed migration to a normal migration by:</p>\n<ul class=\"simple\">\n<li><p>Raderar alla migreringsfiler som den ersätter.</p></li>\n<li><p>Uppdaterar alla migreringar som är beroende av de borttagna migreringarna så att de istället är beroende av den krossade migreringen.</p></li>\n<li><p>Ta bort attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">replaces</span></code> i klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Migration</span></code> för den krossade migreringen (det är så Django berättar att det är en krossad migrering).</p></li>\n</ul>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>You can squash squashed migrations themselves without transitioning to\nnormal migrations, which might be useful for situations where every\nenvironment has not yet run the original squashed migration set. But in\ngeneral it is better to transition squashed migrations to normal migrations\nto be able to clean up older migration files.</p>\n</aside>\n<aside class=\"admonition-pruning-references-to-deleted-migrations admonition\">\n<p class=\"admonition-title\">Rensning av referenser till raderade migreringar</p>\n<p>Om det är troligt att du kommer att återanvända namnet på en borttagen migrering i framtiden bör du ta bort referenser till den från Djangos migreringstabell med alternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-migrate-prune\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">migrate</span> <span class=\"pre\">--prune</span></code></a>.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>Support for squashing squashed migrations was added.</p>\n</aside>\n</section>\n<section id=\"serializing-values\">\n<span id=\"migration-serializing\"></span><h2>Serialisering av värden<a class=\"heading-anchor\" href=\"#serializing-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Migrationer är Python-filer som innehåller de gamla definitionerna av dina modeller - för att skriva dem måste Django alltså ta det aktuella tillståndet för dina modeller och serialisera dem till en fil.</p>\n<p>Django kan serialisera det mesta, men det finns vissa saker som vi helt enkelt inte kan serialisera ut till en giltig Python-representation - det finns ingen Python-standard för hur ett värde kan omvandlas tillbaka till kod (<code class=\"docutils literal notranslate\"><span class=\"pre\">repr()</span></code> fungerar bara för grundläggande värden och anger inte importvägar).</p>\n<p>Django kan serialisera följande:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">bool</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">bytes</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">NoneType</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code></p></li>\n<li><p>instanser av <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.date</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.time</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code> (inklusive de som är tidszonmedvetna)</p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#zoneinfo.ZoneInfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">zoneinfo.ZoneInfo</span></code></a> instances</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">decimal.Decimal</span></code> instanser</p></li>\n<li><p>instanser av <code class=\"docutils literal notranslate\"><span class=\"pre\">enum.Enum</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">enum.Flag</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">uuid.UUID</span></code> instanser</p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/3/library/functools.html#functools.partial\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">functools.partial()</span></code></a> and <a class=\"reference external\" href=\"https://docs.python.org/3/library/functools.html#functools.partialmethod\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">functools.partialmethod</span></code></a> instances\nwhich have serializable <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">keywords</span></code> values</p></li>\n<li><p>Pure and concrete path objects from <a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#module-pathlib\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">pathlib</span></code></a>. Concrete paths are\nconverted to their pure path equivalent, e.g. <a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#pathlib.PosixPath\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">pathlib.PosixPath</span></code></a> to\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#pathlib.PurePosixPath\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">pathlib.PurePosixPath</span></code></a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/3/library/os.html#os.PathLike\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">os.PathLike</span></code></a> instances, e.g. <a class=\"reference external\" href=\"https://docs.python.org/3/library/os.html#os.DirEntry\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">os.DirEntry</span></code></a>, which are\nconverted to <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">bytes</span></code> using <a class=\"reference external\" href=\"https://docs.python.org/3/library/os.html#os.fspath\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">os.fspath()</span></code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">LazyObject</span></code> instances which wrap a serializable value</p></li>\n<li><p>Enumeration types (e.g. <code class=\"docutils literal notranslate\"><span class=\"pre\">TextChoices</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerChoices</span></code>) instances</p></li>\n<li><p>Alla Django-fält</p></li>\n<li><p>Alla funktions- eller metodreferenser (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime.datetime.today</span></code>) (måste finnas i modulens toppnivå)</p>\n<ul>\n<li><p>Funktioner kan dekoreras om de förpackas på rätt sätt, dvs. med <a class=\"reference external\" href=\"https://docs.python.org/3/library/functools.html#functools.wraps\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">functools.wraps()</span></code></a></p></li>\n<li><p>Dekoratorerna <a class=\"reference external\" href=\"https://docs.python.org/3/library/functools.html#functools.cache\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">functools.cache()</span></code></a> och <a class=\"reference external\" href=\"https://docs.python.org/3/library/functools.html#functools.lru_cache\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">functools.lru_cache()</span></code></a> stöds uttryckligen</p></li>\n</ul>\n</li>\n<li><p>Obundna metoder som används inom klassens kropp</p></li>\n<li><p>Vilken klassreferens som helst (måste finnas i modulens toppnivåscope)</p></li>\n<li><p>Allt med en anpassad <code class=\"docutils literal notranslate\"><span class=\"pre\">deconstruct()</span></code>-metod (<a class=\"reference internal\" href=\"#custom-deconstruct-method\"><span class=\"std std-ref\">se nedan</span></a>)</p></li>\n</ul>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>Serialization support for <a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#zoneinfo.ZoneInfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">zoneinfo.ZoneInfo</span></code></a> instances was added.</p>\n</aside>\n<p>Django kan inte serialisera:</p>\n<ul class=\"simple\">\n<li><p>Nästlade klasser</p></li>\n<li><p>Godtyckliga klassinstanser (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">MyClass(4.3,</span> <span class=\"pre\">5.7)</span></code>)</p></li>\n<li><p>Lambdas</p></li>\n</ul>\n<section id=\"custom-serializers\">\n<span id=\"custom-migration-serializers\"></span><h3>Anpassade serialiserare<a class=\"heading-anchor\" href=\"#custom-serializers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan serialisera andra typer genom att skriva en anpassad serializer. Till exempel, om Django inte serialiserade <a class=\"reference external\" href=\"https://docs.python.org/3/library/decimal.html#decimal.Decimal\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Decimal</span></code></a> som standard, skulle du kunna göra 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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">decimal</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Decimal</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.migrations.serializer</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseSerializer</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.migrations.writer</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MigrationWriter</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">DecimalSerializer</span><span class=\"p\">(</span><span class=\"n\">BaseSerializer</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">serialize</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">repr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">),</span> <span class=\"p\">{</span><span class=\"s2\">&quot;from decimal import Decimal&quot;</span><span class=\"p\">}</span>\n\n\n<span class=\"n\">MigrationWriter</span><span class=\"o\">.</span><span class=\"n\">register_serializer</span><span class=\"p\">(</span><span class=\"n\">Decimal</span><span class=\"p\">,</span> <span class=\"n\">DecimalSerializer</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Det första argumentet i <code class=\"docutils literal notranslate\"><span class=\"pre\">MigrationWriter.register_serializer()</span></code> är en typ eller en iterabel av typer som ska använda serializer.</p>\n<p>Metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">serialize()</span></code> i din serializer måste returnera en sträng som visar hur värdet ska visas i migreringar och en uppsättning av alla importer som behövs i migreringen.</p>\n</section>\n<section id=\"adding-a-deconstruct-method\">\n<span id=\"custom-deconstruct-method\"></span><h3>Lägga till en <code class=\"docutils literal notranslate\"><span class=\"pre\">deconstruct()</span></code>-metod<a class=\"heading-anchor\" href=\"#adding-a-deconstruct-method\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan låta Django serialisera dina egna anpassade klassinstanser genom att ge klassen en <code class=\"docutils literal notranslate\"><span class=\"pre\">deconstruct()</span></code>-metod. Den tar inga argument och bör returnera en tupel av tre saker <code class=\"docutils literal notranslate\"><span class=\"pre\">(path,</span> <span class=\"pre\">args,</span> <span class=\"pre\">kwargs)</span></code>:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> bör vara Python-sökvägen till klassen, med klassnamnet inkluderat som sista del (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp.custom_things.MyClass</span></code>). Om din klass inte är tillgänglig på den översta nivån i en modul är den inte serialiserbar.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">args</span></code> ska vara en lista med positionella argument som ska skickas till din klass <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> metod. Allt i denna lista bör i sig vara serialiserbart.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> bör vara en dikt av nyckelordsargument att skicka till din klass <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> metod. Varje värde bör i sig vara serialiserbart.</p></li>\n</ul>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Detta returvärde skiljer sig från metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">deconstruct()</span></code> <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-model-fields/#custom-field-deconstruct-method\"><span class=\"std std-ref\">for custom fields</span></a> som returnerar en tupel med fyra objekt.</p>\n</aside>\n<p>Django kommer att skriva ut värdet som en instansiering av din klass med de angivna argumenten, på samma sätt som det skriver ut referenser till Django-fält.</p>\n<p>För att förhindra att en ny migrering skapas varje gång <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> körs, bör du också lägga till en <code class=\"docutils literal notranslate\"><span class=\"pre\">__eq__()</span></code>-metod till den dekorerade klassen. Denna funktion kommer att anropas av Djangos migreringsramverk för att upptäcka förändringar mellan tillstånd.</p>\n<p>Så länge som alla argument till din klass konstruktör är själva serialiserbara, kan du använda <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;deconstructible</span></code> klassdekoratorn från <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.deconstruct</span></code> för att lägga till <code class=\"docutils literal notranslate\"><span class=\"pre\">deconstruct()</span></code> metoden:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.deconstruct</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">deconstructible</span>\n\n\n<span class=\"nd\">@deconstructible</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyCustomClass</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">foo</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">foo</span> <span class=\"o\">=</span> <span class=\"n\">foo</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__eq__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">foo</span> <span class=\"o\">==</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">foo</span>\n</code></pre></div>\n<p>Dekoratorn lägger till logik för att fånga upp och bevara argumenten på väg in i din konstruktor och returnerar sedan dessa argument exakt när deconstruct() anropas.</p>\n</section>\n</section>\n<section id=\"supporting-multiple-django-versions\">\n<h2>Stöd för flera Django-versioner<a class=\"heading-anchor\" href=\"#supporting-multiple-django-versions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du är underhållare av en tredjepartsapp med modeller kan du behöva skicka migreringar som stöder flera Django-versioner. I så fall bör du alltid köra <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> <strong>med den lägsta Django-versionen som du vill stödja</strong>.</p>\n<p>Migreringssystemet kommer att upprätthålla bakåtkompatibilitet enligt samma policy som resten av Django, så migreringsfiler som genererats på Django X.Y bör köras oförändrade på Django X.Y+1. Migreringssystemet lovar dock inte framåtkompatibilitet. Nya funktioner kan läggas till, och migreringsfiler som genereras med nyare versioner av Django kanske inte fungerar på äldre versioner.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/migration-operations/\"><span class=\"doc\">Referensen för migreringsoperationer</span></a></dt><dd><p>Omfattar API:et för schemaoperationer, specialoperationer och att skriva egna operationer.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/howto/writing-migrations/\"><span class=\"doc\">”Hur man skriver migreringar”</span></a></dt><dd><p>Förklarar hur man strukturerar och skriver databasmigreringar för olika scenarier som man kan stöta på.</p>\n</dd>\n</dl>\n</aside>\n</section>","rootId":"module-django.db.migrations","toc":[{"title":"Kommandon","anchor":"the-commands","children":[]},{"title":"Support för backend","anchor":"backend-support","children":[{"title":"PostgreSQL","anchor":"postgresql","children":[]},{"title":"MySQL","anchor":"mysql","children":[]},{"title":"SQLite","anchor":"sqlite","children":[]}]},{"title":"Arbetsflöde","anchor":"workflow","children":[{"title":"Versionskontroll","anchor":"version-control","children":[]}]},{"title":"Transaktioner","anchor":"transactions","children":[]},{"title":"Beroenden","anchor":"dependencies","children":[{"title":"Utbytbara beroenden","anchor":"swappable-dependencies","children":[]}]},{"title":"Migreringsfiler","anchor":"migration-files","children":[{"title":"Anpassade fält","anchor":"custom-fields","children":[]},{"title":"Modell chefer","anchor":"model-managers","children":[]},{"title":"Inledande migreringar","anchor":"initial-migrations","children":[]},{"title":"Historisk konsekvens","anchor":"history-consistency","children":[]}]},{"title":"Lägga till migreringar i appar","anchor":"adding-migrations-to-apps","children":[]},{"title":"Återvändande av migration","anchor":"reversing-migrations","children":[]},{"title":"Historiska modeller","anchor":"historical-models","children":[]},{"title":"Överväganden vid borttagning av modellfält","anchor":"considerations-when-removing-model-fields","children":[]},{"title":"Migrering av data","anchor":"data-migrations","children":[{"title":"Åtkomst till modeller från andra appar","anchor":"accessing-models-from-other-apps","children":[]},{"title":"Mer avancerade migreringar","anchor":"more-advanced-migrations","children":[]}]},{"title":"Minska antalet migreringar","anchor":"squashing-migrations","children":[]},{"title":"Serialisering av värden","anchor":"serializing-values","children":[{"title":"Anpassade serialiserare","anchor":"custom-serializers","children":[]},{"title":"Lägga till en deconstruct()-metod","anchor":"adding-a-deconstruct-method","children":[]}]},{"title":"Stöd för flera Django-versioner","anchor":"supporting-multiple-django-versions","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"}],"prev":{"docname":"topics/class-based-views/mixins","title":"Använda mixins med klassbaserade vyer","url":"/sv/6.1/topics/class-based-views/mixins/"},"next":{"docname":"topics/files","title":"Hantera filer","url":"/sv/6.1/topics/files/"},"formats":{"html":"/sv/6.1/topics/migrations/","markdown":"/sv/6.1/topics/migrations.md","json":"/sv/6.1/topics/migrations.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/migrations.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/migrations/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}