{"title":"Så här skapar du databasmigreringar","version":"5.2","locale":"sv","docname":"howto/writing-migrations","url":"/sv/5.2/howto/writing-migrations/","canonical":"https://djangodocs.dev/sv/5.2/howto/writing-migrations/","summary":"Detta dokument förklarar hur man strukturerar och skriver databasmigreringar för olika scenarier som du kan stöta på. För inledande material om migreringar, se the…","html":"<h1>Så här skapar du databasmigreringar<a class=\"heading-anchor\" href=\"#how-to-create-database-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument förklarar hur man strukturerar och skriver databasmigreringar för olika scenarier som du kan stöta på. För inledande material om migreringar, se <a class=\"reference internal\" href=\"/sv/5.2/topics/migrations/\"><span class=\"doc\">the topic guide</span></a>.</p>\n<section id=\"data-migrations-and-multiple-databases\">\n<span id=\"id1\"></span><h2>Datamigreringar och flera databaser<a class=\"heading-anchor\" href=\"#data-migrations-and-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du använder flera databaser kan du behöva ta reda på om du ska köra en migrering mot en viss databas eller inte. Du kanske till exempel vill köra en migrering <strong>endast</strong> på en viss databas.</p>\n<p>För att göra det kan du kontrollera databasanslutningens alias i en <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>-operation genom att titta på attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">schema_editor.connection.alias</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=\"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\">forwards</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=\"k\">if</span> <span class=\"n\">schema_editor</span><span class=\"o\">.</span><span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">alias</span> <span class=\"o\">!=</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span>\n    <span class=\"c1\"># Your migration code goes here</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=\"c1\"># Dependencies to other migrations</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\">forwards</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Du kan också ange tips som kommer att skickas till <a class=\"reference internal\" href=\"/sv/5.2/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>-metoden för databasroutrar som <code class=\"docutils literal notranslate\"><span class=\"pre\">**hints</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/dbrouters.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyRouter</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">db</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">hints</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;target_db&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">hints</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">db</span> <span class=\"o\">==</span> <span class=\"n\">hints</span><span class=\"p\">[</span><span class=\"s2\">&quot;target_db&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n</code></pre></figure>\n<p>Gör sedan följande för att utnyttja detta i dina migreringar:</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\">forwards</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\"># Your migration code goes here</span>\n    <span class=\"o\">...</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=\"c1\"># Dependencies to other migrations</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\">forwards</span><span class=\"p\">,</span> <span class=\"n\">hints</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;target_db&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">}),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Om din <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code> operation bara påverkar en modell är det god praxis att skicka <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> som en ledtråd för att göra det så transparent som möjligt för routern. Detta är särskilt viktigt för återanvändbara appar och tredjepartsappar.</p>\n</section>\n<section id=\"migrations-that-add-unique-fields\">\n<h2>Migreringar som lägger till unika fält<a class=\"heading-anchor\" href=\"#migrations-that-add-unique-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du använder en ”vanlig” migrering som lägger till ett unikt icke-nullbart fält i en tabell med befintliga rader kommer det att uppstå ett fel eftersom det värde som används för att fylla i befintliga rader genereras endast en gång, vilket bryter den unika begränsningen.</p>\n<p>Därför bör följande steg vidtas. I det här exemplet lägger vi till ett icke-nullbart <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.UUIDField\" title=\"django.db.models.UUIDField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUIDField</span></code></a> med ett standardvärde. Modifiera respektive fält efter dina behov.</p>\n<ul>\n<li><p>Lägg till fältet i din modell med argumenten <code class=\"docutils literal notranslate\"><span class=\"pre\">default=uuid.uuid4</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code> (välj en lämplig standard för den typ av fält du lägger till).</p></li>\n<li><p>Kör kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a>. Detta bör generera en migrering med en <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> operation.</p></li>\n<li><p>Generera två tomma migreringsfiler för samma app genom att köra <code class=\"docutils literal notranslate\"><span class=\"pre\">makemigrations</span> <span class=\"pre\">myapp</span> <span class=\"pre\">--empty</span></code> två gånger. Vi har döpt om migreringsfilerna så att de får meningsfulla namn i exemplen nedan.</p></li>\n<li><p>Kopiera åtgärden <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> från den autogenererade migreringen (den första av de tre nya filerna) till den sista migreringen, ändra <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">AlterField</span></code> och lägg till import av <code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code>. Ett exempel:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">0006_remove_uuid_null.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"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><span class=\"p\">,</span> <span class=\"n\">models</span>\n<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0005_populate_uuid_values&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\">AlterField</span><span class=\"p\">(</span>\n            <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;mymodel&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UUIDField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n</li>\n<li><p>Redigera den första migreringsfilen. Den genererade migreringsklassen bör se ut ungefär så här:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">0004_add_uuid_field.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0003_auto_20150129_1705&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\">AddField</span><span class=\"p\">(</span>\n            <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;mymodel&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UUIDField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n<p>Ändra <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> - detta kommer att skapa det mellanliggande null-fältet och skjuta upp skapandet av den unika begränsningen tills vi har fyllt i unika värden på alla rader.</p>\n</li>\n<li><p>I den första tomma migreringsfilen lägger du till en <a class=\"reference internal\" href=\"/sv/5.2/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 <a class=\"reference internal\" href=\"/sv/5.2/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> operation för att generera ett unikt värde (UUID i exemplet) för varje befintlig rad. Lägg också till en import av <code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code>. För att ta ett exempel:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">0005_populate_uuid_values.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"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<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">gen_uuid</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=\"n\">MyModel</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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;MyModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</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\">row</span><span class=\"o\">.</span><span class=\"n\">uuid</span> <span class=\"o\">=</span> <span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">()</span>\n        <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">update_fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;uuid&quot;</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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0004_add_uuid_field&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=\"c1\"># omit reverse_code=... if you don&#39;t want the migration to be reversible.</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">gen_uuid</span><span class=\"p\">,</span> <span class=\"n\">reverse_code</span><span class=\"o\">=</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"o\">.</span><span class=\"n\">noop</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n</li>\n<li><p>Nu kan du tillämpa migreringarna som vanligt med kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a>.</p>\n<p>Observera att det finns ett tävlingsförhållande om du tillåter att objekt skapas medan denna migrering körs. Objekt som skapas efter <code class=\"docutils literal notranslate\"><span class=\"pre\">AddField</span></code> och före <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> kommer att få sina ursprungliga <code class=\"docutils literal notranslate\"><span class=\"pre\">uuid</span></code> överskrivna.</p>\n</li>\n</ul>\n<section id=\"non-atomic-migrations\">\n<span id=\"id2\"></span><h3>Icke-atomiska migreringar<a class=\"heading-anchor\" href=\"#non-atomic-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>På databaser som stöder DDL-transaktioner (SQLite och PostgreSQL) kommer migreringar att köras i en transaktion som standard. För användningsfall som att utföra datamigreringar på stora tabeller kanske du vill 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>:</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>Inom en sådan migrering körs alla operationer utan en transaktion. Det är möjligt att köra delar av migreringen inuti en transaktion med <a class=\"reference internal\" href=\"/sv/5.2/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> eller genom att skicka <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic=True</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>.</p>\n<p>Här är ett exempel på en icke-atomisk datamigrering som uppdaterar en stor tabell i mindre satser:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">uuid</span>\n\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><span class=\"p\">,</span> <span class=\"n\">transaction</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">gen_uuid</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=\"n\">MyModel</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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;MyModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">while</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">uuid__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n        <span class=\"k\">with</span> <span class=\"n\">transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span><span class=\"p\">():</span>\n            <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">uuid__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)[:</span><span class=\"mi\">1000</span><span class=\"p\">]:</span>\n                <span class=\"n\">row</span><span class=\"o\">.</span><span class=\"n\">uuid</span> <span class=\"o\">=</span> <span class=\"n\">uuid</span><span class=\"o\">.</span><span class=\"n\">uuid4</span><span class=\"p\">()</span>\n                <span class=\"n\">row</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\">atomic</span> <span class=\"o\">=</span> <span class=\"kc\">False</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\">gen_uuid</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic</span></code> har ingen effekt på databaser som inte stöder DDL-transaktioner (t.ex. MySQL, Oracle). (MySQL:s <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/atomic-ddl.html\">atomic DDL statement support</a> hänvisar till enskilda uttalanden snarare än flera uttalanden som är insvepta i en transaktion som kan rullas tillbaka)</p>\n</section>\n</section>\n<section id=\"controlling-the-order-of-migrations\">\n<h2>Kontroll av migrationsordningen<a class=\"heading-anchor\" href=\"#controlling-the-order-of-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django bestämmer i vilken ordning migreringar ska tillämpas, inte genom filnamnet för varje migrering, utan genom att bygga en graf med hjälp av två egenskaper för klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Migration</span></code>: <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code>.</p>\n<p>Om du har använt kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> har du förmodligen redan sett <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> i aktion eftersom automatiskt skapade migreringar har detta definierat som en del av deras skapandeprocess.</p>\n<p>Egenskapen <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> deklareras 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=\"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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0123_the_previous_migration&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Vanligtvis räcker det, men ibland kan du behöva se till att din migrering körs <em>före</em> andra migreringar. Detta är till exempel användbart för att få migreringar av tredjepartsappar att köras <em>efter</em> din <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-AUTH_USER_MODEL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTH_USER_MODEL</span></code></a>-ersättning.</p>\n<p>För att uppnå detta, placera alla migreringar som bör bero på din i <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code>-attributet på din <code class=\"docutils literal notranslate\"><span class=\"pre\">Migration</span></code>-klass:</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=\"o\">...</span>\n\n    <span class=\"n\">run_before</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;third_party_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_do_awesome&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Använd hellre <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> än <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code> när det är möjligt. Du bör endast använda <code class=\"docutils literal notranslate\"><span class=\"pre\">run_before</span></code> om det inte är önskvärt eller opraktiskt att ange <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> i den migrering som du vill köra efter den du skriver.</p>\n</section>\n<section id=\"migrating-data-between-third-party-apps\">\n<h2>Migrering av data mellan appar från tredje part<a class=\"heading-anchor\" href=\"#migrating-data-between-third-party-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Du kan använda en datamigrering för att flytta data från en tredjepartsapplikation till en annan.</p>\n<p>Om du planerar att ta bort den gamla appen senare måste du ställa in egenskapen <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> baserat på om den gamla appen är installerad eller inte. Annars kommer du att sakna beroenden när du avinstallerar den gamla appen. På samma sätt måste du fånga <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#LookupError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">LookupError</span></code></a> i anropet <code class=\"docutils literal notranslate\"><span class=\"pre\">apps.get_model()</span></code> som hämtar modeller från den gamla appen. Med det här tillvägagångssättet kan du distribuera ditt projekt var som helst utan att först installera och sedan avinstallera den gamla appen.</p>\n<p>Här är ett exempel på en migrering:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/migrations/0124_move_old_app_to_new_app.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span> <span class=\"k\">as</span> <span class=\"n\">global_apps</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\">def</span><span class=\"w\"> </span><span class=\"nf\">forwards</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=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">OldModel</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;old_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;OldModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"ne\">LookupError</span><span class=\"p\">:</span>\n        <span class=\"c1\"># The old app isn&#39;t installed.</span>\n        <span class=\"k\">return</span>\n\n    <span class=\"n\">NewModel</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;new_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;NewModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">NewModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n        <span class=\"n\">NewModel</span><span class=\"p\">(</span><span class=\"n\">new_attribute</span><span class=\"o\">=</span><span class=\"n\">old_object</span><span class=\"o\">.</span><span class=\"n\">old_attribute</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">old_object</span> <span class=\"ow\">in</span> <span class=\"n\">OldModel</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=\"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\">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\">forwards</span><span class=\"p\">,</span> <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"o\">.</span><span class=\"n\">noop</span><span class=\"p\">),</span>\n    <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;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0123_the_previous_migration&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;new_app&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=\"k\">if</span> <span class=\"n\">global_apps</span><span class=\"o\">.</span><span class=\"n\">is_installed</span><span class=\"p\">(</span><span class=\"s2\">&quot;old_app&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">dependencies</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span><span class=\"s2\">&quot;old_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">))</span>\n</code></pre></figure>\n<p>Fundera också på vad du vill ska hända när migreringen inte tillämpas. Du kan antingen inte göra någonting (som i exemplet ovan) eller ta bort vissa eller alla data från den nya applikationen. Justera det andra argumentet i <a class=\"reference internal\" href=\"/sv/5.2/ref/migration-operations/#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">RunPython</span></code></a>-operationen i enlighet med detta.</p>\n</section>\n<section id=\"changing-a-manytomanyfield-to-use-a-through-model\">\n<span id=\"id3\"></span><h2>Ändra en <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> så att den använder en <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code>-modell<a class=\"heading-anchor\" href=\"#changing-a-manytomanyfield-to-use-a-through-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du ändrar en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> för att använda en <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code>-modell, kommer standardmigreringen att radera den befintliga tabellen och skapa en ny, vilket innebär att befintliga relationer går förlorade. För att undvika detta kan du använda <a class=\"reference internal\" href=\"/sv/5.2/ref/migration-operations/#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SeparateDatabaseAndState</span></code></a> för att byta namn på den befintliga tabellen till det nya tabellnamnet samtidigt som du meddelar migreringsautodetektorn att den nya modellen har skapats. Du kan kontrollera det befintliga tabellnamnet och begränsningsnamnet genom <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">sqlmigrate</span></code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-dbshell\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dbshell</span></code></a>. Du kan kontrollera det nya tabellnamnet med genom-modellens <code class=\"docutils literal notranslate\"><span class=\"pre\">_meta.db_table</span></code>-egenskap. Din nya <code class=\"docutils literal notranslate\"><span class=\"pre\">through</span></code>-modell bör använda samma namn för <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code>s som Django gjorde. Om den behöver några extra fält bör dessa läggas till i operationer efter <a class=\"reference internal\" href=\"/sv/5.2/ref/migration-operations/#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SeparateDatabaseAndState</span></code></a>.</p>\n<p>Om vi till exempel hade en <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code>-modell med ett <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> som länkar till <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code>, skulle vi kunna lägga till en genomgående modell <code class=\"docutils literal notranslate\"><span class=\"pre\">AuthorBook</span></code> med ett nytt fält <code class=\"docutils literal notranslate\"><span class=\"pre\">is_primary</span></code>, 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<span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.deletion</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;core&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\">SeparateDatabaseAndState</span><span class=\"p\">(</span>\n            <span class=\"n\">database_operations</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                <span class=\"c1\"># Old table name from checking with sqlmigrate, new table</span>\n                <span class=\"c1\"># name from AuthorBook._meta.db_table.</span>\n                <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunSQL</span><span class=\"p\">(</span>\n                    <span class=\"n\">sql</span><span class=\"o\">=</span><span class=\"s2\">&quot;ALTER TABLE core_book_authors RENAME TO core_authorbook&quot;</span><span class=\"p\">,</span>\n                    <span class=\"n\">reverse_sql</span><span class=\"o\">=</span><span class=\"s2\">&quot;ALTER TABLE core_authorbook RENAME TO core_book_authors&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n            <span class=\"n\">state_operations</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">CreateModel</span><span class=\"p\">(</span>\n                    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;AuthorBook&quot;</span><span class=\"p\">,</span>\n                    <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">AutoField</span><span class=\"p\">(</span>\n                                <span class=\"n\">auto_created</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                <span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                <span class=\"n\">serialize</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                                <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;ID&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n                                <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">db</span><span class=\"o\">.</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">deletion</span><span class=\"o\">.</span><span class=\"n\">DO_NOTHING</span><span class=\"p\">,</span>\n                                <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"s2\">&quot;core.Author&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;book&quot;</span><span class=\"p\">,</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n                                <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">db</span><span class=\"o\">.</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">deletion</span><span class=\"o\">.</span><span class=\"n\">DO_NOTHING</span><span class=\"p\">,</span>\n                                <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"s2\">&quot;core.Book&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                    <span class=\"p\">],</span>\n                    <span class=\"n\">options</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;constraints&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UniqueConstraint</span><span class=\"p\">(</span>\n                                <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;book&quot;</span><span class=\"p\">],</span>\n                                <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_author_book&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">)</span>\n                        <span class=\"p\">],</span>\n                    <span class=\"p\">},</span>\n                <span class=\"p\">),</span>\n                <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AlterField</span><span class=\"p\">(</span>\n                    <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">,</span>\n                    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">,</span>\n                    <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n                        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"s2\">&quot;core.Author&quot;</span><span class=\"p\">,</span>\n                        <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s2\">&quot;core.AuthorBook&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">),</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">),</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">AddField</span><span class=\"p\">(</span>\n            <span class=\"n\">model_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;authorbook&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;is_primary&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">field</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"changing-an-unmanaged-model-to-managed\">\n<h2>Ändring av en ostyrd modell till styrd<a class=\"heading-anchor\" href=\"#changing-an-unmanaged-model-to-managed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du vill ändra en ohanterad modell (<a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.managed\" title=\"django.db.models.Options.managed\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">managed=False</span></code></a>) till hanterad måste du ta bort <code class=\"docutils literal notranslate\"><span class=\"pre\">managed=False</span></code> och generera en migrering innan du gör andra schemarelaterade ändringar i modellen, eftersom schemaändringar som visas i den migrering som innehåller åtgärden för att ändra <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.managed</span></code> kanske inte tillämpas.</p>\n</section>","rootId":"how-to-create-database-migrations","toc":[{"title":"Datamigreringar och flera databaser","anchor":"data-migrations-and-multiple-databases","children":[]},{"title":"Migreringar som lägger till unika fält","anchor":"migrations-that-add-unique-fields","children":[{"title":"Icke-atomiska migreringar","anchor":"non-atomic-migrations","children":[]}]},{"title":"Kontroll av migrationsordningen","anchor":"controlling-the-order-of-migrations","children":[]},{"title":"Migrering av data mellan appar från tredje part","anchor":"migrating-data-between-third-party-apps","children":[]},{"title":"Ändra en ManyToManyField så att den använder en through-modell","anchor":"changing-a-manytomanyfield-to-use-a-through-model","children":[]},{"title":"Ändring av en ostyrd modell till styrd","anchor":"changing-an-unmanaged-model-to-managed","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Hur man gör-guider","url":"/sv/5.2/howto/"}],"prev":{"docname":"howto/custom-model-fields","title":"Så här skapar du anpassade modellfält","url":"/sv/5.2/howto/custom-model-fields/"},"next":{"docname":"howto/custom-lookups","title":"Hur man skriver anpassade uppslagsord","url":"/sv/5.2/howto/custom-lookups/"},"formats":{"html":"/sv/5.2/howto/writing-migrations/","markdown":"/sv/5.2/howto/writing-migrations.md","json":"/sv/5.2/howto/writing-migrations.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/howto/writing-migrations.txt","official":"https://docs.djangoproject.com/sv/5.2/howto/writing-migrations/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}