{"title":"Referens till modellinstans","version":"5.2","locale":"sv","docname":"ref/models/instances","url":"/sv/5.2/ref/models/instances/","canonical":"https://djangodocs.dev/sv/5.2/ref/models/instances/","summary":"Detta dokument beskriver detaljerna i API:et Model. Det bygger på det material som presenteras i guiderna model och database query, så du vill förmodligen…","html":"<h1>Referens till modellinstans<a class=\"heading-anchor\" href=\"#model-instance-reference\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument beskriver detaljerna i API:et <code class=\"docutils literal notranslate\">Model</code>. Det bygger på det material som presenteras i guiderna <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/\"><span class=\"doc\">model</span></a> och <a class=\"reference internal\" href=\"/sv/5.2/topics/db/queries/\"><span class=\"doc\">database query</span></a>, så du vill förmodligen läsa och förstå dessa dokument innan du läser det här.</p>\n<p>I den här referensen använder vi <a class=\"reference internal\" href=\"/sv/5.2/topics/db/queries/#queryset-model-example\"><span class=\"std std-ref\">exempel på bloggmodeller</span></a> som presenteras i <a class=\"reference internal\" href=\"/sv/5.2/topics/db/queries/\"><span class=\"doc\">guide för databasfrågor</span></a>.</p>\n<section id=\"creating-objects\">\n<h2>Skapa objekt<a class=\"heading-anchor\" href=\"#creating-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att skapa en ny instans av en modell instansierar du den som vilken annan Python-klass som helst:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Model</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Nyckelordsargumenten är namnen på de fält som du har definierat i din modell. Observera att instansiering av en modell inte på något sätt rör din databas; för det måste du <a class=\"reference internal\" href=\"#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Det kan vara frestande att anpassa modellen genom att åsidosätta metoden <code class=\"docutils literal notranslate\">__init__</code>. Om du gör det, var dock noga med att inte ändra den anropande signaturen eftersom varje ändring kan förhindra att modellinstansen sparas. Dessutom kan hänvisning till modellfält inom <code class=\"docutils literal notranslate\">__init__</code> potentiellt resultera i oändliga rekursionsfel under vissa omständigheter.  I stället för att åsidosätta <code class=\"docutils literal notranslate\">__init__</code> kan du prova att använda något av dessa tillvägagångssätt:</p>\n<ol class=\"arabic\">\n<li><p>Lägg till en classmethod på modellklassen:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Book</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> title<span class=\"p\">):</span>\n        book <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"p\">(</span>title<span class=\"o\">=</span>title<span class=\"p\">)</span>\n        <span class=\"c1\"># do something with the book</span>\n        <span class=\"k\">return</span> book\n\n\nbook <span class=\"o\">=</span> Book<span class=\"o\">.</span>create<span class=\"p\">(</span><span class=\"s2\">&quot;Pride and Prejudice&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p>Lägg till en metod på en anpassad manager (vanligtvis att föredra):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">BookManager</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Manager<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">create_book</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> title<span class=\"p\">):</span>\n        book <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>create<span class=\"p\">(</span>title<span class=\"o\">=</span>title<span class=\"p\">)</span>\n        <span class=\"c1\"># do something with the book</span>\n        <span class=\"k\">return</span> book\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Book</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    objects <span class=\"o\">=</span> BookManager<span class=\"p\">()</span>\n\n\nbook <span class=\"o\">=</span> Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>create_book<span class=\"p\">(</span><span class=\"s2\">&quot;Pride and Prejudice&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ol>\n</aside>\n<section id=\"customizing-model-loading\">\n<h3>Anpassning av modellbelastning<a class=\"heading-anchor\" href=\"#customizing-model-loading\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.from_db\">\n<em class=\"property\"><span class=\"k\">classmethod</span> </em><span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">from_db</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">db</em>, <em class=\"sig-param\">field_names</em>, <em class=\"sig-param\">values</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.from_db\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Metoden <code class=\"docutils literal notranslate\">from_db()</code> kan användas för att anpassa skapandet av modellinstanser vid laddning från databasen.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\">db</code> innehåller databasaliaset för den databas som modellen laddas från, <code class=\"docutils literal notranslate\">field_names</code> innehåller namnen på alla inlästa fält och <code class=\"docutils literal notranslate\">values</code> innehåller de inlästa värdena för varje fält i <code class=\"docutils literal notranslate\">field_names</code>. <code class=\"docutils literal notranslate\">field_names</code> är i samma ordning som <code class=\"docutils literal notranslate\">values</code>. Om alla modellens fält finns med, kommer <code class=\"docutils literal notranslate\">values</code> garanterat att finnas i den ordning som <code class=\"docutils literal notranslate\">__init__()</code> förväntar sig dem. Det vill säga, instansen kan skapas av <code class=\"docutils literal notranslate\">cls(*values)</code>. Om några fält är uppskjutna kommer de inte att visas i <code class=\"docutils literal notranslate\">field_names</code>. Tilldela i så fall ett värde av <code class=\"docutils literal notranslate\">django.db.models.DEFERRED</code> till vart och ett av de saknade fälten.</p>\n<p>Förutom att skapa den nya modellen måste metoden <code class=\"docutils literal notranslate\">from_db()</code> ställa in flaggorna <code class=\"docutils literal notranslate\">adding</code> och <code class=\"docutils literal notranslate\">db</code> i den nya instansens attribut <a class=\"reference internal\" href=\"#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\">_state</code></a>.</p>\n<p>Nedan följer ett exempel som visar hur man registrerar de ursprungliga värdena för fält som laddas från databasen:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> DEFERRED\n\n\n<span class=\"nd\">@classmethod</span>\n<span class=\"k\">def</span> <span class=\"nf\">from_db</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> db<span class=\"p\">,</span> field_names<span class=\"p\">,</span> values<span class=\"p\">):</span>\n    <span class=\"c1\"># Default implementation of from_db() (subject to change and could</span>\n    <span class=\"c1\"># be replaced with super()).</span>\n    <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span>values<span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span>_meta<span class=\"o\">.</span>concrete_fields<span class=\"p\">):</span>\n        values <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span>values<span class=\"p\">)</span>\n        values<span class=\"o\">.</span>reverse<span class=\"p\">()</span>\n        values <span class=\"o\">=</span> <span class=\"p\">[</span>\n            values<span class=\"o\">.</span>pop<span class=\"p\">()</span> <span class=\"k\">if</span> f<span class=\"o\">.</span>attname <span class=\"ow\">in</span> field_names <span class=\"k\">else</span> DEFERRED\n            <span class=\"k\">for</span> f <span class=\"ow\">in</span> <span class=\"bp\">cls</span><span class=\"o\">.</span>_meta<span class=\"o\">.</span>concrete_fields\n        <span class=\"p\">]</span>\n    instance <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"o\">*</span>values<span class=\"p\">)</span>\n    instance<span class=\"o\">.</span>_state<span class=\"o\">.</span>adding <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    instance<span class=\"o\">.</span>_state<span class=\"o\">.</span>db <span class=\"o\">=</span> db\n    <span class=\"c1\"># customization to store the original field values on the instance</span>\n    instance<span class=\"o\">.</span>_loaded_values <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span>\n        <span class=\"nb\">zip</span><span class=\"p\">(</span>field_names<span class=\"p\">,</span> <span class=\"p\">(</span>value <span class=\"k\">for</span> value <span class=\"ow\">in</span> values <span class=\"k\">if</span> value <span class=\"ow\">is</span> <span class=\"ow\">not</span> DEFERRED<span class=\"p\">))</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">return</span> instance\n\n\n<span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n    <span class=\"c1\"># Check how the current values differ from ._loaded_values. For example,</span>\n    <span class=\"c1\"># prevent changing the creator_id of the model. (This example doesn&#39;t</span>\n    <span class=\"c1\"># support cases where &#39;creator_id&#39; is deferred).</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span>_state<span class=\"o\">.</span>adding <span class=\"ow\">and</span> <span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>creator_id <span class=\"o\">!=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>_loaded_values<span class=\"p\">[</span><span class=\"s2\">&quot;creator_id&quot;</span><span class=\"p\">]</span>\n    <span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Updating the value of creator isn&#39;t allowed&quot;</span><span class=\"p\">)</span>\n    <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>save<span class=\"p\">(</span><span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n<p>Exemplet ovan visar en fullständig <code class=\"docutils literal notranslate\">from_db()</code>-implementering för att klargöra hur det görs. I det här fallet skulle det vara möjligt att använda ett <code class=\"docutils literal notranslate\">super()</code>-anrop i <code class=\"docutils literal notranslate\">from_db()</code>-metoden.</p>\n</section>\n</section>\n<section id=\"refreshing-objects-from-database\">\n<h2>Uppdatering av objekt från databas<a class=\"heading-anchor\" href=\"#refreshing-objects-from-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du tar bort ett fält från en modellinstans laddas värdet från databasen när du öppnar det igen:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>obj <span class=\"o\">=</span> MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>first<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">del</span> obj<span class=\"o\">.</span>field\n<span class=\"gp\">&gt;&gt;&gt; </span>obj<span class=\"o\">.</span>field  <span class=\"c1\"># Loads the field from the database</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.refresh_from_db\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">refresh_from_db</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">using<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">fields<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">from_queryset<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.refresh_from_db\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.arefresh_from_db\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">arefresh_from_db</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">using<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">fields<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">from_queryset<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.arefresh_from_db\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">arefresh_from_db()</code></p>\n<p>Om du behöver ladda om en modells värden från databasen kan du använda metoden <code class=\"docutils literal notranslate\">refresh_from_db()</code>. När denna metod anropas utan argument görs följande:</p>\n<ol class=\"arabic simple\">\n<li><p>Alla icke uppskjutna fält i modellen uppdateras till de värden som för närvarande finns i databasen.</p></li>\n<li><p>Alla cachelagrade relationer rensas från den omladdade instansen.</p></li>\n</ol>\n<p>Endast modellens fält laddas om från databasen. Andra databasberoende värden som t.ex. annoteringar laddas inte om. Eventuella <a class=\"reference internal\" href=\"/sv/5.2/ref/utils/#django.utils.functional.cached_property\" title=\"django.utils.functional.cached_property\"><code class=\"xref py py-func docutils literal notranslate\">&#64;cached_property</code></a>-attribut rensas inte heller.</p>\n<p>Omladdningen sker från den databas som instansen laddades från, eller från standarddatabasen om instansen inte laddades från databasen. Argumentet <code class=\"docutils literal notranslate\">using</code> kan användas för att tvinga fram den databas som används för omlastning.</p>\n<p>Det är möjligt att tvinga fram en uppsättning fält som ska laddas genom att använda argumentet <code class=\"docutils literal notranslate\">fields</code>.</p>\n<p>Om du till exempel vill testa att ett anrop av <code class=\"docutils literal notranslate\">update()</code> resulterar i den förväntade uppdateringen, kan du skriva ett test som liknar detta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">test_update_result</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    obj <span class=\"o\">=</span> MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>val<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pk<span class=\"o\">=</span>obj<span class=\"o\">.</span>pk<span class=\"p\">)</span><span class=\"o\">.</span>update<span class=\"p\">(</span>val<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;val&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"c1\"># At this point obj.val is still 1, but the value in the database</span>\n    <span class=\"c1\"># was updated to 2. The object&#39;s updated value needs to be reloaded</span>\n    <span class=\"c1\"># from the database.</span>\n    obj<span class=\"o\">.</span>refresh_from_db<span class=\"p\">()</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>obj<span class=\"o\">.</span>val<span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Observera att när man använder uppskjutna fält sker laddningen av det uppskjutna fältets värde med den här metoden. Det är alltså möjligt att anpassa hur den uppskjutna laddningen sker. Exemplet nedan visar hur man kan ladda om instansens alla fält när ett uppskjutet fält laddas om:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ExampleModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">refresh_from_db</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> using<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> fields<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">):</span>\n        <span class=\"c1\"># fields contains the name of the deferred field to be</span>\n        <span class=\"c1\"># loaded.</span>\n        <span class=\"k\">if</span> fields <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            fields <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span>fields<span class=\"p\">)</span>\n            deferred_fields <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>get_deferred_fields<span class=\"p\">()</span>\n            <span class=\"c1\"># If any deferred field is going to be loaded</span>\n            <span class=\"k\">if</span> fields<span class=\"o\">.</span>intersection<span class=\"p\">(</span>deferred_fields<span class=\"p\">):</span>\n                <span class=\"c1\"># then load all of them</span>\n                fields <span class=\"o\">=</span> fields<span class=\"o\">.</span>union<span class=\"p\">(</span>deferred_fields<span class=\"p\">)</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>refresh_from_db<span class=\"p\">(</span>using<span class=\"p\">,</span> fields<span class=\"p\">,</span> <span class=\"o\">**</span>kwargs<span class=\"p\">)</span>\n</code></pre></div>\n<p>Argumentet <code class=\"docutils literal notranslate\">from_queryset</code> gör det möjligt att använda en annan queryset än den som skapats från <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Model._base_manager\" title=\"django.db.models.Model._base_manager\"><code class=\"xref py py-attr docutils literal notranslate\">_base_manager</code></a>. Det ger dig mer kontroll över hur modellen laddas om. Till exempel:, när din modell använder soft deletion kan du göra <code class=\"docutils literal notranslate\">refresh_from_db()</code> för att ta hänsyn till detta:</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>obj<span class=\"o\">.</span>refresh_from_db<span class=\"p\">(</span>from_queryset<span class=\"o\">=</span>MyModel<span class=\"o\">.</span>active_objects<span class=\"o\">.</span>all<span class=\"p\">())</span>\n</code></pre></div>\n<p>Du kan cacha relaterade objekt som annars skulle rensas bort från den omladdade instansen:</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>obj<span class=\"o\">.</span>refresh_from_db<span class=\"p\">(</span>from_queryset<span class=\"o\">=</span>MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>select_related<span class=\"p\">(</span><span class=\"s2\">&quot;related_field&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Du kan låsa raden till slutet av transaktionen innan du laddar om en modells värden:</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>obj<span class=\"o\">.</span>refresh_from_db<span class=\"p\">(</span>from_queryset<span class=\"o\">=</span>MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>select_for_update<span class=\"p\">())</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.1</p><p>Argumentet <code class=\"docutils literal notranslate\">from_queryset</code> lades till.</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.get_deferred_fields\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">get_deferred_fields</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.get_deferred_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En hjälpmetod som returnerar en uppsättning som innehåller attributnamnen för alla de fält som för närvarande är uppskjutna för denna modell.</p>\n</section>\n<section id=\"validating-objects\">\n<span id=\"id1\"></span><h2>Validering av objekt<a class=\"heading-anchor\" href=\"#validating-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det finns fyra steg i valideringen av en modell:</p>\n<ol class=\"arabic simple\">\n<li><p>Validera modellfälten - <a class=\"reference internal\" href=\"#django.db.models.Model.clean_fields\" title=\"django.db.models.Model.clean_fields\"><code class=\"xref py py-meth docutils literal notranslate\">Model.clean_fields()</code></a></p></li>\n<li><p>Validera modellen som helhet - <a class=\"reference internal\" href=\"#django.db.models.Model.clean\" title=\"django.db.models.Model.clean\"><code class=\"xref py py-meth docutils literal notranslate\">Model.clean()</code></a></p></li>\n<li><p>Validera fältets unika egenskaper - <a class=\"reference internal\" href=\"#django.db.models.Model.validate_unique\" title=\"django.db.models.Model.validate_unique\"><code class=\"xref py py-meth docutils literal notranslate\">Model.validate_unique()</code></a></p></li>\n<li><p>Validera begränsningarna - <a class=\"reference internal\" href=\"#django.db.models.Model.validate_constraints\" title=\"django.db.models.Model.validate_constraints\"><code class=\"xref py py-meth docutils literal notranslate\">Model.validate_constraints()</code></a></p></li>\n</ol>\n<p>Alla fyra stegen utförs när du anropar en modells <a class=\"reference internal\" href=\"#django.db.models.Model.full_clean\" title=\"django.db.models.Model.full_clean\"><code class=\"xref py py-meth docutils literal notranslate\">full_clean()</code></a>-metod.</p>\n<p>När du använder en <a class=\"reference internal\" href=\"/sv/5.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> kommer anropet till <a class=\"reference internal\" href=\"/sv/5.2/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\">is_valid()</code></a> att utföra dessa valideringssteg för alla fält som ingår i formuläret. Se <a class=\"reference internal\" href=\"/sv/5.2/topics/forms/modelforms/\"><span class=\"doc\">ModelForm-dokumentationen</span></a> för mer information. Du bör bara behöva anropa en modells <a class=\"reference internal\" href=\"#django.db.models.Model.full_clean\" title=\"django.db.models.Model.full_clean\"><code class=\"xref py py-meth docutils literal notranslate\">full_clean()</code></a>-metod om du planerar att hantera valideringsfel själv, eller om du har uteslutit fält från <a class=\"reference internal\" href=\"/sv/5.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> som kräver validering.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.full_clean\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">full_clean</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">exclude<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">validate_unique<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">validate_constraints<span class=\"o\">=</span><span class=\"default_value\">True</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.full_clean\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Denna metod anropar <a class=\"reference internal\" href=\"#django.db.models.Model.clean_fields\" title=\"django.db.models.Model.clean_fields\"><code class=\"xref py py-meth docutils literal notranslate\">Model.clean_fields()</code></a>, <a class=\"reference internal\" href=\"#django.db.models.Model.clean\" title=\"django.db.models.Model.clean\"><code class=\"xref py py-meth docutils literal notranslate\">Model.clean()</code></a>, <a class=\"reference internal\" href=\"#django.db.models.Model.validate_unique\" title=\"django.db.models.Model.validate_unique\"><code class=\"xref py py-meth docutils literal notranslate\">Model.validate_unique()</code></a> (om <code class=\"docutils literal notranslate\">validate_unique</code> är <code class=\"docutils literal notranslate\">True</code>), och <a class=\"reference internal\" href=\"#django.db.models.Model.validate_constraints\" title=\"django.db.models.Model.validate_constraints\"><code class=\"xref py py-meth docutils literal notranslate\">Model.validate_constraints()</code></a> (om <code class=\"docutils literal notranslate\">validate_constraints</code> är <code class=\"docutils literal notranslate\">True</code>) i den ordningen och ger upphov till ett <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> som har attributet <code class=\"docutils literal notranslate\">message_dict</code> som innehåller fel från alla fyra stegen.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\">exclude</code> kan användas för att tillhandahålla en <code class=\"docutils literal notranslate\">uppsättning</code> av fältnamn som kan uteslutas från validering och rengöring. <a class=\"reference internal\" href=\"/sv/5.2/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\">ModelForm</code></a> använder detta argument för att utesluta fält som inte finns i ditt formulär från att valideras eftersom eventuella fel som uppstår inte kan korrigeras av användaren.</p>\n<p>Observera att <code class=\"docutils literal notranslate\">full_clean()</code> <em>inte</em> kommer att anropas automatiskt när du anropar din modells <a class=\"reference internal\" href=\"#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>-metod. Du måste anropa den manuellt när du vill köra modellvalidering i ett steg för dina egna manuellt skapade modeller. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ValidationError\n\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    article<span class=\"o\">.</span>full_clean<span class=\"p\">()</span>\n<span class=\"k\">except</span> ValidationError <span class=\"k\">as</span> e<span class=\"p\">:</span>\n    <span class=\"c1\"># Do something based on the errors contained in e.message_dict.</span>\n    <span class=\"c1\"># Display them to a user, or handle them programmatically.</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Det första steget som <code class=\"docutils literal notranslate\">full_clean()</code> utför är att rengöra varje enskilt fält.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.clean_fields\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">clean_fields</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">exclude<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.clean_fields\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Denna metod validerar alla fält i din modell. Det valfria <code class=\"docutils literal notranslate\">exclude</code> argumentet låter dig tillhandahålla en <code class=\"docutils literal notranslate\">uppsättning</code> av fältnamn som ska uteslutas från validering. Det kommer att ge upphov till en <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> om några fält misslyckas med valideringen.</p>\n<p>Det andra steget som <code class=\"docutils literal notranslate\">full_clean()</code> utför är att anropa <a class=\"reference internal\" href=\"#django.db.models.Model.clean\" title=\"django.db.models.Model.clean\"><code class=\"xref py py-meth docutils literal notranslate\">Model.clean()</code></a>. Denna metod bör åsidosättas för att utföra anpassad validering på din modell.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.clean\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">clean</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.clean\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Den här metoden bör användas för att tillhandahålla anpassad modellvalidering och för att ändra attribut på din modell om så önskas. Du kan t.ex. använda den för att automatiskt ange ett värde för ett fält eller för att göra en validering som kräver åtkomst till mer än ett enda fält:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ValidationError\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.translation</span> <span class=\"kn\">import</span> gettext_lazy <span class=\"k\">as</span> _\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Don&#39;t allow draft entries to have a pub_date.</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>status <span class=\"o\">==</span> <span class=\"s2\">&quot;draft&quot;</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span>pub_date <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Draft entries may not have a publication date.&quot;</span><span class=\"p\">))</span>\n        <span class=\"c1\"># Set the pub_date for published items if it hasn&#39;t been set already.</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>status <span class=\"o\">==</span> <span class=\"s2\">&quot;published&quot;</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span>pub_date <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>pub_date <span class=\"o\">=</span> datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span>\n</code></pre></div>\n<p>Observera dock att i likhet med <a class=\"reference internal\" href=\"#django.db.models.Model.full_clean\" title=\"django.db.models.Model.full_clean\"><code class=\"xref py py-meth docutils literal notranslate\">Model.full_clean()</code></a> anropas inte en modells <code class=\"docutils literal notranslate\">clean()</code>-metod när du anropar din modells <a class=\"reference internal\" href=\"#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>-metod.</p>\n<p>I exemplet ovan instantierades undantaget <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> av <code class=\"docutils literal notranslate\">Model.clean()</code> med en sträng, så det kommer att lagras i en speciell felordboksnyckel, <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.NON_FIELD_ERRORS\" title=\"django.core.exceptions.NON_FIELD_ERRORS\"><code class=\"xref py py-data docutils literal notranslate\">NON_FIELD_ERRORS</code></a>. Den här nyckeln används för fel som är knutna till hela modellen istället för till ett specifikt fält:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> NON_FIELD_ERRORS<span class=\"p\">,</span> ValidationError\n\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    article<span class=\"o\">.</span>full_clean<span class=\"p\">()</span>\n<span class=\"k\">except</span> ValidationError <span class=\"k\">as</span> e<span class=\"p\">:</span>\n    non_field_errors <span class=\"o\">=</span> e<span class=\"o\">.</span>message_dict<span class=\"p\">[</span>NON_FIELD_ERRORS<span class=\"p\">]</span>\n</code></pre></div>\n<p>För att tilldela undantag till ett specifikt fält, instansiera <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> med en ordbok, där nycklarna är fältnamnen. Vi kan uppdatera det föregående exemplet för att tilldela felet till fältet <code class=\"docutils literal notranslate\">pub_date</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Don&#39;t allow draft entries to have a pub_date.</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>status <span class=\"o\">==</span> <span class=\"s2\">&quot;draft&quot;</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span>pub_date <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n                <span class=\"p\">{</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> _<span class=\"p\">(</span><span class=\"s2\">&quot;Draft entries may not have a publication date.&quot;</span><span class=\"p\">)}</span>\n            <span class=\"p\">)</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Om du upptäcker fel i flera fält under <code class=\"docutils literal notranslate\">Model.clean()</code> kan du också skicka en ordlista som mappar fältnamn till errors:</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\">raise</span> ValidationError<span class=\"p\">(</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> ValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Missing title.&quot;</span><span class=\"p\">),</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;required&quot;</span><span class=\"p\">),</span>\n        <span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> ValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid date.&quot;</span><span class=\"p\">),</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;invalid&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Sedan kommer <code class=\"docutils literal notranslate\">full_clean()</code> att kontrollera unika begränsningar för din modell.</p>\n<aside class=\"admonition-how-to-raise-field-specific-validation-errors-if-those-fields-don-t-appear-in-a-modelform admonition\" role=\"note\">\n<p class=\"admonition-title\">Så här skapar du fältspecifika valideringsfel om dessa fält inte visas i ett <code class=\"docutils literal notranslate\">ModelForm</code></p>\n<p>Du kan inte skapa valideringsfel i <code class=\"docutils literal notranslate\">Model.clean()</code> för fält som inte visas i ett modellformulär (ett formulär kan begränsa sina fält med hjälp av <code class=\"docutils literal notranslate\">Meta.fields</code> eller <code class=\"docutils literal notranslate\">Meta.exclude</code>). Om du gör det kommer ett <code class=\"docutils literal notranslate\">ValueError</code> att uppstå eftersom valideringsfelet inte kommer att kunna associeras med det uteslutna fältet.</p>\n<p>För att komma runt detta dilemma, åsidosätt istället <a class=\"reference internal\" href=\"#django.db.models.Model.clean_fields\" title=\"django.db.models.Model.clean_fields\"><code class=\"xref py py-meth docutils literal notranslate\">Model.clean_fields()</code></a> eftersom den tar emot listan över fält som är undantagna från validering. 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=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">clean_fields</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> exclude<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>clean_fields<span class=\"p\">(</span>exclude<span class=\"o\">=</span>exclude<span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span>status <span class=\"o\">==</span> <span class=\"s2\">&quot;draft&quot;</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span>pub_date <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> exclude <span class=\"ow\">and</span> <span class=\"s2\">&quot;status&quot;</span> <span class=\"ow\">in</span> exclude<span class=\"p\">:</span>\n                <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n                    _<span class=\"p\">(</span><span class=\"s2\">&quot;Draft entries may not have a publication date.&quot;</span><span class=\"p\">)</span>\n                <span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n                    <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;status&quot;</span><span class=\"p\">:</span> _<span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;Set status to draft if there is not a publication date.&quot;</span>\n                        <span class=\"p\">),</span>\n                    <span class=\"p\">}</span>\n                <span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.validate_unique\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">validate_unique</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">exclude<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.validate_unique\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Denna metod liknar <a class=\"reference internal\" href=\"#django.db.models.Model.clean_fields\" title=\"django.db.models.Model.clean_fields\"><code class=\"xref py py-meth docutils literal notranslate\">clean_fields()</code></a>, men validerar unikhetsbegränsningar som definieras via <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\">Field.unique</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.unique_for_date\" title=\"django.db.models.Field.unique_for_date\"><code class=\"xref py py-attr docutils literal notranslate\">Field.unique_for_date</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.unique_for_month\" title=\"django.db.models.Field.unique_for_month\"><code class=\"xref py py-attr docutils literal notranslate\">Field.unique_for_month</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.unique_for_year\" title=\"django.db.models.Field.unique_for_year\"><code class=\"xref py py-attr docutils literal notranslate\">Field.unique_for_year</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\">Meta.unique_together</code></a> på din modell istället för enskilda fältvärden. Det valfria argumentet <code class=\"docutils literal notranslate\">exclude</code> låter dig tillhandahålla en <code class=\"docutils literal notranslate\">uppsättning</code> av fältnamn som ska uteslutas från validering. Det kommer att ge upphov till en <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> om några fält misslyckas med valideringen.</p>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/models/constraints/#django.db.models.UniqueConstraint\" title=\"django.db.models.UniqueConstraint\"><code class=\"xref py py-class docutils literal notranslate\">UniqueConstraint</code></a>s som definieras i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.constraints\" title=\"django.db.models.Options.constraints\"><code class=\"xref py py-attr docutils literal notranslate\">Meta.constraints</code></a> valideras av <a class=\"reference internal\" href=\"#django.db.models.Model.validate_constraints\" title=\"django.db.models.Model.validate_constraints\"><code class=\"xref py py-meth docutils literal notranslate\">Model.validate_constraints()</code></a>.</p>\n<p>Observera att om du anger ett <code class=\"docutils literal notranslate\">exclude</code>-argument till <code class=\"docutils literal notranslate\">validate_unique()</code>, kommer alla <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\">unique_together</code></a>-begränsningar som involverar ett av de fält du angav inte att kontrolleras.</p>\n<p>Slutligen kommer <code class=\"docutils literal notranslate\">full_clean()</code> att kontrollera eventuella andra begränsningar för din modell.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.validate_constraints\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">validate_constraints</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">exclude<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.validate_constraints\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Denna metod validerar alla begränsningar som definieras i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.constraints\" title=\"django.db.models.Options.constraints\"><code class=\"xref py py-attr docutils literal notranslate\">Meta.constraints</code></a>. Det valfria <code class=\"docutils literal notranslate\">exclude</code>-argumentet låter dig tillhandahålla en <code class=\"docutils literal notranslate\">uppsättning</code> av fältnamn som ska uteslutas från validering. Det kommer att ge upphov till en <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\">ValidationError</code></a> om några begränsningar misslyckas med valideringen.</p>\n</section>\n<section id=\"saving-objects\">\n<h2>Spara objekt<a class=\"heading-anchor\" href=\"#saving-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att spara ett objekt tillbaka till databasen, anropa <code class=\"docutils literal notranslate\">save()</code>:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.save\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">save</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">force_insert<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">force_update<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">using<span class=\"o\">=</span><span class=\"default_value\">DEFAULT_DB_ALIAS</span></em>, <em class=\"sig-param\">update_fields<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.save\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.asave\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">asave</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\">*</abbr></span></em>, <em class=\"sig-param\">force_insert<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">force_update<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">using<span class=\"o\">=</span><span class=\"default_value\">DEFAULT_DB_ALIAS</span></em>, <em class=\"sig-param\">update_fields<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.asave\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">asave()</code></p>\n<p>Mer information om hur du använder argumenten <code class=\"docutils literal notranslate\">force_insert</code> och <code class=\"docutils literal notranslate\">force_update</code> finns i <a class=\"reference internal\" href=\"#ref-models-force-insert\"><span class=\"std std-ref\">Tvinga fram en INSERT eller UPDATE</span></a>. Detaljer om argumentet <code class=\"docutils literal notranslate\">update_fields</code> finns i avsnittet <a class=\"reference internal\" href=\"#ref-models-update-fields\"><span class=\"std std-ref\">Ange vilka fält som ska sparas</span></a>.</p>\n<p>Om du vill ha ett anpassat sparbeteende kan du åsidosätta denna metod <code class=\"docutils literal notranslate\">save()</code>. Se <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/#overriding-model-methods\"><span class=\"std std-ref\">Åsidosätta fördefinierade modellmetoder</span></a> för mer information.</p>\n<p>Processen för att spara modeller har också vissa finesser; se avsnitten nedan.</p>\n<aside class=\"version-note version-deprecated\" data-version=\"5.1\" role=\"note\">\n<p class=\"version-note-title\">Deprecated since Django 5.1</p><p><span class=\"versionmodified deprecated\">Ersatt sedan version 5.1: </span>Stöd för positionella argument är borttaget.</p>\n</aside>\n<section id=\"auto-incrementing-primary-keys\">\n<h3>Automatiskt ökande primärnycklar<a class=\"heading-anchor\" href=\"#auto-incrementing-primary-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om en modell har en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a> - en automatiskt ökande primärnyckel - kommer det automatiskt ökande värdet att beräknas och sparas som ett attribut på ditt objekt första gången du anropar <code class=\"docutils literal notranslate\">save()</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>b2 <span class=\"o\">=</span> Blog<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;Thoughts on cheese.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b2<span class=\"o\">.</span>id  <span class=\"c1\"># Returns None, because b2 doesn&#39;t have an ID yet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b2<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b2<span class=\"o\">.</span>id  <span class=\"c1\"># Returns the ID of your new object.</span>\n</code></pre></div>\n<p>Det finns inget sätt att säga vad värdet på ett ID kommer att vara innan du anropar <code class=\"docutils literal notranslate\">save()</code>, eftersom det värdet beräknas av din databas, inte av Django.</p>\n<p>För enkelhetens skull har varje modell en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a> med namnet <code class=\"docutils literal notranslate\">id</code> som standard om du inte uttryckligen anger <code class=\"docutils literal notranslate\">primary_key=True</code> på ett fält i din modell. Se dokumentationen för <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a> för mer information.</p>\n<section id=\"the-pk-property\">\n<h4>Egenskapen ”pk<a class=\"heading-anchor\" href=\"#the-pk-property\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.pk\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">pk</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.pk\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Oavsett om du definierar ett primärnyckelfält själv, eller låter Django leverera ett åt dig, kommer varje modell att ha en egenskap som heter <code class=\"docutils literal notranslate\">pk</code>. Den beter sig som ett vanligt attribut på modellen, men är faktiskt ett alias för vilket fält eller fält som utgör primärnyckeln för modellen. Du kan läsa och ställa in det här värdet, precis som du skulle göra för vilket annat attribut som helst, och det kommer att uppdatera rätt fält i modellen.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.2\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>Stöd för att primärnyckeln kan bestå av flera fält har lagts till via <code class=\"docutils literal notranslate\">CompositePrimaryKey</code>.</p>\n</aside>\n</section>\n<section id=\"explicitly-specifying-auto-primary-key-values\">\n<h4>Explicit specificering av värden för auto-primary-key<a class=\"heading-anchor\" href=\"#explicitly-specifying-auto-primary-key-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om en modell har en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\">AutoField</code></a> men du vill definiera ett nytt objekts ID uttryckligen när du sparar, definierar du det uttryckligen innan du sparar, i stället för att förlita dig på den automatiska tilldelningen av ID:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>b3 <span class=\"o\">=</span> Blog<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;Thoughts on cheese.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b3<span class=\"o\">.</span>id  <span class=\"c1\"># Returns 3.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b3<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b3<span class=\"o\">.</span>id  <span class=\"c1\"># Returns 3.</span>\n</code></pre></div>\n<p>Om du tilldelar auto-primary-key-värden manuellt, se till att inte använda ett redan existerande primary-key-värde! Om du skapar ett nytt objekt med ett explicit primary-key-värde som redan finns i databasen, kommer Django att anta att du ändrar den befintliga posten snarare än att skapa en ny.</p>\n<p>Med tanke på bloggexemplet ”Cheddar Talk” ovan skulle detta exempel åsidosätta den föregående posten i databasen:</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>b4 <span class=\"o\">=</span> Blog<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;Not Cheddar&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;Anything but cheese.&quot;</span><span class=\"p\">)</span>\nb4<span class=\"o\">.</span>save<span class=\"p\">()</span>  <span class=\"c1\"># Overrides the previous blog with ID=3!</span>\n</code></pre></div>\n<p>Se <a class=\"reference internal\" href=\"#how-django-knows-to-update-vs-insert\">Hur Django vet att UPDATE vs. INSERT</a>, nedan, för anledningen till att detta händer.</p>\n<p>Att uttryckligen ange värden för automatisk primärnyckel är mest användbart för masslagring av objekt, när du är säker på att du inte kommer att få kollisioner mellan primärnycklar.</p>\n<p>Om du använder PostgreSQL kan sekvensen som är associerad med den primära nyckeln behöva uppdateras; se <a class=\"reference internal\" href=\"/sv/5.2/ref/databases/#manually-specified-autoincrement-pk\"><span class=\"std std-ref\">Manuellt specificerade värden för primärnycklar med automatisk inkrementering</span></a>.</p>\n</section>\n</section>\n<section id=\"what-happens-when-you-save\">\n<h3>Vad händer när du sparar?<a class=\"heading-anchor\" href=\"#what-happens-when-you-save\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du sparar ett objekt utför Django följande steg:</p>\n<ol class=\"arabic\">\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Sänd en signal före sparande <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\">pre_save</code></a>-signalen skickas, vilket gör att alla funktioner som lyssnar på den signalen kan göra något.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Varje fälts metod <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.pre_save\" title=\"django.db.models.Field.pre_save\"><code class=\"xref py py-meth docutils literal notranslate\">pre_save()</code></a> anropas för att utföra alla automatiserade datamodifieringar som behövs. Till exempel: åsidosätter datum-/tidsfälten <code class=\"docutils literal notranslate\">pre_save()</code> för att implementera <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.DateField.auto_now_add\" title=\"django.db.models.DateField.auto_now_add\"><code class=\"xref py py-attr docutils literal notranslate\">auto_now_add</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.DateField.auto_now\" title=\"django.db.models.DateField.auto_now\"><code class=\"xref py py-attr docutils literal notranslate\">auto_now</code></a>.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Varje fälts <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.get_db_prep_save\" title=\"django.db.models.Field.get_db_prep_save\"><code class=\"xref py py-meth docutils literal notranslate\">get_db_prep_save()</code></a>-metod ombeds att tillhandahålla sitt aktuella värde i en datatyp som kan skrivas till databasen.</p>\n<p>De flesta fält kräver ingen dataförberedelse. Enkla datatyper, t.ex. heltal och strängar, är ”skrivklara” som Python-objekt. Mer komplexa datatyper kräver dock ofta viss modifiering.</p>\n<p>Till exempel: använder <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\">DateField</code></a>-fält ett Python-objekt med <code class=\"docutils literal notranslate\">datetime</code> för att lagra data. Databaser lagrar inte <code class=\"docutils literal notranslate\">datetime</code>-objekt, så fältvärdet måste konverteras till en ISO-kompatibel datumsträng för att infogas i databasen.</p>\n</li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>De förbehandlade, förberedda uppgifterna sammanställs till en SQL-sats för inmatning i databasen.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">**</span></a>Skicka en post-save-signal <a class=\"reference internal\" href=\"/sv/5.2/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\">post_save</code></a>-signalen skickas, vilket gör att alla funktioner som lyssnar på den signalen kan göra något.</p></li>\n</ol>\n</section>\n<section id=\"how-django-knows-to-update-vs-insert\">\n<h3>Hur Django vet att UPDATE vs. INSERT<a class=\"heading-anchor\" href=\"#how-django-knows-to-update-vs-insert\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kanske har märkt att Djangos databasobjekt använder samma <code class=\"docutils literal notranslate\">save()</code>-metod för att skapa och ändra objekt. Django abstraherar behovet av att använda <code class=\"docutils literal notranslate\">INSERT</code> eller <code class=\"docutils literal notranslate\">UPDATE</code> SQL-satser. När du anropar <code class=\"docutils literal notranslate\">save()</code> och objektets primära nyckelattribut <strong>inte</strong> definierar en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\">default</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.db_default\" title=\"django.db.models.Field.db_default\"><code class=\"xref py py-attr docutils literal notranslate\">db_default</code></a>, följer Django denna algoritm:</p>\n<ul class=\"simple\">\n<li><p>Om objektets primära nyckelattribut är inställt på något annat än <code class=\"docutils literal notranslate\">None</code>, utför Django en <code class=\"docutils literal notranslate\">UPDATE</code>.</p></li>\n<li><p>Om objektets primärnyckelattribut <em>inte</em> är inställt eller om <code class=\"docutils literal notranslate\">UPDATE</code> inte uppdaterade någonting (t.ex. om primärnyckeln är inställd på ett värde som inte finns i databasen), utför Django en <code class=\"docutils literal notranslate\">INSERT</code>.</p></li>\n</ul>\n<p>Om objektets primära nyckelattribut definierar en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\">default</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.db_default\" title=\"django.db.models.Field.db_default\"><code class=\"xref py py-attr docutils literal notranslate\">db_default</code></a> så utför Django en <code class=\"docutils literal notranslate\">UPDATE</code> om det är en befintlig modellinstans och den primära nyckeln är inställd på ett värde som finns i databasen. Annars utför Django en <code class=\"docutils literal notranslate\">INSERT</code>.</p>\n<p>Det enda problemet här är att du bör vara försiktig så att du inte uttryckligen anger ett primärnyckelvärde när du sparar nya objekt, om du inte kan garantera att primärnyckelvärdet är oanvänt. För mer information om denna nyans, se <a class=\"reference internal\" href=\"#explicitly-specifying-auto-primary-key-values\">Explicit specificering av auto-primary-key-värden</a> ovan och <a class=\"reference internal\" href=\"#forcing-an-insert-or-update\">Tvinga fram en INSERT eller UPDATE</a> nedan.</p>\n<p>I Django 1.5 och tidigare gjorde Django en <code class=\"docutils literal notranslate\">SELECT</code> när primärnyckelattributet var inställt. Om <code class=\"docutils literal notranslate\">SELECT</code> hittade en rad, gjorde Django en <code class=\"docutils literal notranslate\">UPDATE</code>, annars gjorde den en <code class=\"docutils literal notranslate\">INSERT</code>. Den gamla algoritmen resulterar i ytterligare en fråga i fallet <code class=\"docutils literal notranslate\">UPDATE</code>. Det finns några sällsynta fall där databasen inte rapporterar att en rad uppdaterades även om databasen innehåller en rad för objektets primära nyckelvärde. Ett exempel är PostgreSQL <code class=\"docutils literal notranslate\">ON UPDATE</code> trigger som returnerar <code class=\"docutils literal notranslate\">NULL</code>. I sådana fall är det möjligt att återgå till den gamla algoritmen genom att ställa in alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/options/#django.db.models.Options.select_on_save\" title=\"django.db.models.Options.select_on_save\"><code class=\"xref py py-attr docutils literal notranslate\">select_on_save</code></a> till <code class=\"docutils literal notranslate\">True</code>.</p>\n<section id=\"forcing-an-insert-or-update\">\n<span id=\"ref-models-force-insert\"></span><h4>Tvinga fram en INSERT eller UPDATE<a class=\"heading-anchor\" href=\"#forcing-an-insert-or-update\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Under vissa sällsynta omständigheter är det nödvändigt att kunna tvinga <a class=\"reference internal\" href=\"#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>-metoden att utföra en SQL <code class=\"docutils literal notranslate\">INSERT</code> och inte falla tillbaka till att göra en <code class=\"docutils literal notranslate\">UPDATE</code>. Eller vice versa: uppdatera, om möjligt, men inte infoga en ny rad. I dessa fall kan du skicka parametrarna <code class=\"docutils literal notranslate\">force_insert=True</code> eller <code class=\"docutils literal notranslate\">force_update=True</code> till metoden <a class=\"reference internal\" href=\"#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>. Att skicka båda parametrarna är ett fel: du kan inte både infoga <em>och</em> uppdatera på samma gång!</p>\n<p>När du använder <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/#multi-table-inheritance\"><span class=\"std std-ref\">multi-table inheritance</span></a> är det också möjligt att tillhandahålla en tupel av överordnade klasser till <code class=\"docutils literal notranslate\">force_insert</code> för att tvinga fram <code class=\"docutils literal notranslate\">INSERT</code>-satser för varje bas. 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>Restaurant<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;Bob&#39;s Cafe&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>save<span class=\"p\">(</span>force_insert<span class=\"o\">=</span><span class=\"p\">(</span>Place<span class=\"p\">,))</span>\n\nRestaurant<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;Bob&#39;s Cafe&quot;</span><span class=\"p\">,</span> rating<span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span><span class=\"o\">.</span>save<span class=\"p\">(</span>force_insert<span class=\"o\">=</span><span class=\"p\">(</span>Place<span class=\"p\">,</span> Rating<span class=\"p\">))</span>\n</code></pre></div>\n<p>Du kan skicka <code class=\"docutils literal notranslate\">force_insert=(models.Model,)</code> för att tvinga fram en <code class=\"docutils literal notranslate\">INSERT</code>-sats för alla föräldrar. Som standard tvingar <code class=\"docutils literal notranslate\">force_insert=True</code> bara fram en ny rad för den aktuella modellen.</p>\n<p>Det bör vara mycket sällsynt att du behöver använda dessa parametrar. Django kommer nästan alltid att göra det rätta och att försöka åsidosätta det kommer att leda till fel som är svåra att spåra. Denna funktion är endast avsedd för avancerad användning.</p>\n<p>Om du använder <code class=\"docutils literal notranslate\">update_fields</code> kommer du att tvinga fram en uppdatering på samma sätt som <code class=\"docutils literal notranslate\">force_update</code>.</p>\n</section>\n</section>\n<section id=\"updating-attributes-based-on-existing-fields\">\n<span id=\"ref-models-field-updates-using-f-expressions\"></span><h3>Uppdatering av attribut baserat på befintliga fält<a class=\"heading-anchor\" href=\"#updating-attributes-based-on-existing-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ibland behöver du utföra en enkel aritmetisk uppgift på ett fält, till exempel att öka eller minska det aktuella värdet. Ett sätt att uppnå detta är att göra aritmetiken i Python som:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>product <span class=\"o\">=</span> Product<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Venezuelan Beaver Cheese&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>product<span class=\"o\">.</span>number_sold <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>product<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Om det gamla värdet för <code class=\"docutils literal notranslate\">number_sold</code> som hämtades från databasen var 10, kommer värdet 11 att skrivas tillbaka till databasen.</p>\n<p>Processen kan göras robust, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#avoiding-race-conditions-using-f\"><span class=\"std std-ref\">undvika ett tävlingstillstånd</span></a>, samt något snabbare genom att uttrycka uppdateringen relativt det ursprungliga fältvärdet, snarare än som en explicit tilldelning av ett nytt värde. Django tillhandahåller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\">F expressions</code></a> för att utföra denna typ av relativ uppdatering. Med hjälp av <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\">F expressions</code></a> uttrycks det föregående exemplet som:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n<span class=\"gp\">&gt;&gt;&gt; </span>product <span class=\"o\">=</span> Product<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Venezuelan Beaver Cheese&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>product<span class=\"o\">.</span>number_sold <span class=\"o\">=</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;number_sold&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>product<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>För mer information, se dokumentationen om <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\">F uttryck</code></a> och deras <a class=\"reference internal\" href=\"/sv/5.2/topics/db/queries/#topics-db-queries-update\"><span class=\"std std-ref\">användning i uppdateringsfrågor</span></a>.</p>\n</section>\n<section id=\"specifying-which-fields-to-save\">\n<span id=\"ref-models-update-fields\"></span><h3>Ange vilka fält som ska sparas<a class=\"heading-anchor\" href=\"#specifying-which-fields-to-save\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om <code class=\"docutils literal notranslate\">save()</code> får en lista med fältnamn i nyckelordsargumentet <code class=\"docutils literal notranslate\">update_fields</code>, kommer endast de fält som anges i listan att uppdateras. Detta kan vara önskvärt om du bara vill uppdatera ett eller ett fåtal fält på ett objekt. Det finns en liten prestandafördel med att förhindra att alla modellfält uppdateras i databasen. 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>product<span class=\"o\">.</span>name <span class=\"o\">=</span> <span class=\"s2\">&quot;Name changed again&quot;</span>\nproduct<span class=\"o\">.</span>save<span class=\"p\">(</span>update_fields<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>Argumentet <code class=\"docutils literal notranslate\">update_fields</code> kan vara en iterabel som innehåller strängar. En tom <code class=\"docutils literal notranslate\">update_fields</code> iterabel hoppar över sparandet. Ett värde av <code class=\"docutils literal notranslate\">None</code> kommer att utföra en uppdatering på alla fält.</p>\n<p>Om du anger <code class=\"docutils literal notranslate\">update_fields</code> kommer du att tvinga fram en uppdatering.</p>\n<p>När du sparar en modell som hämtats genom uppskjuten modellbelastning (<a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\">only()</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\">defer()</code></a>) kommer endast de fält som laddats från DB att uppdateras. I själva verket finns det en automatisk <code class=\"docutils literal notranslate\">update_fields</code> i det här fallet. Om du tilldelar eller ändrar något uppskjutet fältvärde läggs fältet till bland de uppdaterade fälten.</p>\n<aside class=\"admonition-field-pre-save-and-update-fields admonition\" role=\"note\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\">Field.pre_save()</code> och <code class=\"docutils literal notranslate\">update_fields</code></p>\n<p>Om <code class=\"docutils literal notranslate\">update_fields</code> skickas in anropas endast <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.pre_save\" title=\"django.db.models.Field.pre_save\"><code class=\"xref py py-meth docutils literal notranslate\">pre_save()</code></a>-metoderna i <code class=\"docutils literal notranslate\">update_fields</code>. Detta innebär till exempel att datum-/tidsfält med <code class=\"docutils literal notranslate\">auto_now=True</code> inte kommer att uppdateras om de inte ingår i <code class=\"docutils literal notranslate\">update_fields</code>.</p>\n</aside>\n</section>\n</section>\n<section id=\"deleting-objects\">\n<h2>Radering av objekt<a class=\"heading-anchor\" href=\"#deleting-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.delete\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">delete</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">using<span class=\"o\">=</span><span class=\"default_value\">DEFAULT_DB_ALIAS</span></em>, <em class=\"sig-param\">keep_parents<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.adelete\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">adelete</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">using<span class=\"o\">=</span><span class=\"default_value\">DEFAULT_DB_ALIAS</span></em>, <em class=\"sig-param\">keep_parents<span class=\"o\">=</span><span class=\"default_value\">False</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.adelete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\">adelete()</code></p>\n<p>Utfärdar en SQL <code class=\"docutils literal notranslate\">DELETE</code> för objektet. Detta raderar endast objektet i databasen; Python-instansen kommer fortfarande att existera och kommer fortfarande att ha data i sina fält, med undantag för primärnyckeln som är inställd på <code class=\"docutils literal notranslate\">None</code>. Denna metod returnerar antalet objekt som raderats och en ordbok med antalet raderingar per objekttyp.</p>\n<p>Mer information, bland annat om hur du tar bort objekt i bulk, finns i <a class=\"reference internal\" href=\"/sv/5.2/topics/db/queries/#topics-db-queries-delete\"><span class=\"std std-ref\">Radering av objekt</span></a>.</p>\n<p>Om du vill ha ett anpassat borttagningsbeteende kan du åsidosätta metoden <code class=\"docutils literal notranslate\">delete()</code>. Se <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/#overriding-model-methods\"><span class=\"std std-ref\">Åsidosätta fördefinierade modellmetoder</span></a> för mer information.</p>\n<p>Ibland med <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/#multi-table-inheritance\"><span class=\"std std-ref\">multi-table inheritance</span></a> kan du vilja radera endast en underordnad modells data. Om du anger <code class=\"docutils literal notranslate\">keep_parents=True</code> behålls föräldramodellens data.</p>\n</section>\n<section id=\"pickling-objects\">\n<h2>Betning av föremål<a class=\"heading-anchor\" href=\"#pickling-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du <a class=\"reference external\" href=\"https://docs.python.org/3/library/pickle.html#module-pickle\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">pickle</code></a> en modell, är dess nuvarande tillstånd pickled. När du plockar upp den kommer den att innehålla modellinstansen vid den tidpunkt då den plockades upp, snarare än de data som för närvarande finns i databasen.</p>\n<aside class=\"admonition-you-can-t-share-pickles-between-versions admonition\" role=\"note\">\n<p class=\"admonition-title\">Du kan inte dela pickles mellan versioner</p>\n<p>Pickles av modeller är endast giltiga för den version av Django som användes för att generera dem. Om du genererar en pickle med Django version N, finns det ingen garanti för att pickle kommer att vara läsbar med Django version N+1. Pickles bör inte användas som en del av en långsiktig arkiveringsstrategi.</p>\n<p>Eftersom kompatibilitetsfel i pickle kan vara svåra att diagnostisera, t.ex. objekt som är korrupta i tysthet, skapas en <code class=\"docutils literal notranslate\">RuntimeWarning</code> när du försöker plocka upp en modell i en Django-version som är annorlunda än den där den plockades upp.</p>\n</aside>\n</section>\n<section id=\"other-model-instance-methods\">\n<span id=\"model-instance-methods\"></span><h2>Andra metoder för modellinstans<a class=\"heading-anchor\" href=\"#other-model-instance-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Några objektmetoder har speciella syften.</p>\n<section id=\"str\">\n<h3><code class=\"docutils literal notranslate\">__str__()</code><a class=\"heading-anchor\" href=\"#str\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.__str__\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">__str__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.__str__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Metoden <code class=\"docutils literal notranslate\">__str__()</code> anropas när du anropar <code class=\"docutils literal notranslate\">str()</code> på ett objekt. Django använder <code class=\"docutils literal notranslate\">str(obj)</code> på ett antal ställen. Framför allt för att visa ett objekt på Django-adminsidan och som det värde som infogas i en mall när den visar ett objekt. Därför bör du alltid returnera en trevlig, mänskligt läsbar representation av modellen från metoden <code class=\"docutils literal notranslate\">__str__()</code>.</p>\n<p>Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    first_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    last_name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span>first_name<span class=\"si\">}</span><span class=\"s2\"> </span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span>last_name<span class=\"si\">}</span><span class=\"s2\">&quot;</span>\n</code></pre></div>\n</section>\n<section id=\"eq\">\n<h3><code class=\"docutils literal notranslate\">__eq__()</code><a class=\"heading-anchor\" href=\"#eq\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.__eq__\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">__eq__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.__eq__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Metoden equality är definierad så att instanser med samma primära nyckelvärde och samma konkreta klass anses vara lika, förutom att instanser med ett primärt nyckelvärde på <code class=\"docutils literal notranslate\">None</code> inte är lika med något annat än sig själva. För proxymodeller definieras den konkreta klassen som modellens första icke-proxyförälder; för alla andra modeller är det helt enkelt modellens klass.</p>\n<p>Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyModel</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"nb\">id</span> <span class=\"o\">=</span> models<span class=\"o\">.</span>AutoField<span class=\"p\">(</span>primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MyProxyModel</span><span class=\"p\">(</span>MyModel<span class=\"p\">):</span>\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        proxy <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MultitableInherited</span><span class=\"p\">(</span>MyModel<span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"c1\"># Primary keys compared</span>\nMyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">==</span> MyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\nMyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">!=</span> MyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"c1\"># Primary keys are None</span>\nMyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"o\">!=</span> MyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"c1\"># Same instance</span>\ninstance <span class=\"o\">=</span> MyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\ninstance <span class=\"o\">==</span> instance\n<span class=\"c1\"># Proxy model</span>\nMyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">==</span> MyProxyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"c1\"># Multi-table inheritance</span>\nMyModel<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">!=</span> MultitableInherited<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"hash\">\n<h3><code class=\"docutils literal notranslate\">__hash__()</code><a class=\"heading-anchor\" href=\"#hash\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.__hash__\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">__hash__</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.__hash__\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Metoden <code class=\"docutils literal notranslate\">__hash__()</code> baseras på instansens primärnyckelvärde. Det är i praktiken <code class=\"docutils literal notranslate\">hash(obj.pk)</code>. Om instansen inte har ett primärt nyckelvärde kommer ett <code class=\"docutils literal notranslate\">TypeError</code> att uppstå (annars skulle <code class=\"docutils literal notranslate\">__hash__()</code>-metoden returnera olika värden före och efter att instansen sparas, men att ändra <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#object.__hash__\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\">__hash__()</code></a>-värdet för en instans är förbjudet i Python.</p>\n</section>\n<section id=\"get-absolute-url\">\n<h3><code class=\"docutils literal notranslate\">get_absolute_url()</code><a class=\"heading-anchor\" href=\"#get-absolute-url\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.get_absolute_url\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">get_absolute_url</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.get_absolute_url\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Definiera en <code class=\"docutils literal notranslate\">get_absolute_url()</code>-metod för att tala om för Django hur man beräknar den kanoniska URL:en för ett objekt. För anropare bör denna metod se ut att returnera en sträng som kan användas för att hänvisa till objektet via HTTP.</p>\n<p>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=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;/people/</span><span class=\"si\">%i</span><span class=\"s2\">/&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>id\n</code></pre></div>\n<p>Även om den här koden är korrekt och enkel, är det kanske inte det mest portabla sättet att skriva den här typen av metod. Funktionen <a class=\"reference internal\" href=\"/sv/5.2/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\">reverse()</code></a> är vanligtvis det bästa tillvägagångssättet.</p>\n<p>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=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> reverse\n\n    <span class=\"k\">return</span> reverse<span class=\"p\">(</span><span class=\"s2\">&quot;people-detail&quot;</span><span class=\"p\">,</span> kwargs<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span>pk<span class=\"p\">})</span>\n</code></pre></div>\n<p>En plats där Django använder <code class=\"docutils literal notranslate\">get_absolute_url()</code> är i admin-appen. Om ett objekt definierar den här metoden kommer objektredigeringssidan att ha en ”Visa på webbplatsen”-länk som hoppar direkt till objektets offentliga vy, som ges av <code class=\"docutils literal notranslate\">get_absolute_url()</code>.</p>\n<p>På samma sätt använder ett par andra delar av Django, till exempel <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/syndication/\"><span class=\"doc\">syndication feed framework</span></a>, <code class=\"docutils literal notranslate\">get_absolute_url()</code> när det är definierat. Om det är vettigt för din modells instanser att var och en har en unik URL, bör du definiera <code class=\"docutils literal notranslate\">get_absolute_url()</code>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Du bör undvika att bygga URL:en från obekräftad användarinmatning, för att minska risken för förgiftning av länkar eller omdirigeringar:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;/</span><span class=\"si\">%s</span><span class=\"s2\">/&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\">self.name</code> är <code class=\"docutils literal notranslate\">'/example.com'</code> returneras <code class=\"docutils literal notranslate\">'//example.com/'</code>, vilket i sin tur är en giltig schemarelativ URL men inte den förväntade <code class=\"docutils literal notranslate\">'/%2Fexample.com/'</code>.</p>\n</aside>\n<p>Det är god praxis att använda <code class=\"docutils literal notranslate\">get_absolute_url()</code> i mallar, istället för att hårdkoda objektens URL:er. Till exempel: är den här mallkoden dålig:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cm\">&lt;!-- BAD template code. Avoid! --&gt;</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;/people/</span><span class=\"cp\">{{</span> <span class=\"nv\">object.id</span> <span class=\"cp\">}}</span><span class=\"s\">/&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">object.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Den här mallkoden är mycket bättre:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">a</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">object.get_absolute_url</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">object.name</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">a</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>Logiken här är att om du ändrar URL-strukturen för dina objekt, även för något litet som att korrigera ett stavfel, vill du inte behöva spåra varje plats där URL kan skapas. Specificera den en gång, i <code class=\"docutils literal notranslate\">get_absolute_url()</code> och låt all din övriga kod anropa den enda platsen.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Den sträng du returnerar från <code class=\"docutils literal notranslate\">get_absolute_url()</code> <strong>måste</strong> endast innehålla ASCII-tecken (krävs enligt URI-specifikationen, <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc3986.html#section-2\"><strong>RFC 3986 Section 2</strong></a>) och vara URL-kodad, om nödvändigt.</p>\n<p>Kod och mallar som anropar <code class=\"docutils literal notranslate\">get_absolute_url()</code> bör kunna använda resultatet direkt utan någon ytterligare bearbetning. Du kanske vill använda funktionen <code class=\"docutils literal notranslate\">django.utils.encoding.iri_to_uri()</code> för att hjälpa till med detta om du använder strängar som innehåller tecken utanför ASCII-området.</p>\n</aside>\n</section>\n</section>\n<section id=\"extra-instance-methods\">\n<h2>Extra instansmetoder<a class=\"heading-anchor\" href=\"#extra-instance-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Förutom <a class=\"reference internal\" href=\"#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>, <a class=\"reference internal\" href=\"#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>, kan ett modellobjekt ha några av följande metoder:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.get_FOO_display\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">get_FOO_display</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.get_FOO_display\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>För varje fält som har <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\">choices</code></a> inställt, kommer objektet att ha en <code class=\"docutils literal notranslate\">get_FOO_display()</code> metod, där <code class=\"docutils literal notranslate\">FOO</code> är namnet på fältet. Denna metod returnerar det ”mänskligt läsbara” värdet för fältet.</p>\n<p>Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Person</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    SHIRT_SIZES <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;S&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Small&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;M&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Medium&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;L&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Large&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n    shirt_size <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> choices<span class=\"o\">=</span>SHIRT_SIZES<span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>p <span class=\"o\">=</span> Person<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred Flintstone&quot;</span><span class=\"p\">,</span> shirt_size<span class=\"o\">=</span><span class=\"s2\">&quot;L&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>shirt_size\n<span class=\"go\">&#39;L&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>p<span class=\"o\">.</span>get_shirt_size_display<span class=\"p\">()</span>\n<span class=\"go\">&#39;Large&#39;</span>\n</code></pre></div>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.get_next_by_FOO\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">get_next_by_FOO</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.get_next_by_FOO\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model.get_previous_by_FOO\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">get_previous_by_FOO</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model.get_previous_by_FOO\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>För varje <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\">DateField</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a> som inte har <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null=True</code></a>, kommer objektet att ha <code class=\"docutils literal notranslate\">get_next_by_FOO()</code> och <code class=\"docutils literal notranslate\">get_previous_by_FOO()</code> metoder, där <code class=\"docutils literal notranslate\">FOO</code> är namnet på fältet. Detta returnerar nästa och föregående objekt med avseende på datumfältet och ger upphov till ett <a class=\"reference internal\" href=\"/sv/5.2/ref/models/class/#django.db.models.Model.DoesNotExist\" title=\"django.db.models.Model.DoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\">DoesNotExist</code></a>-undantag när det är lämpligt.</p>\n<p>Båda dessa metoder kommer att utföra sina frågor med hjälp av standardhanteraren för modellen. Om du behöver emulera filtrering som används av en anpassad hanterare, eller vill utföra enstaka anpassad filtrering, accepterar båda metoderna också valfria nyckelordsargument, som bör vara i det format som beskrivs i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">Field lookups</span></a>.</p>\n<p>Observera att om datumvärdena är identiska kommer dessa metoder att använda primärnyckeln som utslagsgivande. Detta garanterar att inga poster hoppas över eller dupliceras. Det innebär också att du inte kan använda dessa metoder på osparade objekt.</p>\n<aside class=\"admonition-overriding-extra-instance-methods admonition\" role=\"note\">\n<p class=\"admonition-title\">Åsidosättande av extra instansmetoder</p>\n<p>I de flesta fall bör åsidosättande eller arv av <code class=\"docutils literal notranslate\">get_FOO_display()</code>, <code class=\"docutils literal notranslate\">get_next_by_FOO()</code> och <code class=\"docutils literal notranslate\">get_previous_by_FOO()</code> fungera som förväntat. Eftersom de läggs till av metaklassen är det dock inte praktiskt möjligt att ta hänsyn till alla möjliga arvsstrukturer. I mer komplexa fall bör du åsidosätta <code class=\"docutils literal notranslate\">Field.contribute_to_class()</code> för att ställa in de metoder du behöver.</p>\n</aside>\n</section>\n<section id=\"other-attributes\">\n<h2>Övriga attribut<a class=\"heading-anchor\" href=\"#other-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"state\">\n<h3><code class=\"docutils literal notranslate\">_stat</code><a class=\"heading-anchor\" href=\"#state\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model._state\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">_state</span><a class=\"heading-anchor\" href=\"#django.db.models.Model._state\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Attributet <code class=\"docutils literal notranslate\">_state</code> hänvisar till ett <code class=\"docutils literal notranslate\">ModelState</code>-objekt som spårar modellinstansens livscykel.</p>\n<p>Objektet <code class=\"docutils literal notranslate\">ModelState</code> har två attribut: ”Adding”, en flagga som är ”True” om modellen ännu inte har sparats i databasen, och ”db”, en sträng som hänvisar till det databasalias som instansen laddades från eller sparades till.</p>\n<p>Nyinstallerade instanser har <code class=\"docutils literal notranslate\">adding=True</code> och <code class=\"docutils literal notranslate\">db=None</code>, eftersom de ännu inte har sparats. Instanser som hämtas från en <code class=\"docutils literal notranslate\">QuerySet</code> kommer att ha <code class=\"docutils literal notranslate\">adding=False</code> och <code class=\"docutils literal notranslate\">db</code> satt till aliaset för den associerade databasen.</p>\n</dd></dl>\n\n</section>\n<section id=\"is-pk-set\">\n<h3><code class=\"docutils literal notranslate\">_is_pk_set()</code><a class=\"heading-anchor\" href=\"#is-pk-set\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Model._is_pk_set\">\n<span class=\"sig-prename descclassname\">Model.</span><span class=\"sig-name descname\">_is_pk_set</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Model._is_pk_set\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<aside class=\"version-note version-added\" data-version=\"5.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>Metoden <code class=\"docutils literal notranslate\">_is_pk_set()</code> returnerar om modellinstansens <code class=\"docutils literal notranslate\">pk</code> är inställd. Den abstraherar modellens definition av primärnyckeln och säkerställer ett konsekvent beteende oavsett den specifika konfigurationen av <code class=\"docutils literal notranslate\">pk</code>.</p>\n</section>\n</section>","rootId":"model-instance-reference","toc":[{"title":"Skapa objekt","anchor":"creating-objects","children":[{"title":"Anpassning av modellbelastning","anchor":"customizing-model-loading","children":[]}]},{"title":"Uppdatering av objekt från databas","anchor":"refreshing-objects-from-database","children":[]},{"title":"Validering av objekt","anchor":"validating-objects","children":[]},{"title":"Spara objekt","anchor":"saving-objects","children":[{"title":"Automatiskt ökande primärnycklar","anchor":"auto-incrementing-primary-keys","children":[{"title":"Egenskapen ”pk","anchor":"the-pk-property","children":[]},{"title":"Explicit specificering av värden för auto-primary-key","anchor":"explicitly-specifying-auto-primary-key-values","children":[]}]},{"title":"Vad händer när du sparar?","anchor":"what-happens-when-you-save","children":[]},{"title":"Hur Django vet att UPDATE vs. INSERT","anchor":"how-django-knows-to-update-vs-insert","children":[{"title":"Tvinga fram en INSERT eller UPDATE","anchor":"forcing-an-insert-or-update","children":[]}]},{"title":"Uppdatering av attribut baserat på befintliga fält","anchor":"updating-attributes-based-on-existing-fields","children":[]},{"title":"Ange vilka fält som ska sparas","anchor":"specifying-which-fields-to-save","children":[]}]},{"title":"Radering av objekt","anchor":"deleting-objects","children":[]},{"title":"Betning av föremål","anchor":"pickling-objects","children":[]},{"title":"Andra metoder för modellinstans","anchor":"other-model-instance-methods","children":[{"title":"__str__()","anchor":"str","children":[]},{"title":"__eq__()","anchor":"eq","children":[]},{"title":"__hash__()","anchor":"hash","children":[]},{"title":"get_absolute_url()","anchor":"get-absolute-url","children":[]}]},{"title":"Extra instansmetoder","anchor":"extra-instance-methods","children":[]},{"title":"Övriga attribut","anchor":"other-attributes","children":[{"title":"_stat","anchor":"state","children":[]},{"title":"_is_pk_set()","anchor":"is-pk-set","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/5.2/ref/"},{"docname":"ref/models/index","title":"Modeller","url":"/sv/5.2/ref/models/"}],"prev":{"docname":"ref/models/options","title":"Alternativ för modell Meta","url":"/sv/5.2/ref/models/options/"},"next":{"docname":"ref/models/querysets","title":"aPI-referens för QuerySet","url":"/sv/5.2/ref/models/querysets/"},"formats":{"html":"/sv/5.2/ref/models/instances/","markdown":"/sv/5.2/ref/models/instances.md","json":"/sv/5.2/ref/models/instances.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/models/instances.txt","official":"https://docs.djangoproject.com/sv/5.2/ref/models/instances/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}