{"title":"Migrationsverksamhet","version":"5.2","locale":"sv","docname":"ref/migration-operations","url":"/sv/5.2/ref/migration-operations/","canonical":"https://djangodocs.dev/sv/5.2/ref/migration-operations/","summary":"Migreringsfiler består av en eller flera ”Operation”-objekt, objekt som deklarativt registrerar vad migreringen ska göra med din databas.","html":"<span id=\"migration-operations\"></span><h1>Migrationsverksamhet<a class=\"heading-anchor\" href=\"#module-django.db.migrations.operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Migreringsfiler består av en eller flera ”Operation”-objekt, objekt som deklarativt registrerar vad migreringen ska göra med din databas.</p>\n<p>Django använder också dessa <code class=\"docutils literal notranslate\">Operation</code>-objekt för att räkna ut hur dina modeller såg ut historiskt och för att beräkna vilka ändringar du har gjort i dina modeller sedan den senaste migreringen så att den automatiskt kan skriva dina migreringar; det är därför de är deklarativa, eftersom det betyder att Django enkelt kan ladda dem alla i minnet och köra igenom dem utan att röra databasen för att räkna ut hur ditt projekt ska se ut.</p>\n<p>Det finns också mer specialiserade <code class=\"docutils literal notranslate\">Operation</code>-objekt som är till för saker som <a class=\"reference internal\" href=\"/sv/5.2/topics/migrations/#data-migrations\"><span class=\"std std-ref\">datamigreringar</span></a> och för avancerad manuell databasmanipulation. Du kan också skriva dina egna <code class=\"docutils literal notranslate\">Operation</code>-klasser om du vill kapsla in en anpassad förändring som du ofta gör.</p>\n<p>Om du behöver en tom migreringsfil för att skriva in dina egna <code class=\"docutils literal notranslate\">Operation</code>-objekt i, använd <code class=\"docutils literal notranslate\">python manage.py makemigrations --empty yourappname</code>, men tänk på att manuellt tillägg av schemaändrande operationer kan förvirra migreringsautodetektorn och göra att resulterande körningar av <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> ger felaktig kod.</p>\n<p>Alla Django-kärnoperationer är tillgängliga från modulen <code class=\"docutils literal notranslate\">django.db.migrations.operations</code>.</p>\n<p>För introduktionsmaterial, se <a class=\"reference internal\" href=\"/sv/5.2/topics/migrations/\"><span class=\"doc\">migrations topic guide</span></a>.</p>\n<section id=\"schema-operations\">\n<h2>Schema-verksamhet<a class=\"heading-anchor\" href=\"#schema-operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"createmodel\">\n<h3><code class=\"docutils literal notranslate\">SkapaModell</code><a class=\"heading-anchor\" href=\"#createmodel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.CreateModel\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CreateModel</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">fields</em>, <em class=\"sig-param\">options<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">bases<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">managers<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.CreateModel\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Skapar en ny modell i projekthistoriken och en motsvarande tabell i databasen för att matcha den.</p>\n<p><code class=\"docutils literal notranslate\">name</code> är modellnamnet, som det skulle skrivas i filen <code class=\"docutils literal notranslate\">models.py</code>.</p>\n<p><code class=\"docutils literal notranslate\">fields</code> är en lista med 2-tuples av <code class=\"docutils literal notranslate\">(field_name, field_instance)</code>. Fältinstansen ska vara ett obundet fält (så bara <code class=\"docutils literal notranslate\">models.CharField(...)</code>, snarare än ett fält som hämtats från en annan modell).</p>\n<p><code class=\"docutils literal notranslate\">options</code> är en valfri ordlista med värden från modellens <code class=\"docutils literal notranslate\">Meta</code>-klass.</p>\n<p><code class=\"docutils literal notranslate\">bases</code> är en valfri lista över andra klasser som den här modellen ska ärva från; den kan innehålla både klassobjekt och strängar i formatet <code class=\"docutils literal notranslate\">&quot;appname.ModelName&quot;</code> om du vill vara beroende av en annan modell (så att du ärver från den historiska versionen). Om den inte anges ärver den som standard från standardmodellen <code class=\"docutils literal notranslate\">models.Model</code>.</p>\n<p><code class=\"docutils literal notranslate\">managers</code> tar en lista med 2-tuples av <code class=\"docutils literal notranslate\">(manager_name, manager_instance)</code>. Den första hanteraren i listan kommer att vara standardhanteraren för den här modellen under migreringar.</p>\n</section>\n<section id=\"deletemodel\">\n<h3><code class=\"docutils literal notranslate\">DeleteModel</code><a class=\"heading-anchor\" href=\"#deletemodel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.DeleteModel\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">DeleteModel</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.DeleteModel\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Raderar modellen från projekthistoriken och dess tabell från databasen.</p>\n</section>\n<section id=\"renamemodel\">\n<h3><code class=\"docutils literal notranslate\">RenameModel</code><a class=\"heading-anchor\" href=\"#renamemodel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RenameModel\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RenameModel</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">old_name</em>, <em class=\"sig-param\">new_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RenameModel\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Byter namn på modellen från ett gammalt namn till ett nytt.</p>\n<p>Du kan behöva lägga till detta manuellt om du ändrar modellens namn och en hel del av dess fält på en gång. För autodetektorn ser det ut som om du har tagit bort en modell med det gamla namnet och lagt till en ny med ett annat namn, och den migrering som skapas kommer att förlora alla data i den gamla tabellen.</p>\n</section>\n<section id=\"altermodeltable\">\n<h3><code class=\"docutils literal notranslate\">AlterModelTable</code><a class=\"heading-anchor\" href=\"#altermodeltable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelTable\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelTable</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">table</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelTable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar modellens tabellnamn (alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.db_table\" title=\"django.db.models.Options.db_table\"><code class=\"xref py py-attr docutils literal notranslate\">db_table</code></a> på underklassen <code class=\"docutils literal notranslate\">Meta</code>).</p>\n</section>\n<section id=\"altermodeltablecomment\">\n<h3><code class=\"docutils literal notranslate\">AlterModelTableKommentar</code><a class=\"heading-anchor\" href=\"#altermodeltablecomment\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelTableComment\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelTableComment</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">table_comment</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelTableComment\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar modellens tabellkommentar (alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.db_table_comment\" title=\"django.db.models.Options.db_table_comment\"><code class=\"xref py py-attr docutils literal notranslate\">db_table_comment</code></a> på underklassen <code class=\"docutils literal notranslate\">Meta</code>).</p>\n</section>\n<section id=\"alteruniquetogether\">\n<h3><code class=\"docutils literal notranslate\">AlterUniqueTogether</code><a class=\"heading-anchor\" href=\"#alteruniquetogether\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterUniqueTogether\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterUniqueTogether</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">unique_together</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterUniqueTogether\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar modellens uppsättning av unika begränsningar (alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\">unique_together</code></a> på underklassen <code class=\"docutils literal notranslate\">Meta</code>).</p>\n</section>\n<section id=\"alterindextogether\">\n<h3><code class=\"docutils literal notranslate\">AlterIndexTillsamman</code><a class=\"heading-anchor\" href=\"#alterindextogether\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterIndexTogether\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterIndexTogether</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">index_together</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterIndexTogether\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar modellens uppsättning av anpassade index (alternativet <code class=\"docutils literal notranslate\">index_together</code> i underklassen <code class=\"docutils literal notranslate\">Meta</code>).</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><code class=\"docutils literal notranslate\">AlterIndexTogether</code> stöds officiellt endast för migreringsfiler från före Django 4.2. Av bakåtkompatibilitetsskäl är det fortfarande en del av det offentliga API:et, och det finns ingen plan att avskriva eller ta bort det, men det bör inte användas för nya migreringar. Använd istället <a class=\"reference internal\" href=\"#django.db.migrations.operations.AddIndex\" title=\"django.db.migrations.operations.AddIndex\"><code class=\"xref py py-class docutils literal notranslate\">AddIndex</code></a> och <a class=\"reference internal\" href=\"#django.db.migrations.operations.RemoveIndex\" title=\"django.db.migrations.operations.RemoveIndex\"><code class=\"xref py py-class docutils literal notranslate\">RemoveIndex</code></a>.</p>\n</aside>\n</section>\n<section id=\"alterorderwithrespectto\">\n<h3><code class=\"docutils literal notranslate\">AlterOrderMedAvseendePå</code><a class=\"heading-anchor\" href=\"#alterorderwithrespectto\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterOrderWithRespectTo\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterOrderWithRespectTo</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">order_with_respect_to</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterOrderWithRespectTo\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Skapar eller tar bort kolumnen <code class=\"docutils literal notranslate\">_order</code> som behövs för alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.order_with_respect_to\" title=\"django.db.models.Options.order_with_respect_to\"><code class=\"xref py py-attr docutils literal notranslate\">order_with_respect_to</code></a> på subklassen <code class=\"docutils literal notranslate\">Meta</code>.</p>\n</section>\n<section id=\"altermodeloptions\">\n<h3><code class=\"docutils literal notranslate\">AlterModelOptions</code><a class=\"heading-anchor\" href=\"#altermodeloptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelOptions\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelOptions</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelOptions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Lagrar ändringar av olika modellalternativ (inställningar på en modells <code class=\"docutils literal notranslate\">Meta</code>) som <code class=\"docutils literal notranslate\">permissions</code> och <code class=\"docutils literal notranslate\">verbose_name</code>. Påverkar inte databasen, men lagrar dessa ändringar så att <a class=\"reference internal\" href=\"#django.db.migrations.operations.RunPython\" title=\"django.db.migrations.operations.RunPython\"><code class=\"xref py py-class docutils literal notranslate\">RunPython</code></a>-instanser kan använda dem. <code class=\"docutils literal notranslate\">options</code> bör vara en ordbok som mappar alternativnamn till värden.</p>\n</section>\n<section id=\"altermodelmanagers\">\n<h3><code class=\"docutils literal notranslate\">AlterModelManagers</code><a class=\"heading-anchor\" href=\"#altermodelmanagers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterModelManagers\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterModelManagers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">name</em>, <em class=\"sig-param\">managers</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterModelManagers\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar de chefer som är tillgängliga under migreringar.</p>\n</section>\n<section id=\"addfield\">\n<h3><code class=\"docutils literal notranslate\">AddField</code><a class=\"heading-anchor\" href=\"#addfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AddField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AddField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em>, <em class=\"sig-param\">field</em>, <em class=\"sig-param\">preserve_default<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AddField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Lägger till ett fält till en modell. <code class=\"docutils literal notranslate\">model_name</code> är modellens namn, <code class=\"docutils literal notranslate\">name</code> är fältets namn och <code class=\"docutils literal notranslate\">field</code> är en obunden fältinstans (det som du skulle lägga till i fältdeklarationen i <code class=\"docutils literal notranslate\">models.py</code> - till exempel <code class=\"docutils literal notranslate\">models.IntegerField(null=True)</code>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">preserve_default</code> anger om fältets standardvärde är permanent och ska bakas in i projekttillståndet (<code class=\"docutils literal notranslate\">True</code>), eller om det är tillfälligt och bara för den här migreringen (<code class=\"docutils literal notranslate\">False</code>) - vanligtvis för att migreringen lägger till ett icke-nullbart fält i en tabell och behöver ett standardvärde att lägga in i befintliga rader. Det påverkar inte beteendet att ställa in standardvärden i databasen direkt - Django ställer aldrig in standardvärden i databasen och tillämpar dem alltid i Django ORM-koden.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>I äldre databaser kan tillägg av ett fält med ett standardvärde leda till att tabellen skrivs om helt och hållet. Detta händer även för nollställbara fält och kan ha en negativ inverkan på prestandan. För att undvika detta bör följande steg vidtas.</p>\n<ul class=\"simple\">\n<li><p>Lägg till det nollställbara fältet utan standardvärde och 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\">makemigrations</code></a>. Detta bör generera en migrering med en <code class=\"docutils literal notranslate\">AddField</code>-åtgärd.</p></li>\n<li><p>Lägg till standardvärdet i ditt fält och 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\">makemigrations</code></a>. Detta bör generera en migrering med en <code class=\"docutils literal notranslate\">AlterField</code>-åtgärd.</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"removefield\">\n<h3><code class=\"docutils literal notranslate\">Avlägsna fält</code><a class=\"heading-anchor\" href=\"#removefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RemoveField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RemoveField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RemoveField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tar bort ett fält från en modell.</p>\n<p>Tänk på att detta faktiskt innebär att ett fält läggs till i en modell när det vänds. Åtgärden är reversibel (bortsett från eventuell dataförlust, som är irreversibel) om fältet är nollställbart eller om det har ett standardvärde som kan användas för att fylla i den återskapade kolumnen. Om fältet inte är nollställbart och inte har något standardvärde är åtgärden irreversibel.</p>\n<aside class=\"admonition-postgresql admonition\" role=\"note\">\n<p class=\"admonition-title\">PostgreSQL</p>\n<p><code class=\"docutils literal notranslate\">RemoveField</code> kommer också att radera alla ytterligare databasobjekt som är relaterade till det borttagna fältet (som till exempel vyer). Detta beror på att den resulterande <code class=\"docutils literal notranslate\">DROP COLUMN</code>-satsen kommer att innehålla <code class=\"docutils literal notranslate\">CASCADE</code>-klausulen för att säkerställa att <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-PARMS-CASCADE\">beroende objekt utanför tabellen också tas bort</a>.</p>\n</aside>\n</section>\n<section id=\"alterfield\">\n<h3><code class=\"docutils literal notranslate\">AlterField</code><a class=\"heading-anchor\" href=\"#alterfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em>, <em class=\"sig-param\">field</em>, <em class=\"sig-param\">preserve_default<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar ett fälts definition, inklusive ändringar av dess typ, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\">unique</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.db_column\" title=\"django.db.models.Field.db_column\"><code class=\"xref py py-attr docutils literal notranslate\">db_column</code></a> och andra fältattribut.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">preserve_default</code> anger om fältets standardvärde är permanent och ska bakas in i projekttillståndet (<code class=\"docutils literal notranslate\">True</code>), eller om det är tillfälligt och bara för den här migreringen (<code class=\"docutils literal notranslate\">False</code>) - vanligtvis för att migreringen ändrar ett nollställbart fält till ett icke-nullställbart och behöver ett standardvärde att lägga in i befintliga rader. Det påverkar inte beteendet att ställa in standardvärden i databasen direkt - Django ställer aldrig in standardvärden i databasen och tillämpar dem alltid i Django ORM-koden.</p>\n<p>Observera att alla ändringar inte är möjliga i alla databaser - du kan t.ex. inte ändra ett fält av texttyp som <code class=\"docutils literal notranslate\">models.TextField()</code> till ett fält av siffertyp som <code class=\"docutils literal notranslate\">models.IntegerField()</code> i de flesta databaser.</p>\n</section>\n<section id=\"renamefield\">\n<h3><code class=\"docutils literal notranslate\">RenameField</code><a class=\"heading-anchor\" href=\"#renamefield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RenameField\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RenameField</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">old_name</em>, <em class=\"sig-param\">new_name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RenameField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar ett fälts namn (och, om inte <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.db_column\" title=\"django.db.models.Field.db_column\"><code class=\"xref py py-attr docutils literal notranslate\">db_column</code></a> har angetts, dess kolumnnamn).</p>\n</section>\n<section id=\"addindex\">\n<h3><code class=\"docutils literal notranslate\">AddIndex</code><a class=\"heading-anchor\" href=\"#addindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AddIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AddIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">index</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AddIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Skapar ett index i databastabellen för modellen med <code class=\"docutils literal notranslate\">model_name</code>. <code class=\"docutils literal notranslate\">index</code> är en instans av klassen <a class=\"reference internal\" href=\"/sv/5.2/ref/models/indexes/#django.db.models.Index\" title=\"django.db.models.Index\"><code class=\"xref py py-class docutils literal notranslate\">Index</code></a>.</p>\n</section>\n<section id=\"removeindex\">\n<h3><code class=\"docutils literal notranslate\">RemoveIndex</code><a class=\"heading-anchor\" href=\"#removeindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RemoveIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RemoveIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RemoveIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tar bort indexet med namnet <code class=\"docutils literal notranslate\">name</code> från modellen med <code class=\"docutils literal notranslate\">model_name</code>.</p>\n</section>\n<section id=\"renameindex\">\n<h3><code class=\"docutils literal notranslate\">RenameIndex</code><a class=\"heading-anchor\" href=\"#renameindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RenameIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RenameIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">new_name</em>, <em class=\"sig-param\">old_name<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">old_fields<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RenameIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Byter namn på ett index i databastabellen för modellen med <code class=\"docutils literal notranslate\">model_name</code>. Exakt ett av <code class=\"docutils literal notranslate\">old_name</code> och <code class=\"docutils literal notranslate\">old_fields</code> kan anges. <code class=\"docutils literal notranslate\">old_fields</code> är en iterabel av strängarna, som ofta motsvarar fält i <code class=\"docutils literal notranslate\">index_together</code> (alternativ före Django 5.1).</p>\n<p>I databaser som inte stöder en indexomdöpning (SQLite och MariaDB &lt; 10.5.2) kommer åtgärden att ta bort och återskapa indexet, vilket kan bli dyrt.</p>\n</section>\n<section id=\"addconstraint\">\n<h3><code class=\"docutils literal notranslate\">AddConstraint</code><a class=\"heading-anchor\" href=\"#addconstraint\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AddConstraint\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AddConstraint</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">constraint</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AddConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Skapar en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/constraints/\"><span class=\"doc\">constraint</span></a> i databastabellen för modellen med <code class=\"docutils literal notranslate\">model_name</code>.</p>\n</section>\n<section id=\"removeconstraint\">\n<h3>”Ta bort begränsning<a class=\"heading-anchor\" href=\"#removeconstraint\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RemoveConstraint\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RemoveConstraint</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RemoveConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tar bort begränsningen med namnet <code class=\"docutils literal notranslate\">namn</code> från modellen med <code class=\"docutils literal notranslate\">modell_namn</code>.</p>\n</section>\n<section id=\"alterconstraint\">\n<h3><code class=\"docutils literal notranslate\">AlterConstraint</code><a class=\"heading-anchor\" href=\"#alterconstraint\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"5.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.AlterConstraint\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">AlterConstraint</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">model_name</em>, <em class=\"sig-param\">name</em>, <em class=\"sig-param\">constraint</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.AlterConstraint\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ändrar begränsningen med namnet <code class=\"docutils literal notranslate\">name</code> i modellen med <code class=\"docutils literal notranslate\">model_name</code> med den nya <code class=\"docutils literal notranslate\">constraint</code> utan att påverka databasen.</p>\n</section>\n</section>\n<section id=\"special-operations\">\n<h2>Specialoperationer<a class=\"heading-anchor\" href=\"#special-operations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"runsql\">\n<h3><code class=\"docutils literal notranslate\">RunSQL</code><a class=\"heading-anchor\" href=\"#runsql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunSQL\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RunSQL</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">sql</em>, <em class=\"sig-param\">reverse_sql<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">state_operations<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">hints<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">elidable<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunSQL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Gör det möjligt att köra godtycklig SQL på databasen - användbart för mer avancerade funktioner i databasbackends som Django inte stöder direkt.</p>\n<p><code class=\"docutils literal notranslate\">sql</code>, och <code class=\"docutils literal notranslate\">reverse_sql</code> om det tillhandahålls, bör vara strängar av SQL som ska köras på databasen. På de flesta databasbackends (alla utom PostgreSQL) kommer Django att dela upp SQL i enskilda uttalanden innan de körs.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>På PostgreSQL och SQLite, använd endast <code class=\"docutils literal notranslate\">BEGIN</code> eller <code class=\"docutils literal notranslate\">COMMIT</code> i din SQL i <a class=\"reference internal\" href=\"/sv/5.2/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">non-atomic migrations</span></a>, för att undvika att bryta Djangos transaktionsstatus.</p>\n</aside>\n<p>Du kan också skicka en lista med strängar eller 2-tupler. Den senare används för att skicka frågor och parametrar på samma sätt som <a class=\"reference internal\" href=\"/sv/5.2/topics/db/sql/#executing-custom-sql\"><span class=\"std std-ref\">cursor.execute()</span></a>. Dessa tre operationer är likvärdiga:</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>migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (&#39;Reinhardt&#39;);&quot;</span><span class=\"p\">)</span>\nmigrations<span class=\"o\">.</span>RunSQL<span class=\"p\">([(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (&#39;Reinhardt&#39;);&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)])</span>\nmigrations<span class=\"o\">.</span>RunSQL<span class=\"p\">([(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (</span><span class=\"si\">%s</span><span class=\"s2\">);&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Reinhardt&quot;</span><span class=\"p\">])])</span>\n</code></pre></div>\n<p>Om du vill inkludera bokstavliga procenttecken i frågan måste du dubbla dem om du skickar parametrar.</p>\n<p>Frågorna <code class=\"docutils literal notranslate\">reverse_sql</code> körs när migreringen inte tillämpas. De bör ångra det som gjorts av <code class=\"docutils literal notranslate\">sql</code>-frågorna. Till exempel:, för att ångra ovanstående infogning med en borttagning:</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>migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span>\n    sql<span class=\"o\">=</span><span class=\"p\">[(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (</span><span class=\"si\">%s</span><span class=\"s2\">);&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Reinhardt&quot;</span><span class=\"p\">])],</span>\n    reverse_sql<span class=\"o\">=</span><span class=\"p\">[(</span><span class=\"s2\">&quot;DELETE FROM musician where name=</span><span class=\"si\">%s</span><span class=\"s2\">;&quot;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Reinhardt&quot;</span><span class=\"p\">])],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\">reverse_sql</code> är <code class=\"docutils literal notranslate\">None</code> (standard) är <code class=\"docutils literal notranslate\">RunSQL</code>-operationen irreversibel.</p>\n<p>Med argumentet <code class=\"docutils literal notranslate\">state_operations</code> kan du ange operationer som är likvärdiga med SQL när det gäller projektstatus. Om du till exempel skapar en kolumn manuellt bör du skicka in en lista som innehåller en <code class=\"docutils literal notranslate\">AddField</code> operation här så att autodetektorn fortfarande har ett uppdaterat tillstånd för modellen. Om du inte gör det, när du nästa gång kör <code class=\"docutils literal notranslate\">makemigrations</code>, kommer den inte att se någon operation som lägger till det fältet och kommer därför att försöka köra den igen. 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>migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span>\n    <span class=\"s2\">&quot;ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;&quot;</span><span class=\"p\">,</span>\n    state_operations<span class=\"o\">=</span><span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>AddField<span class=\"p\">(</span>\n            <span class=\"s2\">&quot;musician&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span>\n            models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\">hints</code> kommer att skickas som <code class=\"docutils literal notranslate\">**hints</code> till metoden <code class=\"xref py py-meth docutils literal notranslate\">allow_migrate`()</code> i databasroutrar för att hjälpa dem att fatta beslut om routning. Se <a class=\"reference internal\" href=\"/sv/5.2/topics/db/multi-db/#topics-db-multi-db-hints\"><span class=\"std std-ref\">Tips</span></a> för mer information om databastips.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\">elidable</code> avgör om åtgärden ska tas bort (elided) när <a class=\"reference internal\" href=\"/sv/5.2/topics/migrations/#migration-squashing\"><span class=\"std std-ref\">squashing migrations</span></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunSQL.noop\">\n<span class=\"sig-prename descclassname\">RunSQL.</span><span class=\"sig-name descname\">noop</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunSQL.noop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skicka attributet <code class=\"docutils literal notranslate\">RunSQL.noop</code> till <code class=\"docutils literal notranslate\">sql</code> eller <code class=\"docutils literal notranslate\">reverse_sql</code> när du vill att operationen inte ska göra någonting i den angivna riktningen. Detta är särskilt användbart för att göra operationen reversibel.</p>\n</dd></dl>\n\n</section>\n<section id=\"runpython\">\n<h3><code class=\"docutils literal notranslate\">RunPython</code><a class=\"heading-anchor\" href=\"#runpython\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunPython\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RunPython</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">code</em>, <em class=\"sig-param\">reverse_code<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">atomic<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">hints<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">elidable<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunPython\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Kör anpassad Python-kod i ett historiskt sammanhang. <code class=\"docutils literal notranslate\">code</code> (och <code class=\"docutils literal notranslate\">reverse_code</code> om det tillhandahålls) ska vara anropsbara objekt som accepterar två argument; det första är en instans av <code class=\"docutils literal notranslate\">django.apps.registry.Apps</code> som innehåller historiska modeller som matchar operationens plats i projekthistoriken, och det andra är en instans av <a class=\"reference internal\" href=\"/sv/5.2/ref/schema-editor/#django.db.backends.base.schema.BaseDatabaseSchemaEditor\" title=\"django.db.backends.base.schema.BaseDatabaseSchemaEditor\"><code class=\"xref py py-class docutils literal notranslate\">SchemaEditor</code></a>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">reverse_code</code> anropas vid avapplicering av migreringar. Denna anropbara bör ångra vad som gjorts i den anropbara <code class=\"docutils literal notranslate\">code</code> så att migreringen är reversibel. Om <code class=\"docutils literal notranslate\">reverse_code</code> är <code class=\"docutils literal notranslate\">None</code> (standard), är <code class=\"docutils literal notranslate\">RunPython</code>-operationen irreversibel.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\">hints</code> kommer att skickas som <code class=\"docutils literal notranslate\">**hints</code> till metoden <code class=\"xref py py-meth docutils literal notranslate\">allow_migrate`()</code> i databasroutrar för att hjälpa dem att fatta ett routningsbeslut. Se <a class=\"reference internal\" href=\"/sv/5.2/topics/db/multi-db/#topics-db-multi-db-hints\"><span class=\"std std-ref\">Tips</span></a> för mer information om databastips.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\">elidable</code> avgör om åtgärden ska tas bort (elided) när <a class=\"reference internal\" href=\"/sv/5.2/topics/migrations/#migration-squashing\"><span class=\"std std-ref\">squashing migrations</span></a>.</p>\n<p>Vi rekommenderar att du skriver koden som en separat funktion ovanför klassen <code class=\"docutils literal notranslate\">Migration</code> i migreringsfilen och skickar den till <code class=\"docutils literal notranslate\">RunPython</code>. Här är ett exempel på hur du använder <code class=\"docutils literal notranslate\">RunPython</code> för att skapa några initiala objekt på en <code class=\"docutils literal notranslate\">Country</code>-modell:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n\n\n<span class=\"k\">def</span> <span class=\"nf\">forwards_func</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"c1\"># We get the model from the versioned app registry;</span>\n    <span class=\"c1\"># if we directly import it, it&#39;ll be the wrong version</span>\n    Country <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Country&quot;</span><span class=\"p\">)</span>\n    db_alias <span class=\"o\">=</span> schema_editor<span class=\"o\">.</span>connection<span class=\"o\">.</span>alias\n    Country<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span>db_alias<span class=\"p\">)</span><span class=\"o\">.</span>bulk_create<span class=\"p\">(</span>\n        <span class=\"p\">[</span>\n            Country<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;USA&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;us&quot;</span><span class=\"p\">),</span>\n            Country<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;France&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n    <span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reverse_func</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"c1\"># forwards_func() creates two Country instances,</span>\n    <span class=\"c1\"># so reverse_func() should delete them.</span>\n    Country <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Country&quot;</span><span class=\"p\">)</span>\n    db_alias <span class=\"o\">=</span> schema_editor<span class=\"o\">.</span>connection<span class=\"o\">.</span>alias\n    Country<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span>db_alias<span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;USA&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;us&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n    Country<span class=\"o\">.</span>objects<span class=\"o\">.</span>using<span class=\"p\">(</span>db_alias<span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;France&quot;</span><span class=\"p\">,</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>forwards_func<span class=\"p\">,</span> reverse_func<span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Detta är i allmänhet den operation du skulle använda för att skapa <a class=\"reference internal\" href=\"/sv/5.2/topics/migrations/#data-migrations\"><span class=\"std std-ref\">datamigreringar</span></a>, köra anpassade datauppdateringar och ändringar och allt annat du behöver tillgång till en ORM och/eller Python-kod för.</p>\n<p>Precis som <a class=\"reference internal\" href=\"#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\">RunSQL</code></a>, se till att om du ändrar schema här inne gör du det antingen utanför omfattningen av Djangos modellsystem (t.ex. triggers) eller att du använder <a class=\"reference internal\" href=\"#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\">SeparateDatabaseAndState</code></a> för att lägga till operationer som återspeglar dina ändringar i modelltillståndet - annars kommer den versionerade ORM och autodetektorn att sluta fungera korrekt.</p>\n<p>Som standard kommer <code class=\"docutils literal notranslate\">RunPython</code> att köra sitt innehåll inuti en transaktion på databaser som inte stöder DDL-transaktioner (till exempel MySQL och Oracle). Detta bör vara säkert, men kan orsaka en krasch om du försöker använda <code class=\"docutils literal notranslate\">schema_editor</code> som tillhandahålls på dessa backends; i detta fall, skicka <code class=\"docutils literal notranslate\">atomic=False</code> till <code class=\"docutils literal notranslate\">RunPython</code>-operationen.</p>\n<p>På databaser som stöder DDL-transaktioner (SQLite och PostgreSQL) har <code class=\"docutils literal notranslate\">RunPython</code> -operationer inga transaktioner som automatiskt läggs till förutom de transaktioner som skapas för varje migrering. Således, till exempel på PostgreSQL, bör du undvika att kombinera schemaändringar och <code class=\"docutils literal notranslate\">RunPython</code>-operationer i samma migrering, annars kan du träffa fel som <code class=\"docutils literal notranslate\">OperationalError: cannot ALTER TABLE &quot;mytable&quot; because it has pending trigger events</code>.</p>\n<p>Om du har en annan databas och inte är säker på om den stöder DDL-transaktioner, kontrollera attributet <code class=\"docutils literal notranslate\">django.db.connection.features.can_rollback_ddl</code>.</p>\n<p>Om åtgärden <code class=\"docutils literal notranslate\">RunPython</code> är en del av en <a class=\"reference internal\" href=\"/sv/5.2/howto/writing-migrations/#non-atomic-migrations\"><span class=\"std std-ref\">non-atomic migration</span></a>, kommer åtgärden endast att utföras i en transaktion om <code class=\"docutils literal notranslate\">atomic=True</code> skickas till åtgärden <code class=\"docutils literal notranslate\">RunPython</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><code class=\"docutils literal notranslate\">RunPython</code> ändrar inte magiskt anslutningen av modellerna åt dig; alla modellmetoder du anropar kommer att gå till standarddatabasen om du inte ger dem det aktuella databasaliaset (tillgängligt från <code class=\"docutils literal notranslate\">schema_editor.connection.alias</code>, där <code class=\"docutils literal notranslate\">schema_editor</code> är det andra argumentet till din funktion).</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.RunPython.noop\">\n<em class=\"property\"><span class=\"k\">static</span> </em><span class=\"sig-prename descclassname\">RunPython.</span><span class=\"sig-name descname\">noop</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.RunPython.noop\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Skicka metoden <code class=\"docutils literal notranslate\">RunPython.noop</code> till <code class=\"docutils literal notranslate\">code</code> eller <code class=\"docutils literal notranslate\">reverse_code</code> när du vill att operationen inte ska göra något i den angivna riktningen. Detta är särskilt användbart för att göra operationen reversibel.</p>\n</dd></dl>\n\n</section>\n<section id=\"separatedatabaseandstate\">\n<h3><code class=\"docutils literal notranslate\">SepareraDatabasOchStatus</code><a class=\"heading-anchor\" href=\"#separatedatabaseandstate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.SeparateDatabaseAndState\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SeparateDatabaseAndState</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">database_operations<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">state_operations<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.SeparateDatabaseAndState\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En mycket specialiserad operation som gör det möjligt att kombinera databasaspekter (schemaändring) och statliga aspekter (autodetektorkraft) av operationer.</p>\n<p>Den accepterar två listor med operationer. När du blir ombedd att tillämpa tillstånd kommer den att använda listan `` state_operations`` (detta är en generaliserad version av <a class=\"reference internal\" href=\"#django.db.migrations.operations.RunSQL\" title=\"django.db.migrations.operations.RunSQL\"><code class=\"xref py py-class docutils literal notranslate\">RunSQL</code></a>’s `` state_operations`` argument). När den ombeds att tillämpa ändringar i databasen kommer den att använda listan <code class=\"docutils literal notranslate\">database_operations</code>.</p>\n<p>Om databasens faktiska tillstånd och Djangos syn på tillståndet inte är synkroniserade kan detta bryta migreringsramverket och till och med leda till dataförlust. Det är värt att vara försiktig och kontrollera dina databas- och tillståndsoperationer noggrant. Du kan använda <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlmigrate</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-dbshell\"><code class=\"xref std std-djadmin docutils literal notranslate\">dbshell</code></a> för att kontrollera dina databasoperationer. Du kan använda <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a>, särskilt med <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#cmdoption-makemigrations-dry-run\"><code class=\"xref std std-option docutils literal notranslate\">--dry-run</code></a>, för att kontrollera dina tillståndsoperationer.</p>\n<p>För ett exempel på användning av <code class=\"docutils literal notranslate\">SeparateDatabaseAndState</code>, se <a class=\"reference internal\" href=\"/sv/5.2/howto/writing-migrations/#changing-a-manytomanyfield-to-use-a-through-model\"><span class=\"std std-ref\">Ändra en ManyToManyField så att den använder en through-modell</span></a>.</p>\n</section>\n</section>\n<section id=\"operation-category\">\n<h2>Operationskategori<a class=\"heading-anchor\" href=\"#operation-category\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.1</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">OperationCategory</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Kategorier av migreringsoperationer som används av kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\">makemigrations</code></a> för att visa meningsfulla symboler.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory.ADDITION\">\n<span class=\"sig-name descname\">ADDITION</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory.ADDITION\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Symbol</em>: <code class=\"docutils literal notranslate\">+</code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory.REMOVAL\">\n<span class=\"sig-name descname\">REMOVAL</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory.REMOVAL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Symbol</em>: <code class=\"docutils literal notranslate\">-</code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory.ALTERATION\">\n<span class=\"sig-name descname\">ALTERATION</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory.ALTERATION\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Symbol</em>: <code class=\"docutils literal notranslate\">~</code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory.PYTHON\">\n<span class=\"sig-name descname\">PYTHON</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory.PYTHON\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Symbol</em>: <code class=\"docutils literal notranslate\">p</code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory.SQL\">\n<span class=\"sig-name descname\">SQL</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory.SQL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Symbol</em>: <code class=\"docutils literal notranslate\">s</code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.migrations.operations.base.OperationCategory.MIXED\">\n<span class=\"sig-name descname\">MIXED</span><a class=\"heading-anchor\" href=\"#django.db.migrations.operations.base.OperationCategory.MIXED\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Symbol</em>: <code class=\"docutils literal notranslate\">?</code></p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"writing-your-own\">\n<span id=\"writing-your-own-migration-operation\"></span><h2>Skriva din egen<a class=\"heading-anchor\" href=\"#writing-your-own\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Operationer har ett relativt enkelt API, och de är utformade så att du enkelt kan skriva dina egna för att komplettera de inbyggda Django. Den grundläggande strukturen för en <code class=\"docutils literal notranslate\">Operation</code> 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=\"nn\">django.db.migrations.operations.base</span> <span class=\"kn\">import</span> Operation\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyCustomOperation</span><span class=\"p\">(</span>Operation<span class=\"p\">):</span>\n    <span class=\"c1\"># If this is False, it means that this operation will be ignored by</span>\n    <span class=\"c1\"># sqlmigrate; if true, it will be run and the SQL collected for its output.</span>\n    reduces_to_sql <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"c1\"># If this is False, Django will refuse to reverse past this operation.</span>\n    reversible <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    <span class=\"c1\"># This categorizes the operation. The corresponding symbol will be</span>\n    <span class=\"c1\"># displayed by the makemigrations command.</span>\n    category <span class=\"o\">=</span> OperationCategory<span class=\"o\">.</span>ADDITION\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> arg1<span class=\"p\">,</span> arg2<span class=\"p\">):</span>\n        <span class=\"c1\"># Operations are usually instantiated with arguments in migration</span>\n        <span class=\"c1\"># files. Store the values of them on self for later use.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">state_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> state<span class=\"p\">):</span>\n        <span class=\"c1\"># The Operation should take the &#39;state&#39; parameter (an instance of</span>\n        <span class=\"c1\"># django.db.migrations.state.ProjectState) and mutate it to match</span>\n        <span class=\"c1\"># any schema changes that have occurred.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        <span class=\"c1\"># The Operation should use schema_editor to apply any changes it</span>\n        <span class=\"c1\"># wants to make to the database.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_backwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        <span class=\"c1\"># If reversible is True, this is called when the operation is reversed.</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">describe</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># This is used to describe what the operation does.</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Custom Operation&quot;</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">migration_name_fragment</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Optional. A filename part suitable for automatically naming a</span>\n        <span class=\"c1\"># migration containing this operation, or None if not applicable.</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;custom_operation_</span><span class=\"si\">%s</span><span class=\"s2\">_</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>arg1<span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span>arg2<span class=\"p\">)</span>\n</code></pre></div>\n<p>Du kan ta den här mallen och arbeta utifrån den, men vi föreslår att du tittar på de inbyggda Django-operationerna i <code class=\"docutils literal notranslate\">django.db.migrations.operations</code> - de täcker mycket av exempelanvändningen av semi-interna aspekter av migreringsramen som <code class=\"docutils literal notranslate\">ProjectState</code> och de mönster som används för att få historiska modeller, liksom <code class=\"docutils literal notranslate\">ModelState</code> och de mönster som används för att mutera historiska modeller i <code class=\"docutils literal notranslate\">state_forwards()</code>.</p>\n<p>Några saker att notera:</p>\n<ul>\n<li><p>Du behöver inte lära dig så mycket om <code class=\"docutils literal notranslate\">ProjectState</code> för att skriva migreringar; du behöver bara veta att den har en <code class=\"docutils literal notranslate\">apps</code>-egenskap som ger tillgång till ett appregister (som du sedan kan anropa <code class=\"docutils literal notranslate\">get_model</code> på).</p></li>\n<li><p><code class=\"docutils literal notranslate\">database_forwards</code> och <code class=\"docutils literal notranslate\">database_backwards</code> får båda två tillstånd skickade till sig; dessa representerar skillnaden som <code class=\"docutils literal notranslate\">state_forwards</code>-metoden skulle ha tillämpat, men ges till dig av bekvämlighets- och hastighetsskäl.</p></li>\n<li><p>Om du vill arbeta med modellklasser eller modellinstanser från argumentet <code class=\"docutils literal notranslate\">from_state</code> i <code class=\"docutils literal notranslate\">database_forwards()</code> eller <code class=\"docutils literal notranslate\">database_backwards()</code> måste du rendera modelltillstånd med metoden <code class=\"docutils literal notranslate\">clear_delayed_apps_cache()</code> för att göra relaterade modeller tillgängliga:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n    <span class=\"c1\"># This operation should have access to all models. Ensure that all models are</span>\n    <span class=\"c1\"># reloaded in case any are delayed.</span>\n    from_state<span class=\"o\">.</span>clear_delayed_apps_cache<span class=\"p\">()</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\">to_state</code> i metoden database_backwards är det <em>äldre</em> tillståndet, det vill säga det som kommer att vara det aktuella tillståndet när migreringen har avslutats.</p></li>\n<li><p>Du kan se implementeringar av <code class=\"docutils literal notranslate\">references_model</code> på de inbyggda operationerna; detta är en del av autodetekteringskoden och spelar ingen roll för anpassade operationer.</p></li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Av prestandaskäl återanvänds <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\">Field</code></a>-instanser i <code class=\"docutils literal notranslate\">ModelState.fields</code> över migreringar. Du får aldrig ändra attributen på dessa instanser. Om du behöver mutera ett fält i <code class=\"docutils literal notranslate\">state_forwards()</code> måste du ta bort den gamla instansen från <code class=\"docutils literal notranslate\">ModelState.fields</code> och lägga till en ny instans i dess ställe. Detsamma gäller för <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a>-instanser i <code class=\"docutils literal notranslate\">ModelState.managers</code>.</p>\n</aside>\n<p>Låt oss som ett exempel göra en operation som laddar PostgreSQL-tillägg (som innehåller några av PostgreSQL: s mer spännande funktioner). Eftersom det inte finns några förändringar i modelltillståndet är allt det gör att köra ett kommando:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.migrations.operations.base</span> <span class=\"kn\">import</span> Operation\n\n\n<span class=\"k\">class</span> <span class=\"nc\">LoadExtension</span><span class=\"p\">(</span>Operation<span class=\"p\">):</span>\n    reversible <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> name<span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>name <span class=\"o\">=</span> name\n\n    <span class=\"k\">def</span> <span class=\"nf\">state_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> state<span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        schema_editor<span class=\"o\">.</span>execute<span class=\"p\">(</span><span class=\"s2\">&quot;CREATE EXTENSION IF NOT EXISTS </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">database_backwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> app_label<span class=\"p\">,</span> schema_editor<span class=\"p\">,</span> from_state<span class=\"p\">,</span> to_state<span class=\"p\">):</span>\n        schema_editor<span class=\"o\">.</span>execute<span class=\"p\">(</span><span class=\"s2\">&quot;DROP EXTENSION </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name<span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">describe</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Creates extension </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">migration_name_fragment</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;create_extension_</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n</section>","rootId":"module-django.db.migrations.operations","toc":[{"title":"Schema-verksamhet","anchor":"schema-operations","children":[{"title":"SkapaModell","anchor":"createmodel","children":[]},{"title":"DeleteModel","anchor":"deletemodel","children":[]},{"title":"RenameModel","anchor":"renamemodel","children":[]},{"title":"AlterModelTable","anchor":"altermodeltable","children":[]},{"title":"AlterModelTableKommentar","anchor":"altermodeltablecomment","children":[]},{"title":"AlterUniqueTogether","anchor":"alteruniquetogether","children":[]},{"title":"AlterIndexTillsamman","anchor":"alterindextogether","children":[]},{"title":"AlterOrderMedAvseendePå","anchor":"alterorderwithrespectto","children":[]},{"title":"AlterModelOptions","anchor":"altermodeloptions","children":[]},{"title":"AlterModelManagers","anchor":"altermodelmanagers","children":[]},{"title":"AddField","anchor":"addfield","children":[]},{"title":"Avlägsna fält","anchor":"removefield","children":[]},{"title":"AlterField","anchor":"alterfield","children":[]},{"title":"RenameField","anchor":"renamefield","children":[]},{"title":"AddIndex","anchor":"addindex","children":[]},{"title":"RemoveIndex","anchor":"removeindex","children":[]},{"title":"RenameIndex","anchor":"renameindex","children":[]},{"title":"AddConstraint","anchor":"addconstraint","children":[]},{"title":"”Ta bort begränsning","anchor":"removeconstraint","children":[]},{"title":"AlterConstraint","anchor":"alterconstraint","children":[]}]},{"title":"Specialoperationer","anchor":"special-operations","children":[{"title":"RunSQL","anchor":"runsql","children":[]},{"title":"RunPython","anchor":"runpython","children":[]},{"title":"SepareraDatabasOchStatus","anchor":"separatedatabaseandstate","children":[]}]},{"title":"Operationskategori","anchor":"operation-category","children":[]},{"title":"Skriva din egen","anchor":"writing-your-own","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/5.2/ref/"}],"prev":{"docname":"ref/middleware","title":"Middleware","url":"/sv/5.2/ref/middleware/"},"next":{"docname":"ref/models/index","title":"Modeller","url":"/sv/5.2/ref/models/"},"formats":{"html":"/sv/5.2/ref/migration-operations/","markdown":"/sv/5.2/ref/migration-operations.md","json":"/sv/5.2/ref/migration-operations.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/migration-operations.txt","official":"https://docs.djangoproject.com/sv/5.2/ref/migration-operations/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}