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