{"title":"Referens till modellinstans","version":"6.1","locale":"sv","docname":"ref/models/instances","url":"/sv/6.1/ref/models/instances/","canonical":"https://djangodocs.dev/sv/6.1/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 läsa…","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\"><span class=\"pre\">Model</span></code>. Det bygger på det material som presenteras i guiderna <a class=\"reference internal\" href=\"/sv/6.1/topics/db/models/\"><span class=\"doc\">model</span></a> och <a class=\"reference internal\" href=\"/sv/6.1/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/6.1/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/6.1/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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Model</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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>The keyword arguments are the names of the fields you’ve defined on your model.\nNote that instantiating a model in no way touches your database; for that, you\nneed to <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\"><span class=\"pre\">save()</span></code></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>You may be tempted to customize the model by overriding the <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code>\nmethod. If you do so, however, take care not to change the calling\nsignature as any change may prevent the model instance from being saved.\nAdditionally, referring to model fields within <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> may potentially\nresult in infinite recursion errors in some circumstances. Rather than\noverriding <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code>, try using one of these approaches:</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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"p\">):</span>\n        <span class=\"n\">book</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">title</span><span class=\"p\">)</span>\n        <span class=\"c1\"># do something with the book</span>\n        <span class=\"k\">return</span> <span class=\"n\">book</span>\n\n\n<span class=\"n\">book</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">create</span><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=\"w\"> </span><span class=\"nc\">BookManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create_book</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"p\">):</span>\n        <span class=\"n\">book</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">title</span><span class=\"p\">)</span>\n        <span class=\"c1\"># do something with the book</span>\n        <span class=\"k\">return</span> <span class=\"n\">book</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">BookManager</span><span class=\"p\">()</span>\n\n\n<span class=\"n\">book</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create_book</span><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<aside class=\"admonition-setting-attributes-does-not-convert-types admonition\">\n<p class=\"admonition-title\">Setting attributes does not convert types</p>\n<p>Setting a model attribute does not convert the value to the field’s Python\ntype. That conversion happens when the model is <a class=\"reference internal\" href=\"#validating-objects\"><span class=\"std std-ref\">validated</span></a>. Although a field assigned a value of a different\ntype (for example, a string assigned to a\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.UUIDField\" title=\"django.db.models.UUIDField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUIDField</span></code></a>) may be converted when\n<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\"><span class=\"pre\">save()</span></code></a> executes a query, the in-memory instance will keep the\noriginal value until it is <a class=\"reference internal\" href=\"#refreshing-objects\"><span class=\"std std-ref\">reloaded</span></a>.</p>\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\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">from_db</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">db</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_names</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">values</span></span></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\"><span class=\"pre\">from_db()</span></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\"><span class=\"pre\">db</span></code> innehåller databasaliaset för den databas som modellen laddas från, <code class=\"docutils literal notranslate\"><span class=\"pre\">field_names</span></code> innehåller namnen på alla inlästa fält och <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> innehåller de inlästa värdena för varje fält i <code class=\"docutils literal notranslate\"><span class=\"pre\">field_names</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">field_names</span></code> är i samma ordning som <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code>. Om alla modellens fält finns med, kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> garanterat att finnas i den ordning som <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> förväntar sig dem. Det vill säga, instansen kan skapas av <code class=\"docutils literal notranslate\"><span class=\"pre\">cls(*values)</span></code>. Om några fält är uppskjutna kommer de inte att visas i <code class=\"docutils literal notranslate\"><span class=\"pre\">field_names</span></code>. Tilldela i så fall ett värde av <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.DEFERRED</span></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\"><span class=\"pre\">from_db()</span></code> ställa in flaggorna <code class=\"docutils literal notranslate\"><span class=\"pre\">adding</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">db</span></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\"><span class=\"pre\">_state</span></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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DEFERRED</span>\n\n\n<span class=\"nd\">@classmethod</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">from_db</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">db</span><span class=\"p\">,</span> <span class=\"n\">field_names</span><span class=\"p\">,</span> <span class=\"n\">values</span><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><span class=\"n\">values</span><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><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">concrete_fields</span><span class=\"p\">):</span>\n        <span class=\"n\">values</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">values</span><span class=\"p\">)</span>\n        <span class=\"n\">values</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()</span>\n        <span class=\"n\">values</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">values</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">attname</span> <span class=\"ow\">in</span> <span class=\"n\">field_names</span> <span class=\"k\">else</span> <span class=\"n\">DEFERRED</span>\n            <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">concrete_fields</span>\n        <span class=\"p\">]</span>\n    <span class=\"n\">instance</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">values</span><span class=\"p\">)</span>\n    <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">db</span> <span class=\"o\">=</span> <span class=\"n\">db</span>\n    <span class=\"c1\"># customization to store the original field values on the instance</span>\n    <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">_loaded_values</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span>\n        <span class=\"nb\">zip</span><span class=\"p\">(</span><span class=\"n\">field_names</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">value</span> <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">values</span> <span class=\"k\">if</span> <span class=\"n\">value</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"n\">DEFERRED</span><span class=\"p\">))</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">instance</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"ow\">and</span> <span class=\"p\">(</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">creator_id</span> <span class=\"o\">!=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_loaded_values</span><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><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Exemplet ovan visar en fullständig <code class=\"docutils literal notranslate\"><span class=\"pre\">from_db()</span></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\"><span class=\"pre\">super()</span></code>-anrop i <code class=\"docutils literal notranslate\"><span class=\"pre\">from_db()</span></code>-metoden.</p>\n</section>\n</section>\n<section id=\"refreshing-objects-from-database\">\n<span id=\"refreshing-objects\"></span><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><span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">del</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">field</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">field</span>  <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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">refresh_from_db</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">from_queryset</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">arefresh_from_db</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">from_queryset</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">arefresh_from_db()</span></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\"><span class=\"pre\">refresh_from_db()</span></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/6.1/ref/utils/#django.utils.functional.cached_property\" title=\"django.utils.functional.cached_property\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;cached_property</span></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\"><span class=\"pre\">using</span></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\"><span class=\"pre\">fields</span></code>.</p>\n<p>Om du till exempel vill testa att ett anrop av <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></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=\"w\"> </span><span class=\"nf\">test_update_result</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">val</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">val</span><span class=\"o\">=</span><span class=\"n\">F</span><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    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">refresh_from_db</span><span class=\"p\">()</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">val</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>When a deferred field is loaded on-demand for a single model instance, the\nloading happens through this method. Thus it is possible to customize the way\nthis loading happens. The example below shows how one can reload all of the\ninstance’s fields when a deferred field is loaded on-demand:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ExampleModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">refresh_from_db</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><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> <span class=\"n\">fields</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">fields</span><span class=\"p\">)</span>\n            <span class=\"n\">deferred_fields</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_deferred_fields</span><span class=\"p\">()</span>\n            <span class=\"c1\"># If any deferred field is going to be loaded</span>\n            <span class=\"k\">if</span> <span class=\"n\">fields</span><span class=\"o\">.</span><span class=\"n\">intersection</span><span class=\"p\">(</span><span class=\"n\">deferred_fields</span><span class=\"p\">):</span>\n                <span class=\"c1\"># then load all of them</span>\n                <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"n\">fields</span><span class=\"o\">.</span><span class=\"n\">union</span><span class=\"p\">(</span><span class=\"n\">deferred_fields</span><span class=\"p\">)</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">refresh_from_db</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"p\">,</span> <span class=\"n\">fields</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">from_queryset</span></code> gör det möjligt att använda en annan queryset än den som skapats från <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">_base_manager</span></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\"><span class=\"pre\">refresh_from_db()</span></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><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">refresh_from_db</span><span class=\"p\">(</span><span class=\"n\">from_queryset</span><span class=\"o\">=</span><span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">active_objects</span><span class=\"o\">.</span><span class=\"n\">all</span><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><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">refresh_from_db</span><span class=\"p\">(</span><span class=\"n\">from_queryset</span><span class=\"o\">=</span><span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><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><span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">refresh_from_db</span><span class=\"p\">(</span><span class=\"n\">from_queryset</span><span class=\"o\">=</span><span class=\"n\">MyModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_for_update</span><span class=\"p\">())</span>\n</code></pre></div>\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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_deferred_fields</span></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>Validate the model fields - <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\"><span class=\"pre\">Model.clean_fields()</span></code></a></p></li>\n<li><p>Validate the model as a whole - <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\"><span class=\"pre\">Model.clean()</span></code></a></p></li>\n<li><p>Validate the field uniqueness - <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\"><span class=\"pre\">Model.validate_unique()</span></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\"><span class=\"pre\">Model.validate_constraints()</span></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\"><span class=\"pre\">full_clean()</span></code></a>-metod.</p>\n<p>When you use a <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a>, the call to\n<a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.is_valid\" title=\"django.forms.Form.is_valid\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">is_valid()</span></code></a> will perform these validation steps for\nall the fields that are included on the form. See the <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/\"><span class=\"doc\">ModelForm\ndocumentation</span></a> for more information. You should only\nneed to call a model’s <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\"><span class=\"pre\">full_clean()</span></code></a> method if you plan to handle\nvalidation errors yourself, or if you have excluded fields from the\n<a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a> that require validation.</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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">full_clean</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclude</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">validate_unique</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">validate_constraints</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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>This method calls <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\"><span class=\"pre\">Model.clean_fields()</span></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\"><span class=\"pre\">Model.clean()</span></code></a>,\n<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\"><span class=\"pre\">Model.validate_unique()</span></code></a> (if <code class=\"docutils literal notranslate\"><span class=\"pre\">validate_unique</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>),  and\n<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\"><span class=\"pre\">Model.validate_constraints()</span></code></a> (if <code class=\"docutils literal notranslate\"><span class=\"pre\">validate_constraints</span></code> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>)\nin that order and raises a <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code></a> that\nhas a <code class=\"docutils literal notranslate\"><span class=\"pre\">message_dict</span></code> attribute containing errors from all four stages.</p>\n<p>Det valfria argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> kan användas för att tillhandahålla en <code class=\"docutils literal notranslate\"><span class=\"pre\">uppsättning</span></code> av fältnamn som kan uteslutas från validering och rengöring. <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></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>Note that <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code> will <em>not</em> be called automatically when you call\nyour model’s <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\"><span class=\"pre\">save()</span></code></a> method. You’ll need to call it manually\nwhen you want to run one-step model validation for your own manually created\nmodels. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ValidationError</span>\n\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">article</span><span class=\"o\">.</span><span class=\"n\">full_clean</span><span class=\"p\">()</span>\n<span class=\"k\">except</span> <span class=\"n\">ValidationError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><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\"><span class=\"pre\">full_clean()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">clean_fields</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclude</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">exclude</span></code> argumentet låter dig tillhandahålla en <code class=\"docutils literal notranslate\"><span class=\"pre\">uppsättning</span></code> av fältnamn som ska uteslutas från validering. Det kommer att ge upphov till en <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code></a> om några fält misslyckas med valideringen.</p>\n<p>The second step <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code> performs is to call <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\"><span class=\"pre\">Model.clean()</span></code></a>.\nThis method should be overridden to perform custom validation on your model.</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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">clean</span></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=\"w\"> </span><span class=\"nn\">datetime</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ValidationError</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">gettext_lazy</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">status</span> <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><span class=\"n\">pub_date</span> <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> <span class=\"n\">ValidationError</span><span class=\"p\">(</span><span class=\"n\">_</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><span class=\"n\">status</span> <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><span class=\"n\">pub_date</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Note, however, that like <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\"><span class=\"pre\">Model.full_clean()</span></code></a>, a model’s <code class=\"docutils literal notranslate\"><span class=\"pre\">clean()</span></code>\nmethod is not invoked when you call your model’s <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\"><span class=\"pre\">save()</span></code></a> method.</p>\n<p>I exemplet ovan instantierades undantaget <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code></a> av <code class=\"docutils literal notranslate\"><span class=\"pre\">Model.clean()</span></code> med en sträng, så det kommer att lagras i en speciell felordboksnyckel, <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.NON_FIELD_ERRORS\" title=\"django.core.exceptions.NON_FIELD_ERRORS\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">NON_FIELD_ERRORS</span></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=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">NON_FIELD_ERRORS</span><span class=\"p\">,</span> <span class=\"n\">ValidationError</span>\n\n<span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">article</span><span class=\"o\">.</span><span class=\"n\">full_clean</span><span class=\"p\">()</span>\n<span class=\"k\">except</span> <span class=\"n\">ValidationError</span> <span class=\"k\">as</span> <span class=\"n\">e</span><span class=\"p\">:</span>\n    <span class=\"n\">non_field_errors</span> <span class=\"o\">=</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">message_dict</span><span class=\"p\">[</span><span class=\"n\">NON_FIELD_ERRORS</span><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/6.1/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></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\"><span class=\"pre\">pub_date</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">status</span> <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><span class=\"n\">pub_date</span> <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> <span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n                <span class=\"p\">{</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">:</span> <span class=\"n\">_</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\"><span class=\"pre\">Model.clean()</span></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> <span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;title&quot;</span><span class=\"p\">:</span> <span class=\"n\">ValidationError</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Missing title.&quot;</span><span class=\"p\">),</span> <span class=\"n\">code</span><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> <span class=\"n\">ValidationError</span><span class=\"p\">(</span><span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;Invalid date.&quot;</span><span class=\"p\">),</span> <span class=\"n\">code</span><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\"><span class=\"pre\">full_clean()</span></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\">\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\"><span class=\"pre\">ModelForm</span></code></p>\n<p>Du kan inte skapa valideringsfel i <code class=\"docutils literal notranslate\"><span class=\"pre\">Model.clean()</span></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\"><span class=\"pre\">Meta.fields</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">Meta.exclude</span></code>). Om du gör det kommer ett <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></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\"><span class=\"pre\">Model.clean_fields()</span></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=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean_fields</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">exclude</span><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><span class=\"n\">clean_fields</span><span class=\"p\">(</span><span class=\"n\">exclude</span><span class=\"o\">=</span><span class=\"n\">exclude</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <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><span class=\"n\">pub_date</span> <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> <span class=\"n\">exclude</span> <span class=\"ow\">and</span> <span class=\"s2\">&quot;status&quot;</span> <span class=\"ow\">in</span> <span class=\"n\">exclude</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n                    <span class=\"n\">_</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=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n                    <span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;status&quot;</span><span class=\"p\">:</span> <span class=\"n\">_</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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">validate_unique</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclude</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">clean_fields()</span></code></a>, men validerar unikhetsbegränsningar som definieras via <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.unique\" title=\"django.db.models.Field.unique\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.unique</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">Field.unique_for_date</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">Field.unique_for_month</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">Field.unique_for_year</span></code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.unique_together</span></code></a> på din modell istället för enskilda fältvärden. Det valfria argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code> låter dig tillhandahålla en <code class=\"docutils literal notranslate\"><span class=\"pre\">uppsättning</span></code> av fältnamn som ska uteslutas från validering. Det kommer att ge upphov till en <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code></a> om några fält misslyckas med valideringen.</p>\n<p><a class=\"reference internal\" href=\"/sv/6.1/ref/models/constraints/#django.db.models.UniqueConstraint\" title=\"django.db.models.UniqueConstraint\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UniqueConstraint</span></code></a>s som definieras i <a class=\"reference internal\" href=\"/sv/6.1/ref/models/options/#django.db.models.Options.constraints\" title=\"django.db.models.Options.constraints\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.constraints</span></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\"><span class=\"pre\">Model.validate_constraints()</span></code></a>.</p>\n<p>Observera att om du anger ett <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code>-argument till <code class=\"docutils literal notranslate\"><span class=\"pre\">validate_unique()</span></code>, kommer alla <a class=\"reference internal\" href=\"/sv/6.1/ref/models/options/#django.db.models.Options.unique_together\" title=\"django.db.models.Options.unique_together\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">unique_together</span></code></a>-begränsningar som involverar ett av de fält du angav inte att kontrolleras.</p>\n<p>Slutligen kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">validate_constraints</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclude</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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/6.1/ref/models/options/#django.db.models.Options.constraints\" title=\"django.db.models.Options.constraints\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.constraints</span></code></a>. Det valfria <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude</span></code>-argumentet låter dig tillhandahålla en <code class=\"docutils literal notranslate\"><span class=\"pre\">uppsättning</span></code> av fältnamn som ska uteslutas från validering. Det kommer att ge upphov till en <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.ValidationError\" title=\"django.core.exceptions.ValidationError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValidationError</span></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\"><span class=\"pre\">save()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">force_insert</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">force_update</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">update_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">asave</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">force_insert</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">force_update</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">update_fields</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">asave()</span></code></p>\n<p>Mer information om hur du använder argumenten <code class=\"docutils literal notranslate\"><span class=\"pre\">force_insert</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">force_update</span></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\"><span class=\"pre\">update_fields</span></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\"><span class=\"pre\">save()</span></code>. Se <a class=\"reference internal\" href=\"/sv/6.1/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<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/6.1/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></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\"><span class=\"pre\">save()</span></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><span class=\"n\">b2</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><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><span class=\"n\">b2</span><span class=\"o\">.</span><span class=\"n\">id</span>  <span class=\"c1\"># Returns None, because b2 doesn&#39;t have an ID yet.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b2</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b2</span><span class=\"o\">.</span><span class=\"n\">id</span>  <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\"><span class=\"pre\">save()</span></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/6.1/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></code></a> med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> som standard om du inte uttryckligen anger <code class=\"docutils literal notranslate\"><span class=\"pre\">primary_key=True</span></code> på ett fält i din modell. Se dokumentationen för <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">pk</span></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\"><span class=\"pre\">pk</span></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</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/6.1/ref/models/fields/#django.db.models.AutoField\" title=\"django.db.models.AutoField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AutoField</span></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><span class=\"n\">b3</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><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><span class=\"n\">b3</span><span class=\"o\">.</span><span class=\"n\">id</span>  <span class=\"c1\"># Returns 3.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b3</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b3</span><span class=\"o\">.</span><span class=\"n\">id</span>  <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><span class=\"n\">b4</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Not Cheddar&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Anything but cheese.&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">b4</span><span class=\"o\">.</span><span class=\"n\">save</span><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/6.1/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/6.1/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_save</span></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/6.1/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\"><span class=\"pre\">pre_save()</span></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\"><span class=\"pre\">pre_save()</span></code> för att implementera <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">auto_now_add</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">auto_now</span></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/6.1/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\"><span class=\"pre\">get_db_prep_save()</span></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/6.1/ref/models/fields/#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a>-fält ett Python-objekt med <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></code> för att lagra data. Databaser lagrar inte <code class=\"docutils literal notranslate\"><span class=\"pre\">datetime</span></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/6.1/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_save</span></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\"><span class=\"pre\">save()</span></code>-metod för att skapa och ändra objekt. Django abstraherar behovet av att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code> SQL-satser. När du anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> och objektets primära nyckelattribut <strong>inte</strong> definierar en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">db_default</span></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\"><span class=\"pre\">None</span></code>, utför Django en <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code>.</p></li>\n<li><p>Om objektets primärnyckelattribut <em>inte</em> är inställt eller om <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></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\"><span class=\"pre\">INSERT</span></code>.</p></li>\n</ul>\n<p>Om objektets primära nyckelattribut definierar en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.default\" title=\"django.db.models.Field.default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">default</span></code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">db_default</span></code></a> så utför Django en <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></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\"><span class=\"pre\">INSERT</span></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\"><span class=\"pre\">SELECT</span></code> när primärnyckelattributet var inställt. Om <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code> hittade en rad, gjorde Django en <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code>, annars gjorde den en <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code>. Den gamla algoritmen resulterar i ytterligare en fråga i fallet <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></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\"><span class=\"pre\">ON</span> <span class=\"pre\">UPDATE</span></code> trigger som returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></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/6.1/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\"><span class=\"pre\">select_on_save</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></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>In some rare circumstances, it’s necessary to be able to force the\n<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\"><span class=\"pre\">save()</span></code></a> method to perform an SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code> and not fall back to\ndoing an <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code>. Or vice-versa: update, if possible, but not insert a new\nrow. In these cases you can pass the <code class=\"docutils literal notranslate\"><span class=\"pre\">force_insert=True</span></code> or\n<code class=\"docutils literal notranslate\"><span class=\"pre\">force_update=True</span></code> parameters to the <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\"><span class=\"pre\">save()</span></code></a> method.\nPassing both parameters is an error: you cannot both insert <em>and</em> update at the\nsame time!</p>\n<p>När du använder <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">force_insert</span></code> för att tvinga fram <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></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><span class=\"n\">Restaurant</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Bob&#39;s Cafe&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">force_insert</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">Place</span><span class=\"p\">,))</span>\n\n<span class=\"n\">Restaurant</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Bob&#39;s Cafe&quot;</span><span class=\"p\">,</span> <span class=\"n\">rating</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">force_insert</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">Place</span><span class=\"p\">,</span> <span class=\"n\">Rating</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Du kan skicka <code class=\"docutils literal notranslate\"><span class=\"pre\">force_insert=(models.Model,)</span></code> för att tvinga fram en <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code>-sats för alla föräldrar. Som standard tvingar <code class=\"docutils literal notranslate\"><span class=\"pre\">force_insert=True</span></code> bara fram en ny rad för den aktuella modellen.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>When a forced update does not affect any rows a\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/class/#django.db.models.Model.NotUpdated\" title=\"django.db.models.Model.NotUpdated\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">NotUpdated</span></code></a> exception is raised. On previous\nversions a generic <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.db.DatabaseError\" title=\"django.db.DatabaseError\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">django.db.DatabaseError</span></code></a> was raised.</p>\n</aside>\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\"><span class=\"pre\">update_fields</span></code> kommer du att tvinga fram en uppdatering på samma sätt som <code class=\"docutils literal notranslate\"><span class=\"pre\">force_update</span></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><span class=\"n\">product</span> <span class=\"o\">=</span> <span class=\"n\">Product</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><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><span class=\"n\">product</span><span class=\"o\">.</span><span class=\"n\">number_sold</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">product</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Om det gamla värdet för <code class=\"docutils literal notranslate\"><span class=\"pre\">number_sold</span></code> som hämtades från databasen var 10, kommer värdet 11 att skrivas tillbaka till databasen.</p>\n<p>The process can be made robust, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#avoiding-race-conditions-using-f\"><span class=\"std std-ref\">avoiding a race condition</span></a>, as well as slightly faster by expressing\nthe update relative to the original field value, rather than as an explicit\nassignment of a new value. Django provides <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#f-expressions\"><span class=\"std std-ref\">F()-uttryck</span></a> for performing\nthis kind of relative update. Using <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#f-expressions\"><span class=\"std std-ref\">F()-uttryck</span></a>, the previous example\nis expressed as:</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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">product</span> <span class=\"o\">=</span> <span class=\"n\">Product</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><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><span class=\"n\">product</span><span class=\"o\">.</span><span class=\"n\">number_sold</span> <span class=\"o\">=</span> <span class=\"n\">F</span><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><span class=\"n\">product</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>For more details, see the documentation on <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#f-expressions\"><span class=\"std std-ref\">F()-uttryck</span></a> and their\n<a class=\"reference internal\" href=\"/sv/6.1/topics/db/queries/#topics-db-queries-update\"><span class=\"std std-ref\">use in update queries</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\"><span class=\"pre\">save()</span></code> får en lista med fältnamn i nyckelordsargumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></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><span class=\"n\">product</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Name changed again&quot;</span>\n<span class=\"n\">product</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">update_fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> kan vara en iterabel som innehåller strängar. En tom <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> iterabel hoppar över sparandet. Ett värde av <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> kommer att utföra en uppdatering på alla fält.</p>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> kommer du att tvinga fram en uppdatering.</p>\n<p>When saving a model fetched through deferred model loading\n(<a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">only()</span></code></a> or\n<a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">defer()</span></code></a>) only the fields loaded\nfrom the DB will get updated. In effect there is an automatic\n<code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> in this case. If you assign or change any deferred field\nvalue, the field will be added to the updated fields.</p>\n<aside class=\"admonition-field-pre-save-and-update-fields admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">Field.pre_save()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code></p>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code> skickas in anropas endast <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">pre_save()</span></code></a>-metoderna i <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></code>. Detta innebär till exempel att datum-/tidsfält med <code class=\"docutils literal notranslate\"><span class=\"pre\">auto_now=True</span></code> inte kommer att uppdateras om de inte ingår i <code class=\"docutils literal notranslate\"><span class=\"pre\">update_fields</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">delete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">keep_parents</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">adelete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">keep_parents</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.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\"><span class=\"pre\">adelete()</span></code></p>\n<p>Issues an SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">DELETE</span></code> for the object. This only deletes the object in the\ndatabase; the Python instance will still exist and will still have data in\nits fields, except for the primary key set to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. This method returns the\nnumber of objects deleted and a dictionary with the number of deletions per\nobject type. The return value will count instances from related models if\nDjango is emulating cascade behavior via Python <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">on_delete</span></code></a>\nvariants. Otherwise, for database variants such as\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.DB_CASCADE\" title=\"django.db.models.DB_CASCADE\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">DB_CASCADE</span></code></a>, the return value will report only\ninstances of the <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>’s model.</p>\n<p>Mer information, bland annat om hur du tar bort objekt i bulk, finns i <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">delete()</span></code>. Se <a class=\"reference internal\" href=\"/sv/6.1/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/6.1/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\"><span class=\"pre\">keep_parents=True</span></code> behålls föräldramodellens data.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>Support for the <code class=\"docutils literal notranslate\"><span class=\"pre\">DB_*</span></code> variants of <code class=\"docutils literal notranslate\"><span class=\"pre\">on_delete</span></code> attribute was added.</p>\n</aside>\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\"><span class=\"pre\">pickle</span></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\">\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\"><span class=\"pre\">RuntimeWarning</span></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\"><span class=\"pre\">__str__()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">__str__</span></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\"><span class=\"pre\">__str__()</span></code> anropas när du anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">str()</span></code> på ett objekt. Django använder <code class=\"docutils literal notranslate\"><span class=\"pre\">str(obj)</span></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\"><span class=\"pre\">__str__()</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">first_name</span><span class=\"si\">}</span><span class=\"s2\"> </span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><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\"><span class=\"pre\">__eq__()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">__eq__</span></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\"><span class=\"pre\">None</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"nb\">id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">AutoField</span><span class=\"p\">(</span><span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyProxyModel</span><span class=\"p\">(</span><span class=\"n\">MyModel</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">proxy</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MultitableInherited</span><span class=\"p\">(</span><span class=\"n\">MyModel</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"c1\"># Primary keys compared</span>\n<span class=\"n\">MyModel</span><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> <span class=\"n\">MyModel</span><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=\"n\">MyModel</span><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> <span class=\"n\">MyModel</span><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>\n<span class=\"n\">MyModel</span><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> <span class=\"n\">MyModel</span><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>\n<span class=\"n\">instance</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><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=\"n\">instance</span> <span class=\"o\">==</span> <span class=\"n\">instance</span>\n<span class=\"c1\"># Proxy model</span>\n<span class=\"n\">MyModel</span><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> <span class=\"n\">MyProxyModel</span><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>\n<span class=\"n\">MyModel</span><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> <span class=\"n\">MultitableInherited</span><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\"><span class=\"pre\">__hash__()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">__hash__</span></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>The <code class=\"docutils literal notranslate\"><span class=\"pre\">__hash__()</span></code> method is based on the instance’s primary key value. It\nis effectively <code class=\"docutils literal notranslate\"><span class=\"pre\">hash(obj.pk)</span></code>. If the instance doesn’t have a primary key\nvalue then a <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code> will be raised (otherwise the <code class=\"docutils literal notranslate\"><span class=\"pre\">__hash__()</span></code>\nmethod would return different values before and after the instance is\nsaved), but changing the <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\"><span class=\"pre\">__hash__()</span></code></a> value of an instance is\nforbidden in Python.</p>\n</section>\n<section id=\"get-absolute-url\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_absolute_url</span></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\"><span class=\"pre\">get_absolute_url()</span></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=\"w\"> </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><span class=\"n\">id</span>\n</code></pre></div>\n<p>While this code is correct and simple, it may not be the most portable way\nto write this kind of method. The <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.reverse\" title=\"django.urls.reverse\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> function is\nusually the best approach.</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=\"w\"> </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=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;people-detail&quot;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><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><span class=\"n\">pk</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>En plats där Django använder <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></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\"><span class=\"pre\">get_absolute_url()</span></code>.</p>\n<p>På samma sätt använder ett par andra delar av Django, till exempel <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/syndication/\"><span class=\"doc\">syndication feed framework</span></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></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\"><span class=\"pre\">get_absolute_url()</span></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=\"w\"> </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><span class=\"n\">name</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">self.name</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">'/example.com'</span></code> returneras <code class=\"docutils literal notranslate\"><span class=\"pre\">'//example.com/'</span></code>, vilket i sin tur är en giltig schemarelativ URL men inte den förväntade <code class=\"docutils literal notranslate\"><span class=\"pre\">'/%2Fexample.com/'</span></code>.</p>\n</aside>\n<p>It’s good practice to use <code class=\"docutils literal notranslate\"><span class=\"pre\">get_absolute_url()</span></code> in templates, instead of\nhardcoding your objects’ URLs. For example, this template code is bad:</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\"><span class=\"pre\">get_absolute_url()</span></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\"><span class=\"pre\">get_absolute_url()</span></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\"><span class=\"pre\">get_absolute_url()</span></code> bör kunna använda resultatet direkt utan någon ytterligare bearbetning. Du kanske vill använda funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.encoding.iri_to_uri()</span></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>In addition to <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\"><span class=\"pre\">save()</span></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\"><span class=\"pre\">delete()</span></code></a>, a model object\nmight have some of the following methods:</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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_FOO_display</span></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/6.1/ref/models/fields/#django.db.models.Field.choices\" title=\"django.db.models.Field.choices\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">choices</span></code></a> inställt, kommer objektet att ha en <code class=\"docutils literal notranslate\"><span class=\"pre\">get_FOO_display()</span></code> metod, där <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">SHIRT_SIZES</span> <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    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n    <span class=\"n\">shirt_size</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SHIRT_SIZES</span><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><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred Flintstone&quot;</span><span class=\"p\">,</span> <span class=\"n\">shirt_size</span><span class=\"o\">=</span><span class=\"s2\">&quot;L&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">shirt_size</span>\n<span class=\"go\">&#39;L&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">get_shirt_size_display</span><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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_next_by_FOO</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_previous_by_FOO</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></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/6.1/ref/models/fields/#django.db.models.DateField\" title=\"django.db.models.DateField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateField</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a> som inte har <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null=True</span></code></a>, kommer objektet att ha <code class=\"docutils literal notranslate\"><span class=\"pre\">get_next_by_FOO()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">get_previous_by_FOO()</span></code> metoder, där <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO</span></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/6.1/ref/models/class/#django.db.models.Model.DoesNotExist\" title=\"django.db.models.Model.DoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></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/6.1/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\">\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\"><span class=\"pre\">get_FOO_display()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">get_next_by_FOO()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">get_previous_by_FOO()</span></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\"><span class=\"pre\">Field.contribute_to_class()</span></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\"><span class=\"pre\">_stat</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">_state</span></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\"><span class=\"pre\">_state</span></code> hänvisar till ett <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelState</span></code>-objekt som spårar modellinstansens livscykel.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelState</span></code> object has three attributes: <code class=\"docutils literal notranslate\"><span class=\"pre\">adding</span></code>, a flag which is\n<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the model has not been saved to the database yet, <code class=\"docutils literal notranslate\"><span class=\"pre\">db</span></code>, a\nstring referring to the database alias the instance was loaded from or\nsaved to, and <code class=\"docutils literal notranslate\"><span class=\"pre\">fetch_mode</span></code>, the <a class=\"reference internal\" href=\"/sv/6.1/topics/db/fetch-modes/\"><span class=\"doc\">fetch mode</span></a> to be used in subsequent field fetches.</p>\n<p>Newly instantiated instances have <code class=\"docutils literal notranslate\"><span class=\"pre\">adding=True</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">db=None</span></code>,\nsince they are yet to be saved, and <code class=\"docutils literal notranslate\"><span class=\"pre\">fetch_mode=models.FETCH_ONE</span></code>.\nInstances fetched from a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> will have <code class=\"docutils literal notranslate\"><span class=\"pre\">adding=False</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">db</span></code>\nset to the alias of the associated database, and <code class=\"docutils literal notranslate\"><span class=\"pre\">fetch_mode</span></code> copied\nfrom the queryset’s fetch mode.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">fetch_mode</span></code> attribute was added.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"is-pk-set\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">_is_pk_set()</span></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\"><span class=\"pre\">Model.</span></span><span class=\"sig-name descname\"><span class=\"pre\">_is_pk_set</span></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><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">_is_pk_set()</span></code> method returns whether the model instance’s <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> is\nset. It abstracts the model’s primary key definition, ensuring consistent\nbehavior regardless of the specific <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> configuration. A\n<code class=\"docutils literal notranslate\"><span class=\"pre\">DatabaseDefault</span></code> on an unsaved instance is considered unset.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>In earlier versions, <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> was returned for <code class=\"docutils literal notranslate\"><span class=\"pre\">DatabaseDefault</span></code>\nvalues.</p>\n</aside>\n</dd></dl>\n\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/6.1/ref/"},{"docname":"ref/models/index","title":"Modeller","url":"/sv/6.1/ref/models/"}],"prev":{"docname":"ref/models/options","title":"Alternativ för modell Meta","url":"/sv/6.1/ref/models/options/"},"next":{"docname":"ref/models/querysets","title":"aPI-referens för QuerySet","url":"/sv/6.1/ref/models/querysets/"},"formats":{"html":"/sv/6.1/ref/models/instances/","markdown":"/sv/6.1/ref/models/instances.md","json":"/sv/6.1/ref/models/instances.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/models/instances.txt","official":"https://docs.djangoproject.com/sv/6.1/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"]}