{"title":"Migrationsverksamhet","version":"6.0","locale":"sv","docname":"ref/migration-operations","url":"/sv/6.0/ref/migration-operations/","canonical":"https://djangodocs.dev/sv/6.0/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. Django använder också…","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\"><span class=\"pre\">Operation</span></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\"><span class=\"pre\">Operation</span></code>-objekt som är till för saker som <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">Operation</span></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\"><span class=\"pre\">Operation</span></code>-objekt i, använd <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">makemigrations</span> <span class=\"pre\">--empty</span> <span class=\"pre\">yourappname</span></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/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a> ger felaktig kod.</p>\n<p>Alla Django-kärnoperationer är tillgängliga från modulen <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.migrations.operations</span></code>.</p>\n<p>För introduktionsmaterial, se <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">SkapaModell</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CreateModel</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">options</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">bases</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">managers</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">name</span></code> är modellnamnet, som det skulle skrivas i filen <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code> är en lista med 2-tuples av <code class=\"docutils literal notranslate\"><span class=\"pre\">(field_name,</span> <span class=\"pre\">field_instance)</span></code>. Fältinstansen ska vara ett obundet fält (så bara <code class=\"docutils literal notranslate\"><span class=\"pre\">models.CharField(...)</span></code>, snarare än ett fält som hämtats från en annan modell).</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">options</span></code> är en valfri ordlista med värden från modellens <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>-klass.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">bases</span></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\"><span class=\"pre\">&quot;appname.ModelName&quot;</span></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\"><span class=\"pre\">models.Model</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">managers</span></code> tar en lista med 2-tuples av <code class=\"docutils literal notranslate\"><span class=\"pre\">(manager_name,</span> <span class=\"pre\">manager_instance)</span></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\"><span class=\"pre\">DeleteModel</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DeleteModel</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></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\"><span class=\"pre\">RenameModel</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RenameModel</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">old_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">new_name</span></span></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\"><span class=\"pre\">AlterModelTable</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterModelTable</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">table</span></span></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/6.0/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\"><span class=\"pre\">db_table</span></code></a> på underklassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>).</p>\n</section>\n<section id=\"altermodeltablecomment\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterModelTableKommentar</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterModelTableComment</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">table_comment</span></span></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/6.0/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\"><span class=\"pre\">db_table_comment</span></code></a> på underklassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>).</p>\n</section>\n<section id=\"alteruniquetogether\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterUniqueTogether</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterUniqueTogether</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">unique_together</span></span></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/6.0/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\"><span class=\"pre\">unique_together</span></code></a> på underklassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>).</p>\n</section>\n<section id=\"alterindextogether\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterIndexTillsamman</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterIndexTogether</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">index_together</span></span></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\"><span class=\"pre\">index_together</span></code> i underklassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>).</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterIndexTogether</span></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\"><span class=\"pre\">AddIndex</span></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\"><span class=\"pre\">RemoveIndex</span></code></a>.</p>\n</aside>\n</section>\n<section id=\"alterorderwithrespectto\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterOrderMedAvseendePå</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterOrderWithRespectTo</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order_with_respect_to</span></span></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\"><span class=\"pre\">_order</span></code> som behövs för alternativet <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">order_with_respect_to</span></code></a> på subklassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta</span></code>.</p>\n</section>\n<section id=\"altermodeloptions\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterModelOptions</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterModelOptions</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">options</span></span></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\"><span class=\"pre\">Meta</span></code>) som <code class=\"docutils literal notranslate\"><span class=\"pre\">permissions</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">verbose_name</span></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\"><span class=\"pre\">RunPython</span></code></a>-instanser kan använda dem. <code class=\"docutils literal notranslate\"><span class=\"pre\">options</span></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\"><span class=\"pre\">AlterModelManagers</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterModelManagers</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">managers</span></span></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\"><span class=\"pre\">AddField</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AddField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">preserve_default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></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\"><span class=\"pre\">model_name</span></code> är modellens namn, <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> är fältets namn och <code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> är en obunden fältinstans (det som du skulle lägga till i fältdeklarationen i <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> - till exempel <code class=\"docutils literal notranslate\"><span class=\"pre\">models.IntegerField(null=True)</span></code>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">preserve_default</span></code> argument indicates whether the field’s default\nvalue is permanent and should be baked into the project state (<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>),\nor if it is temporary and just for this migration (<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>) - usually\nbecause the migration is adding a non-nullable field to a table and needs\na default value to put into existing rows. It does not affect the behavior\nof setting defaults in the database directly.</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/6.0/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>-å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/6.0/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\">AlterField</span></code>-åtgärd.</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"removefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Avlägsna</span> <span class=\"pre\">fält</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RemoveField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></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=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p><a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">BaseDatabaseSchemaEditor</span></code></a> and\nPostgreSQL backends no longer use <code class=\"docutils literal notranslate\"><span class=\"pre\">CASCADE</span></code> to delete dependent related\ndatabase objects, such as views. Any dependent objects that are not managed\nby Django may need to be removed manually before running <code class=\"docutils literal notranslate\"><span class=\"pre\">RemoveField</span></code>.</p>\n</aside>\n</section>\n<section id=\"alterfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterField</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">preserve_default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></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/6.0/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.0/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">db_column</span></code></a> och andra fältattribut.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">preserve_default</span></code> argument indicates whether the field’s default\nvalue is permanent and should be baked into the project state (<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>),\nor if it is temporary and just for this migration (<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>) - usually\nbecause the migration is altering a nullable field to a non-nullable one and\nneeds a default value to put into existing rows. It does not affect the\nbehavior of setting defaults in the database directly.</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\"><span class=\"pre\">models.TextField()</span></code> till ett fält av siffertyp som <code class=\"docutils literal notranslate\"><span class=\"pre\">models.IntegerField()</span></code> i de flesta databaser.</p>\n</section>\n<section id=\"renamefield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">RenameField</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RenameField</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">old_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">new_name</span></span></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/6.0/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\"><span class=\"pre\">db_column</span></code></a> har angetts, dess kolumnnamn).</p>\n</section>\n<section id=\"addindex\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AddIndex</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AddIndex</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">index</span></span></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\"><span class=\"pre\">model_name</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> är en instans av klassen <a class=\"reference internal\" href=\"/sv/6.0/ref/models/indexes/#django.db.models.Index\" title=\"django.db.models.Index\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Index</span></code></a>.</p>\n</section>\n<section id=\"removeindex\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">RemoveIndex</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RemoveIndex</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></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\"><span class=\"pre\">name</span></code> från modellen med <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code>.</p>\n</section>\n<section id=\"renameindex\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">RenameIndex</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RenameIndex</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">new_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">old_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">old_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">model_name</span></code>. Exakt ett av <code class=\"docutils literal notranslate\"><span class=\"pre\">old_name</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">old_fields</span></code> kan anges. <code class=\"docutils literal notranslate\"><span class=\"pre\">old_fields</span></code> är en iterabel av strängarna, som ofta motsvarar fält i <code class=\"docutils literal notranslate\"><span class=\"pre\">index_together</span></code> (alternativ före Django 5.1).</p>\n<p>On databases that don’t support an index renaming statement (SQLite), the\noperation will drop and recreate the index, which can be expensive.</p>\n</section>\n<section id=\"addconstraint\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AddConstraint</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AddConstraint</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">constraint</span></span></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/6.0/ref/models/constraints/\"><span class=\"doc\">constraint</span></a> i databastabellen för modellen med <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RemoveConstraint</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></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\"><span class=\"pre\">namn</span></code> från modellen med <code class=\"docutils literal notranslate\"><span class=\"pre\">modell_namn</span></code>.</p>\n</section>\n<section id=\"alterconstraint\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">AlterConstraint</span></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\">\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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AlterConstraint</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">constraint</span></span></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\"><span class=\"pre\">name</span></code> i modellen med <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> med den nya <code class=\"docutils literal notranslate\"><span class=\"pre\">constraint</span></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\"><span class=\"pre\">RunSQL</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RunSQL</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sql</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">reverse_sql</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">state_operations</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">hints</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">elidable</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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\"><span class=\"pre\">sql</span></code>, och <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_sql</span></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\"><span class=\"pre\">BEGIN</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">COMMIT</span></code> i din SQL i <a class=\"reference internal\" href=\"/sv/6.0/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/6.0/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><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunSQL</span><span class=\"p\">(</span><span class=\"s2\">&quot;INSERT INTO musician (name) VALUES (&#39;Reinhardt&#39;);&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunSQL</span><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>\n<span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunSQL</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</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\"><span class=\"pre\">reverse_sql</span></code> körs när migreringen inte tillämpas. De bör ångra det som gjorts av <code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></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><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=\"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    <span class=\"n\">reverse_sql</span><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\"><span class=\"pre\">reverse_sql</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> (standard) är <code class=\"docutils literal notranslate\"><span class=\"pre\">RunSQL</span></code>-operationen irreversibel.</p>\n<p>Med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">state_operations</span></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\"><span class=\"pre\">AddField</span></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\"><span class=\"pre\">makemigrations</span></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><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunSQL</span><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    <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\">AddField</span><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            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><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\"><span class=\"pre\">hints</span></code> kommer att skickas som <code class=\"docutils literal notranslate\"><span class=\"pre\">**hints</span></code> till metoden <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">allow_migrate`()</span></code> i databasroutrar för att hjälpa dem att fatta beslut om routning. Se <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">elidable</span></code> avgör om åtgärden ska tas bort (elided) när <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">RunSQL.</span></span><span class=\"sig-name descname\"><span class=\"pre\">noop</span></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\"><span class=\"pre\">RunSQL.noop</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_sql</span></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\"><span class=\"pre\">RunPython</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RunPython</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">code</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">reverse_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">atomic</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">hints</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">elidable</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></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\"><span class=\"pre\">code</span></code> (och <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_code</span></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\"><span class=\"pre\">django.apps.registry.Apps</span></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/6.0/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\"><span class=\"pre\">SchemaEditor</span></code></a>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_code</span></code> anropas vid avapplicering av migreringar. Denna anropbara bör ångra vad som gjorts i den anropbara <code class=\"docutils literal notranslate\"><span class=\"pre\">code</span></code> så att migreringen är reversibel. Om <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_code</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> (standard), är <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>-operationen irreversibel.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">hints</span></code> kommer att skickas som <code class=\"docutils literal notranslate\"><span class=\"pre\">**hints</span></code> till metoden <code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">allow_migrate`()</span></code> i databasroutrar för att hjälpa dem att fatta ett routningsbeslut. Se <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">elidable</span></code> avgör om åtgärden ska tas bort (elided) när <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">Migration</span></code> i migreringsfilen och skickar den till <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>. Här är ett exempel på hur du använder <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> för att skapa några initiala objekt på en <code class=\"docutils literal notranslate\"><span class=\"pre\">Country</span></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=\"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_func</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"c1\"># We 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    <span class=\"n\">Country</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;Country&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">db_alias</span> <span class=\"o\">=</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>\n    <span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"n\">db_alias</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n        <span class=\"p\">[</span>\n            <span class=\"n\">Country</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;USA&quot;</span><span class=\"p\">,</span> <span class=\"n\">code</span><span class=\"o\">=</span><span class=\"s2\">&quot;us&quot;</span><span class=\"p\">),</span>\n            <span class=\"n\">Country</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;France&quot;</span><span class=\"p\">,</span> <span class=\"n\">code</span><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=\"w\"> </span><span class=\"nf\">reverse_func</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\"># forwards_func() creates two Country instances,</span>\n    <span class=\"c1\"># so reverse_func() should delete them.</span>\n    <span class=\"n\">Country</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;Country&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">db_alias</span> <span class=\"o\">=</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>\n    <span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"n\">db_alias</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;USA&quot;</span><span class=\"p\">,</span> <span class=\"n\">code</span><span class=\"o\">=</span><span class=\"s2\">&quot;us&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"n\">Country</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">using</span><span class=\"p\">(</span><span class=\"n\">db_alias</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;France&quot;</span><span class=\"p\">,</span> <span class=\"n\">code</span><span class=\"o\">=</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</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\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_func</span><span class=\"p\">,</span> <span class=\"n\">reverse_func</span><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/6.0/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\"><span class=\"pre\">RunSQL</span></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\"><span class=\"pre\">SeparateDatabaseAndState</span></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\"><span class=\"pre\">RunPython</span></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\"><span class=\"pre\">schema_editor</span></code> som tillhandahålls på dessa backends; i detta fall, skicka <code class=\"docutils literal notranslate\"><span class=\"pre\">atomic=False</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>-operationen.</p>\n<p>På databaser som stöder DDL-transaktioner (SQLite och PostgreSQL) har <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></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\"><span class=\"pre\">RunPython</span></code>-operationer i samma migrering, annars kan du träffa fel som <code class=\"docutils literal notranslate\"><span class=\"pre\">OperationalError:</span> <span class=\"pre\">cannot</span> <span class=\"pre\">ALTER</span> <span class=\"pre\">TABLE</span> <span class=\"pre\">&quot;mytable&quot;</span> <span class=\"pre\">because</span> <span class=\"pre\">it</span> <span class=\"pre\">has</span> <span class=\"pre\">pending</span> <span class=\"pre\">trigger</span> <span class=\"pre\">events</span></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\"><span class=\"pre\">django.db.connection.features.can_rollback_ddl</span></code>.</p>\n<p>Om åtgärden <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code> är en del av en <a class=\"reference internal\" href=\"/sv/6.0/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\"><span class=\"pre\">atomic=True</span></code> skickas till åtgärden <code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">RunPython</span></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\"><span class=\"pre\">schema_editor.connection.alias</span></code>, där <code class=\"docutils literal notranslate\"><span class=\"pre\">schema_editor</span></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\"><span class=\"pre\">static</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">RunPython.</span></span><span class=\"sig-name descname\"><span class=\"pre\">noop</span></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\"><span class=\"pre\">RunPython.noop</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">code</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_code</span></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\"><span class=\"pre\">SepareraDatabasOchStatus</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SeparateDatabaseAndState</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">database_operations</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">state_operations</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></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\"><span class=\"pre\">RunSQL</span></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\"><span class=\"pre\">database_operations</span></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/6.0/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">sqlmigrate</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-dbshell\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dbshell</span></code></a> för att kontrollera dina databasoperationer. Du kan använda <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></code></a>, särskilt med <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#cmdoption-makemigrations-dry-run\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">--dry-run</span></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\"><span class=\"pre\">SeparateDatabaseAndState</span></code>, se <a class=\"reference internal\" href=\"/sv/6.0/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<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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">OperationCategory</span></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/6.0/ref/django-admin/#django-admin-makemigrations\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">makemigrations</span></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\"><span class=\"pre\">ADDITION</span></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\"><span class=\"pre\">+</span></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\"><span class=\"pre\">REMOVAL</span></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\"><span class=\"pre\">-</span></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\"><span class=\"pre\">ALTERATION</span></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\"><span class=\"pre\">~</span></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\"><span class=\"pre\">PYTHON</span></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\"><span class=\"pre\">p</span></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\"><span class=\"pre\">SQL</span></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\"><span class=\"pre\">s</span></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\"><span class=\"pre\">MIXED</span></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\"><span class=\"pre\">?</span></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\"><span class=\"pre\">Operation</span></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=\"w\"> </span><span class=\"nn\">django.db.migrations.operations.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Operation</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyCustomOperation</span><span class=\"p\">(</span><span class=\"n\">Operation</span><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    <span class=\"n\">reduces_to_sql</span> <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    <span class=\"n\">reversible</span> <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    <span class=\"n\">category</span> <span class=\"o\">=</span> <span class=\"n\">OperationCategory</span><span class=\"o\">.</span><span class=\"n\">ADDITION</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">arg1</span><span class=\"p\">,</span> <span class=\"n\">arg2</span><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=\"w\"> </span><span class=\"nf\">state_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">state</span><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=\"w\"> </span><span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">,</span> <span class=\"n\">from_state</span><span class=\"p\">,</span> <span class=\"n\">to_state</span><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=\"w\"> </span><span class=\"nf\">database_backwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">,</span> <span class=\"n\">from_state</span><span class=\"p\">,</span> <span class=\"n\">to_state</span><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=\"w\"> </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=\"w\"> </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><span class=\"n\">arg1</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arg2</span><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\"><span class=\"pre\">django.db.migrations.operations</span></code> - de täcker mycket av exempelanvändningen av semi-interna aspekter av migreringsramen som <code class=\"docutils literal notranslate\"><span class=\"pre\">ProjectState</span></code> och de mönster som används för att få historiska modeller, liksom <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelState</span></code> och de mönster som används för att mutera historiska modeller i <code class=\"docutils literal notranslate\"><span class=\"pre\">state_forwards()</span></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\"><span class=\"pre\">ProjectState</span></code> för att skriva migreringar; du behöver bara veta att den har en <code class=\"docutils literal notranslate\"><span class=\"pre\">apps</span></code>-egenskap som ger tillgång till ett appregister (som du sedan kan anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">get_model</span></code> på).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">database_forwards</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">database_backwards</span></code> får båda två tillstånd skickade till sig; dessa representerar skillnaden som <code class=\"docutils literal notranslate\"><span class=\"pre\">state_forwards</span></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\"><span class=\"pre\">from_state</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">database_forwards()</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">database_backwards()</span></code> måste du rendera modelltillstånd med metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">clear_delayed_apps_cache()</span></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=\"w\"> </span><span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">,</span> <span class=\"n\">from_state</span><span class=\"p\">,</span> <span class=\"n\">to_state</span><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    <span class=\"n\">from_state</span><span class=\"o\">.</span><span class=\"n\">clear_delayed_apps_cache</span><span class=\"p\">()</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">to_state</span></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\"><span class=\"pre\">references_model</span></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/6.0/ref/models/fields/#django.db.models.Field\" title=\"django.db.models.Field\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Field</span></code></a>-instanser i <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelState.fields</span></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\"><span class=\"pre\">state_forwards()</span></code> måste du ta bort den gamla instansen från <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelState.fields</span></code> och lägga till en ny instans i dess ställe. Detsamma gäller för <a class=\"reference internal\" href=\"/sv/6.0/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a>-instanser i <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelState.managers</span></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=\"w\"> </span><span class=\"nn\">django.db.migrations.operations.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Operation</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoadExtension</span><span class=\"p\">(</span><span class=\"n\">Operation</span><span class=\"p\">):</span>\n    <span class=\"n\">reversible</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">state_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">state</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">database_forwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">,</span> <span class=\"n\">from_state</span><span class=\"p\">,</span> <span class=\"n\">to_state</span><span class=\"p\">):</span>\n        <span class=\"n\">schema_editor</span><span class=\"o\">.</span><span class=\"n\">execute</span><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><span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">database_backwards</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">,</span> <span class=\"n\">from_state</span><span class=\"p\">,</span> <span class=\"n\">to_state</span><span class=\"p\">):</span>\n        <span class=\"n\">schema_editor</span><span class=\"o\">.</span><span class=\"n\">execute</span><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><span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">name</span>\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/6.0/ref/"}],"prev":{"docname":"ref/middleware","title":"Middleware","url":"/sv/6.0/ref/middleware/"},"next":{"docname":"ref/models/index","title":"Modeller","url":"/sv/6.0/ref/models/"},"formats":{"html":"/sv/6.0/ref/migration-operations/","markdown":"/sv/6.0/ref/migration-operations.md","json":"/sv/6.0/ref/migration-operations.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/migration-operations.txt","official":"https://docs.djangoproject.com/sv/6.0/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"]}