{"title":"Serialisering av Django-objekt","version":"5.2","locale":"sv","docname":"topics/serialization","url":"/sv/5.2/topics/serialization/","canonical":"https://djangodocs.dev/sv/5.2/topics/serialization/","summary":"Djangos serialiseringsramverk tillhandahåller en mekanism för att ”översätta” Django-modeller till andra format. Vanligtvis kommer dessa andra format att vara…","html":"<h1>Serialisering av Django-objekt<a class=\"heading-anchor\" href=\"#serializing-django-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Djangos serialiseringsramverk tillhandahåller en mekanism för att ”översätta” Django-modeller till andra format. Vanligtvis kommer dessa andra format att vara textbaserade och användas för att skicka Django-data över en tråd, men det är möjligt för en serializer att hantera vilket format som helst (textbaserat eller inte).</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<p>Om du bara vill få lite data från dina tabeller till en serialiserad form kan du använda kommandot <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span></code></a>.</p>\n</aside>\n<section id=\"serializing-data\">\n<h2>Serialisering av data<a class=\"heading-anchor\" href=\"#serializing-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>På den högsta nivån kan du serialisera data så här:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">serializers</span>\n\n<span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">SomeModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>Argumenten till funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">serialize</span></code> är formatet att serialisera data till (se <a class=\"reference internal\" href=\"#id2\">Serialiseringsformat</a>) och en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> att serialisera. (Egentligen kan det andra argumentet vara vilken iterator som helst som ger Django-modellinstanser, men det kommer nästan alltid att vara en QuerySet).</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.serializers.get_serializer\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.serializers.</span></span><span class=\"sig-name descname\"><span class=\"pre\">get_serializer</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">format</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.serializers.get_serializer\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Du kan också använda ett serializer-objekt direkt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">JSONSerializer</span> <span class=\"o\">=</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">get_serializer</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">json_serializer</span> <span class=\"o\">=</span> <span class=\"n\">JSONSerializer</span><span class=\"p\">()</span>\n<span class=\"n\">json_serializer</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">json_serializer</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta är användbart om du vill serialisera data direkt till ett filliknande objekt (som innehåller en <a class=\"reference internal\" href=\"/sv/5.2/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a>):</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\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;file.json&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">out</span><span class=\"p\">:</span>\n    <span class=\"n\">json_serializer</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"n\">SomeModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"n\">out</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Anrop av <a class=\"reference internal\" href=\"#django.core.serializers.get_serializer\" title=\"django.core.serializers.get_serializer\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_serializer()</span></code></a> med en okänd <a class=\"reference internal\" href=\"#serialization-formats\"><span class=\"std std-ref\">format</span></a> kommer att ge upphov till ett <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.serializers.SerializerDoesNotExist</span></code> undantag.</p>\n</aside>\n<section id=\"subset-of-fields\">\n<span id=\"id1\"></span><h3>Delmängd av fält<a class=\"heading-anchor\" href=\"#subset-of-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du bara vill att en delmängd av fälten ska serialiseras kan du ange ett <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code>-argument till serializer:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">serializers</span>\n\n<span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">SomeModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;size&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>I det här exemplet serialiseras endast attributen <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">size</span></code> för varje modell. Primärnyckeln serialiseras alltid som elementet <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> i resultatet; den visas aldrig i delen <code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Beroende på din modell kan det hända att det inte går att deserialisera en modell som bara serialiserar en delmängd av sina fält. Om ett serialiserat objekt inte anger alla fält som krävs av en modell kommer deserialiseraren inte att kunna spara deserialiserade instanser.</p>\n</aside>\n</section>\n<section id=\"inherited-models\">\n<h3>Nedärvda modeller<a class=\"heading-anchor\" href=\"#inherited-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du har en modell som definieras med hjälp av en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/#abstract-base-classes\"><span class=\"std std-ref\">abstrakt basklass</span></a> behöver du inte göra något särskilt för att serialisera den modellen. Anropa serialiseraren på det objekt (eller de objekt) som du vill serialisera, så kommer utdata att vara en fullständig representation av det serialiserade objektet.</p>\n<p>Men om du har en modell som använder <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/#multi-table-inheritance\"><span class=\"std std-ref\">multi-table inheritance</span></a>, måste du också serialisera alla basklasser för modellen. Detta beror på att endast de fält som är lokalt definierade i modellen kommer att serialiseras. Tänk till exempel på följande modeller:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Place</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Restaurant</span><span class=\"p\">(</span><span class=\"n\">Place</span><span class=\"p\">):</span>\n    <span class=\"n\">serves_hot_dogs</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du bara serialiserar restaurangmodellen:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>fälten på den serialiserade utdata kommer endast att innehålla attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">serves_hot_dogs</span></code>. Attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> för basklassen kommer att ignoreras.</p>\n<p>För att fullt ut kunna serialisera dina <code class=\"docutils literal notranslate\"><span class=\"pre\">Restaurant</span></code>-instanser måste du också serialisera <code class=\"docutils literal notranslate\"><span class=\"pre\">Place</span></code>-modellerna:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">all_objects</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"o\">*</span><span class=\"n\">Restaurant</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"o\">*</span><span class=\"n\">Place</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()]</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">all_objects</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"deserializing-data\">\n<h2>Deserialisering av data<a class=\"heading-anchor\" href=\"#deserializing-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Deserialisering av data är mycket likt serialisering av dem:</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\">for</span> <span class=\"n\">obj</span> <span class=\"ow\">in</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">deserialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">):</span>\n    <span class=\"n\">do_something_with</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Som du kan se tar funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">deserialize</span></code> samma formatargument som <code class=\"docutils literal notranslate\"><span class=\"pre\">serialize</span></code>, en sträng eller dataström, och returnerar en iterator.</p>\n<p>Här blir det dock något komplicerat. De objekt som returneras av <code class=\"docutils literal notranslate\"><span class=\"pre\">deserialize</span></code> iterator <em>är</em> inte vanliga Django-objekt. Istället är de speciella <code class=\"docutils literal notranslate\"><span class=\"pre\">DeserializedObject</span></code>-instanser som omsluter ett skapat - men osparat - objekt och alla associerade relationsdata.</p>\n<p>Genom att anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">DeserializedObject.save()</span></code> sparas objektet i databasen.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Om attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></code> i de serialiserade uppgifterna inte finns eller är null, sparas en ny instans i databasen.</p>\n</aside>\n<p>Detta säkerställer att deserialisering är en icke-destruktiv operation även om data i din serialiserade representation inte matchar vad som för närvarande finns i databasen. Vanligtvis ser arbetet med dessa <code class=\"docutils literal notranslate\"><span class=\"pre\">DeserializedObject</span></code>-instanser ut ungefär som:</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\">for</span> <span class=\"n\">deserialized_object</span> <span class=\"ow\">in</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">deserialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">object_should_be_saved</span><span class=\"p\">(</span><span class=\"n\">deserialized_object</span><span class=\"p\">):</span>\n        <span class=\"n\">deserialized_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Med andra ord är den vanliga användningen att undersöka de deserialiserade objekten för att se till att de är ”lämpliga” att spara innan man gör det. Om du litar på din datakälla kan du istället spara objektet direkt och gå vidare.</p>\n<p>Django-objektet i sig kan inspekteras som <code class=\"docutils literal notranslate\"><span class=\"pre\">deserialized_object.object</span></code>. Om fält i de serialiserade data inte finns på en modell, kommer ett <code class=\"docutils literal notranslate\"><span class=\"pre\">DeserializationError</span></code> att uppstå om inte <code class=\"docutils literal notranslate\"><span class=\"pre\">ignorenonexistent</span></code> argumentet skickas in som <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">deserialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">ignorenonexistent</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"serialization-formats\">\n<span id=\"id2\"></span><h2>Format för serialisering<a class=\"heading-anchor\" href=\"#serialization-formats\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django stöder ett antal serialiseringsformat, varav vissa kräver att du installerar Python-moduler från tredje part:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Identifierare</p></th>\n<th class=\"head\"><p>Information</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">xml</span></code></p></td>\n<td><p>Serialiserar till och från en enkel XML-dialekt.</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">json</span></code></p></td>\n<td><p>Serialiserar till och från <a class=\"reference external\" href=\"https://json.org/\">JSON</a>.</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">jsonl</span></code></p></td>\n<td><p>Serialiserar till och från <a class=\"reference external\" href=\"https://jsonlines.org/\">JSONL</a>.</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">yaml</span></code></p></td>\n<td><p>Serialiserar till YAML (YAML är inte ett märkspråk). Denna serialiserare är endast tillgänglig om <a class=\"reference external\" href=\"https://pyyaml.org/\">PyYAML</a> är installerat.</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<section id=\"xml\">\n<span id=\"serialization-formats-xml\"></span><h3>XML<a class=\"heading-anchor\" href=\"#xml\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det grundläggande XML-serialiseringsformatet ser ut så här:</p>\n<div class=\"code-block\" data-language=\"xml\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">XML</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=\"XML code\"><code><span class=\"cp\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span>\n<span class=\"nt\">&lt;django-objects</span><span class=\"w\"> </span><span class=\"na\">version=</span><span class=\"s\">&quot;1.0&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;object</span><span class=\"w\"> </span><span class=\"na\">pk=</span><span class=\"s\">&quot;123&quot;</span><span class=\"w\"> </span><span class=\"na\">model=</span><span class=\"s\">&quot;sessions.session&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;field</span><span class=\"w\"> </span><span class=\"na\">type=</span><span class=\"s\">&quot;DateTimeField&quot;</span><span class=\"w\"> </span><span class=\"na\">name=</span><span class=\"s\">&quot;expire_date&quot;</span><span class=\"nt\">&gt;</span>2013-01-16T08:16:59.844560+00:00<span class=\"nt\">&lt;/field&gt;</span>\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- ... --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;/object&gt;</span>\n<span class=\"nt\">&lt;/django-objects&gt;</span>\n</code></pre></div>\n<p>Hela samlingen av objekt som antingen serialiseras eller deserialiseras representeras av en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;django-objects&gt;</span></code>-tagg som innehåller flera <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;object&gt;</span></code>-element. Varje sådant objekt har två attribut: ”pk” och ”model”, där det senare representeras av appens namn (”sessions”) och modellens namn (”session”) med gemener, åtskilda av en punkt.</p>\n<p>Varje fält i objektet serialiseras som ett <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;field&gt;</span></code>-element med fälten ”type” och ”name”. Elementets textinnehåll representerar det värde som ska lagras.</p>\n<p>Utländska nycklar och andra relationsfält behandlas på ett lite annorlunda sätt:</p>\n<div class=\"code-block\" data-language=\"xml\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">XML</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=\"XML code\"><code><span class=\"nt\">&lt;object</span><span class=\"w\"> </span><span class=\"na\">pk=</span><span class=\"s\">&quot;27&quot;</span><span class=\"w\"> </span><span class=\"na\">model=</span><span class=\"s\">&quot;auth.permission&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">    </span><span class=\"cm\">&lt;!-- ... --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;field</span><span class=\"w\"> </span><span class=\"na\">to=</span><span class=\"s\">&quot;contenttypes.contenttype&quot;</span><span class=\"w\"> </span><span class=\"na\">name=</span><span class=\"s\">&quot;content_type&quot;</span><span class=\"w\"> </span><span class=\"na\">rel=</span><span class=\"s\">&quot;ManyToOneRel&quot;</span><span class=\"nt\">&gt;</span>9<span class=\"nt\">&lt;/field&gt;</span>\n<span class=\"w\">    </span><span class=\"cm\">&lt;!-- ... --&gt;</span>\n<span class=\"nt\">&lt;/object&gt;</span>\n</code></pre></div>\n<p>I det här exemplet anger vi att objektet <code class=\"docutils literal notranslate\"><span class=\"pre\">auth.Permission</span></code> med PK 27 har en främmande nyckel till instansen <code class=\"docutils literal notranslate\"><span class=\"pre\">contenttypes.ContentType</span></code> med PK 9.</p>\n<p>ManyToMany-relationer exporteras för den modell som binder dem. Till exempel har modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">auth.User</span></code> en sådan relation till modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">auth.Permission</span></code>:</p>\n<div class=\"code-block\" data-language=\"xml\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">XML</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=\"XML code\"><code><span class=\"nt\">&lt;object</span><span class=\"w\"> </span><span class=\"na\">pk=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">model=</span><span class=\"s\">&quot;auth.user&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">    </span><span class=\"cm\">&lt;!-- ... --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;field</span><span class=\"w\"> </span><span class=\"na\">to=</span><span class=\"s\">&quot;auth.permission&quot;</span><span class=\"w\"> </span><span class=\"na\">name=</span><span class=\"s\">&quot;user_permissions&quot;</span><span class=\"w\"> </span><span class=\"na\">rel=</span><span class=\"s\">&quot;ManyToManyRel&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;object</span><span class=\"w\"> </span><span class=\"na\">pk=</span><span class=\"s\">&quot;46&quot;</span><span class=\"nt\">&gt;&lt;/object&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;object</span><span class=\"w\"> </span><span class=\"na\">pk=</span><span class=\"s\">&quot;47&quot;</span><span class=\"nt\">&gt;&lt;/object&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;/field&gt;</span>\n<span class=\"nt\">&lt;/object&gt;</span>\n</code></pre></div>\n<p>I det här exemplet kopplas den angivna användaren till behörighetsmodellerna med PK 46 och 47.</p>\n<aside class=\"admonition-control-characters admonition\">\n<p class=\"admonition-title\">Kontrollera tecken</p>\n<p>Om innehållet som skall serialiseras innehåller kontrolltecken som inte accepteras i XML 1.0-standarden, kommer serialiseringen att misslyckas med ett <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#ValueError\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError</span></code></a>-undantag. Läs även W3C:s förklaring av <a class=\"reference external\" href=\"https://www.w3.org/International/questions/qa-controls\">HTML, XHTML, XML and Control Codes</a>.</p>\n</aside>\n</section>\n<section id=\"serialization-formats-json\">\n<span id=\"id3\"></span><h3>JSON<a class=\"heading-anchor\" href=\"#serialization-formats-json\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om vi fortsätter med samma exempel på data som tidigare skulle de serialiseras som JSON på följande sätt:</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=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;4b678b301dfd8a4e0dad910de3ae245b&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;sessions.session&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;expire_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;2013-01-16T08:16:59.844Z&quot;</span><span class=\"p\">,</span>\n            <span class=\"c1\"># ...</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Formateringen här är lite enklare än med XML. Hela samlingen representeras bara som en array och objekten representeras av JSON-objekt med tre egenskaper: ”pk”, ”model” och ”fields”. ”fields” är återigen ett objekt som innehåller varje fälts namn och värde som property respektive property-value.</p>\n<p>Foreign keys har PK för det länkade objektet som egenskapsvärde. ManyToMany-relationer serialiseras för den modell som definierar dem och representeras som en lista med PK:er.</p>\n<p>Var medveten om att inte alla Django-utdata kan skickas oförändrade till <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#module-json\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">json</span></code></a>. Om du till exempel har någon anpassad typ i ett objekt som ska serialiseras, måste du skriva en anpassad <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#module-json\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">json</span></code></a>-kodare för det. Något liknande detta kommer att fungera:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.serializers.json</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DjangoJSONEncoder</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LazyEncoder</span><span class=\"p\">(</span><span class=\"n\">DjangoJSONEncoder</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">default</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">,</span> <span class=\"n\">YourCustomType</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">default</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Du kan sedan skicka <code class=\"docutils literal notranslate\"><span class=\"pre\">cls=LazyEncoder</span></code> till funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">serializers.serialize()</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.serializers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">serialize</span>\n\n<span class=\"n\">serialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">SomeModel</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"bp\">cls</span><span class=\"o\">=</span><span class=\"n\">LazyEncoder</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Observera också att GeoDjango tillhandahåller en <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/gis/serializers/\"><span class=\"doc\">customized GeoJSON serializer</span></a>.</p>\n<section id=\"djangojsonencoder\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoJSONEncoder</span></code><a class=\"heading-anchor\" href=\"#djangojsonencoder\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.serializers.json.DjangoJSONEncoder\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.serializers.json.</span></span><span class=\"sig-name descname\"><span class=\"pre\">DjangoJSONEncoder</span></span><a class=\"heading-anchor\" href=\"#django.core.serializers.json.DjangoJSONEncoder\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>JSON-serialisatorn använder <code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoJSONEncoder</span></code> för kodning. Den är en underklass till <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.JSONEncoder\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONEncoder</span></code></a> och hanterar dessa ytterligare typer:</p>\n<dl class=\"simple\">\n<dt><a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a></dt><dd><p>En sträng av formen <code class=\"docutils literal notranslate\"><span class=\"pre\">YYYY-MM-DDTHH:mm:ss.sssZ</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">YYY-MM-DDTHH:mm:ss.sss+HH:MM</span></code> enligt definitionen i <a class=\"reference external\" href=\"https://262.ecma-international.org/5.1/#sec-15.9.1.15\">ECMA-262</a>.</p>\n</dd>\n<dt><a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">date</span></code></a></dt><dd><p>En sträng av formen <code class=\"docutils literal notranslate\"><span class=\"pre\">YYYY-MM-DD</span></code> enligt definitionen i <a class=\"reference external\" href=\"https://262.ecma-international.org/5.1/#sec-15.9.1.15\">ECMA-262</a>.</p>\n</dd>\n<dt><a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.time\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">time</span></code></a></dt><dd><p>En sträng av formen <code class=\"docutils literal notranslate\"><span class=\"pre\">HH:MM:ss.sss</span></code> enligt definitionen i <a class=\"reference external\" href=\"https://262.ecma-international.org/5.1/#sec-15.9.1.15\">ECMA-262</a>.</p>\n</dd>\n<dt><a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">timedelta</span></code></a></dt><dd><p>En sträng som representerar en varaktighet enligt definitionen i ISO-8601. Till exempel representeras <code class=\"docutils literal notranslate\"><span class=\"pre\">timedelta(days=1,</span> <span class=\"pre\">hours=2,</span> <span class=\"pre\">seconds=3.4)</span></code> som <code class=\"docutils literal notranslate\"><span class=\"pre\">'P1DT02H00M03.400000S'</span></code>.</p>\n</dd>\n<dt><a class=\"reference external\" href=\"https://docs.python.org/3/library/decimal.html#decimal.Decimal\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Decimal</span></code></a>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Promise</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">django.utils.functional.lazy()</span></code> objekt), <a class=\"reference external\" href=\"https://docs.python.org/3/library/uuid.html#uuid.UUID\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UUID</span></code></a></dt><dd><p>En strängrepresentation av objektet.</p>\n</dd>\n</dl>\n</section>\n</section>\n<section id=\"serialization-formats-jsonl\">\n<span id=\"id4\"></span><h3>JSONL<a class=\"heading-anchor\" href=\"#serialization-formats-jsonl\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><em>JSONL</em> står för <em>JSON Lines</em>. I det här formatet separeras objekt med nya rader och varje rad innehåller ett giltigt JSON-objekt. JSONL-serialiserade data ser ut så här:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;4b678b301dfd8a4e0dad910de3ae245b&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;sessions.session&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">...</span><span class=\"p\">}}</span>\n<span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;88bea72c02274f3c9bf1cb2bb8cee4fc&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;sessions.session&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">...</span><span class=\"p\">}}</span>\n<span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;9cf0e26691b64147a67e2a9f06ad7a53&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;sessions.session&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"o\">...</span><span class=\"p\">}}</span>\n</code></pre></div>\n<p>JSONL kan vara användbart för att fylla på stora databaser, eftersom data kan bearbetas rad för rad i stället för att laddas in i minnet på en gång.</p>\n</section>\n<section id=\"yaml\">\n<h3>YAML<a class=\"heading-anchor\" href=\"#yaml\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>YAML-serialisering ser ganska lik ut som JSON. Objektlistan serialiseras som en sekvens mappningar med nycklarna ”pk”, ”model” och ”fields”. Varje fält är återigen en mappning där nyckeln är namnet på fältet och värdet är värdet:</p>\n<div class=\"code-block\" data-language=\"yaml\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">YAML</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=\"YAML code\"><code><span class=\"p p-Indicator\">-</span><span class=\"w\"> </span><span class=\"nt\">model</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">sessions.session</span>\n<span class=\"w\">  </span><span class=\"nt\">pk</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">4b678b301dfd8a4e0dad910de3ae245b</span>\n<span class=\"w\">  </span><span class=\"nt\">fields</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"nt\">expire_date</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">2013-01-16 08:16:59.844560+00:00</span>\n</code></pre></div>\n<p>Referensfält representeras återigen av PK eller en sekvens av PK.</p>\n</section>\n<section id=\"custom-serialization-formats\">\n<span id=\"id5\"></span><h3>Anpassade serialiseringsformat<a class=\"heading-anchor\" href=\"#custom-serialization-formats\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Förutom standardformaten kan du skapa ett anpassat serialiseringsformat.</p>\n<p>Låt oss till exempel titta på en serializer och deserializer för csv. Definiera först en klass för <code class=\"docutils literal notranslate\"><span class=\"pre\">Serializer</span></code> och en för <code class=\"docutils literal notranslate\"><span class=\"pre\">Deserializer</span></code>. Dessa kan åsidosätta befintliga serialiseringsformatklasser:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">väg/till/custom_csv_serializer.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 code\"><code> <span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">csv</span>\n\n <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span>\n <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">serializers</span>\n <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.serializers.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DeserializationError</span>\n\n\n <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Serializer</span><span class=\"p\">(</span><span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">python</span><span class=\"o\">.</span><span class=\"n\">Serializer</span><span class=\"p\">):</span>\n     <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_dump_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n         <span class=\"n\">dumped_object</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_dump_object</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n         <span class=\"n\">row</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">dumped_object</span><span class=\"p\">[</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">],</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">dumped_object</span><span class=\"p\">[</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">])]</span>\n         <span class=\"n\">row</span> <span class=\"o\">+=</span> <span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">dumped_object</span><span class=\"p\">[</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()]</span>\n         <span class=\"k\">return</span> <span class=\"s2\">&quot;,&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">),</span> <span class=\"n\">dumped_object</span><span class=\"p\">[</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">]</span>\n\n     <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">end_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n         <span class=\"n\">dumped_object_str</span><span class=\"p\">,</span> <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_dump_object</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n         <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">:</span>\n             <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"k\">for</span> <span class=\"n\">field</span> <span class=\"ow\">in</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"p\">]</span>\n             <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;,&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">fields</span><span class=\"p\">)</span>\n             <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"sa\">f</span><span class=\"s2\">&quot;model,</span><span class=\"si\">{</span><span class=\"n\">header</span><span class=\"si\">}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n         <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"n\">dumped_object_str</span><span class=\"si\">}</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n\n     <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">getvalue</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n         <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">python</span><span class=\"o\">.</span><span class=\"n\">Serializer</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">()</span>\n\n\n <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Deserializer</span><span class=\"p\">(</span><span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">python</span><span class=\"o\">.</span><span class=\"n\">Deserializer</span><span class=\"p\">):</span>\n     <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">stream_or_string</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">options</span><span class=\"p\">):</span>\n         <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">stream_or_string</span><span class=\"p\">,</span> <span class=\"nb\">bytes</span><span class=\"p\">):</span>\n             <span class=\"n\">stream_or_string</span> <span class=\"o\">=</span> <span class=\"n\">stream_or_string</span><span class=\"o\">.</span><span class=\"n\">decode</span><span class=\"p\">()</span>\n         <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">stream_or_string</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">):</span>\n             <span class=\"n\">stream_or_string</span> <span class=\"o\">=</span> <span class=\"n\">stream_or_string</span><span class=\"o\">.</span><span class=\"n\">splitlines</span><span class=\"p\">()</span>\n         <span class=\"k\">try</span><span class=\"p\">:</span>\n             <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">DictReader</span><span class=\"p\">(</span><span class=\"n\">stream_or_string</span><span class=\"p\">)</span>\n         <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> <span class=\"n\">exc</span><span class=\"p\">:</span>\n             <span class=\"k\">raise</span> <span class=\"n\">DeserializationError</span><span class=\"p\">()</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">exc</span>\n         <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">objects</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">options</span><span class=\"p\">)</span>\n\n     <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">_handle_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"p\">):</span>\n         <span class=\"k\">try</span><span class=\"p\">:</span>\n             <span class=\"n\">model_fields</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">[</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">_meta</span><span class=\"o\">.</span><span class=\"n\">fields</span>\n             <span class=\"n\">obj</span><span class=\"p\">[</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                 <span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">:</span> <span class=\"n\">obj</span><span class=\"p\">[</span><span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">]</span>\n                 <span class=\"k\">for</span> <span class=\"n\">field</span> <span class=\"ow\">in</span> <span class=\"n\">model_fields</span>\n                 <span class=\"k\">if</span> <span class=\"n\">field</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"n\">obj</span>\n             <span class=\"p\">}</span>\n             <span class=\"k\">yield from</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">_handle_object</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n         <span class=\"k\">except</span> <span class=\"p\">(</span><span class=\"ne\">GeneratorExit</span><span class=\"p\">,</span> <span class=\"n\">DeserializationError</span><span class=\"p\">):</span>\n             <span class=\"k\">raise</span>\n         <span class=\"k\">except</span> <span class=\"ne\">Exception</span> <span class=\"k\">as</span> <span class=\"n\">exc</span><span class=\"p\">:</span>\n             <span class=\"k\">raise</span> <span class=\"n\">DeserializationError</span><span class=\"p\">(</span><span class=\"sa\">f</span><span class=\"s2\">&quot;Error deserializing object: </span><span class=\"si\">{</span><span class=\"n\">exc</span><span class=\"si\">}</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span> <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">exc</span>\n</code></pre></figure>\n<p>Lägg sedan till modulen som innehåller serializer-definitionerna i din <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-SERIALIZATION_MODULES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SERIALIZATION_MODULES</span></code></a> setting:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">SERIALIZATION_MODULES</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;csv&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;path.to.custom_csv_serializer&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;json&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.core.serializers.json&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p>En klassdefinition för <code class=\"docutils literal notranslate\"><span class=\"pre\">Deserializer</span></code> har lagts till för vart och ett av de serialiseringsformat som tillhandahålls.</p>\n</aside>\n</section>\n</section>\n<section id=\"natural-keys\">\n<span id=\"topics-serialization-natural-keys\"></span><h2>Naturliga nycklar<a class=\"heading-anchor\" href=\"#natural-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Standardstrategin för serialisering av främmande nycklar och många-till-många-relationer är att serialisera värdet på primärnyckeln för objekten i relationen. Denna strategi fungerar bra för de flesta objekt, men den kan orsaka problem under vissa omständigheter.</p>\n<p>Tänk på fallet med en lista över objekt som har en främmande nyckel som refererar till <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/contenttypes/#django.contrib.contenttypes.models.ContentType\" title=\"django.contrib.contenttypes.models.ContentType\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ContentType</span></code></a>. Om du ska serialisera ett objekt som hänvisar till en innehållstyp måste du ha ett sätt att hänvisa till den innehållstypen till att börja med. Eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">ContentType</span></code>-objekt automatiskt skapas av Django under databassynkroniseringsprocessen är primärnyckeln för en viss innehållstyp inte lätt att förutsäga; det beror på hur och när <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> kördes. Detta gäller för alla modeller som automatiskt genererar objekt, särskilt inklusive <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.Permission\" title=\"django.contrib.auth.models.Permission\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Permission</span></code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.Group\" title=\"django.contrib.auth.models.Group\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Group</span></code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/contrib/auth/#django.contrib.auth.models.User\" title=\"django.contrib.auth.models.User\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">User</span></code></a>.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Du bör aldrig inkludera automatiskt genererade objekt i en fixtur eller andra serialiserade data. Av en slump kan de primära nycklarna i fixturen matcha dem i databasen och laddning av fixturen kommer inte att ha någon effekt. I det mer sannolika fallet att de inte matchar, kommer fixturladdningen att misslyckas med ett <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.db.IntegrityError\" title=\"django.db.IntegrityError\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">IntegrityError</span></code></a>.</p>\n</aside>\n<p>Det är också en fråga om bekvämlighet. Ett heltals-id är inte alltid det mest praktiska sättet att referera till ett objekt; ibland skulle en mer naturlig referens vara till hjälp.</p>\n<p>Det är av dessa skäl som Django tillhandahåller <em>naturliga nycklar</em>. En naturlig nyckel är en tupel av värden som kan användas för att unikt identifiera en objektinstans utan att använda det primära nyckelvärdet.</p>\n<section id=\"deserialization-of-natural-keys\">\n<h3>Deserialisering av naturliga nycklar<a class=\"heading-anchor\" href=\"#deserialization-of-natural-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tänk på följande två modeller:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"n\">birthdate</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">constraints</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UniqueConstraint</span><span class=\"p\">(</span>\n                <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_first_last_name&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Normalt skulle serialiserade data för <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> använda ett heltal för att hänvisa till författaren. I JSON kan en bok t.ex. serialiseras som:</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=\"o\">...</span>\n<span class=\"p\">{</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;store.book&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Mostly Harmless&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;author&quot;</span><span class=\"p\">:</span> <span class=\"mi\">42</span><span class=\"p\">}}</span>\n<span class=\"o\">...</span>\n</code></pre></div>\n<p>Det här är inte ett särskilt naturligt sätt att hänvisa till en författare. Det kräver att du känner till det primära nyckelvärdet för författaren; det kräver också att detta primära nyckelvärde är stabilt och förutsägbart.</p>\n<p>Men om vi lägger till naturlig nyckelhantering i Person blir fixturen mycket mer human. För att lägga till hantering av naturliga nycklar definierar du en standardhanterare för Person med en <code class=\"docutils literal notranslate\"><span class=\"pre\">get_by_natural_key()</span></code>-metod. I fallet med en Person kan en bra naturlig nyckel vara paret av för- och efternamn:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PersonManager</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_by_natural_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">birthdate</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">PersonManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">constraints</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UniqueConstraint</span><span class=\"p\">(</span>\n                <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_first_last_name&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n</code></pre></div>\n<p>Nu kan böcker använda den naturliga nyckeln för att hänvisa till <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code>-objekt:</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=\"o\">...</span>\n<span class=\"p\">{</span>\n    <span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;store.book&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Mostly Harmless&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;author&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Douglas&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Adams&quot;</span><span class=\"p\">]},</span>\n<span class=\"p\">}</span>\n<span class=\"o\">...</span>\n</code></pre></div>\n<p>När du försöker ladda dessa serialiserade data kommer Django att använda metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">get_by_natural_key()</span></code> för att lösa <code class=\"docutils literal notranslate\"><span class=\"pre\">[&quot;Douglas&quot;,</span> <span class=\"pre\">&quot;Adams&quot;]</span></code> till primärnyckeln för ett faktiskt <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code>-objekt.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Oavsett vilka fält du använder för en naturlig nyckel måste de kunna identifiera ett objekt på ett unikt sätt. Detta innebär vanligtvis att din modell kommer att ha en unikhetsklausul (antingen <code class=\"docutils literal notranslate\"><span class=\"pre\">unique=True</span></code> på ett enda fält, eller en <code class=\"docutils literal notranslate\"><span class=\"pre\">UniqueConstraint</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">unique_together</span></code> över flera fält) för fältet eller fälten i din naturliga nyckel. Unikhet behöver dock inte genomdrivas på databasnivå. Om du är säker på att en uppsättning fält kommer att vara effektivt unika kan du fortfarande använda dessa fält som en naturlig nyckel.</p>\n</aside>\n<p>Deserialisering av objekt utan primärnyckel kontrollerar alltid om modellens manager har en <code class=\"docutils literal notranslate\"><span class=\"pre\">get_by_natural_key()</span></code>-metod och om så är fallet används den för att fylla i det deserialiserade objektets primärnyckel.</p>\n</section>\n<section id=\"serialization-of-natural-keys\">\n<h3>Serialisering av naturliga nycklar<a class=\"heading-anchor\" href=\"#serialization-of-natural-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Så hur får man Django att ge ut en naturlig nyckel när man serialiserar ett objekt? För det första måste du lägga till en annan metod - den här gången till själva modellen:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">birthdate</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">PersonManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">constraints</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">UniqueConstraint</span><span class=\"p\">(</span>\n                <span class=\"n\">fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">],</span>\n                <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;unique_first_last_name&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">natural_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Den metoden ska alltid returnera en tupel med naturliga nycklar - i det här exemplet <code class=\"docutils literal notranslate\"><span class=\"pre\">(förnamn,</span> <span class=\"pre\">efternamn)</span></code>. När du sedan anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">serializers.serialize()</span></code> ger du argumenten <code class=\"docutils literal notranslate\"><span class=\"pre\">use_natural_foreign_keys=True</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">use_natural_primary_keys=True</span></code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">serialize</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"p\">[</span><span class=\"n\">book1</span><span class=\"p\">,</span> <span class=\"n\">book2</span><span class=\"p\">],</span>\n<span class=\"gp\">... </span>    <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">use_natural_foreign_keys</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">use_natural_primary_keys</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">use_natural_foreign_keys=True</span></code> anges kommer Django att använda metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">natural_key()</span></code> för att serialisera alla främmande nyckelreferenser till objekt av den typ som definierar metoden.</p>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">use_natural_primary_keys=True</span></code> anges kommer Django inte att tillhandahålla den primära nyckeln i de serialiserade data för detta objekt eftersom den kan beräknas under deserialisering:</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=\"o\">...</span>\n<span class=\"p\">{</span>\n    <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;store.person&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Douglas&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Adams&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;birth_date&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;1952-03-11&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n<span class=\"o\">...</span>\n</code></pre></div>\n<p>Detta kan vara användbart när du behöver ladda serialiserade data i en befintlig databas och du inte kan garantera att det serialiserade primärnyckelvärdet inte redan används, och inte behöver säkerställa att deserialiserade objekt behåller samma primärnycklar.</p>\n<p>Om du använder <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span></code></a> för att generera serialiserade data kan du använda kommandoradsflaggorna <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#cmdoption-dumpdata-natural-foreign\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">dumpdata</span> <span class=\"pre\">--natural-foreign</span></code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#cmdoption-dumpdata-natural-primary\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">dumpdata</span> <span class=\"pre\">--natural-primary</span></code></a> för att generera naturliga nycklar.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Du behöver inte definiera både <code class=\"docutils literal notranslate\"><span class=\"pre\">natural_key()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">get_by_natural_key()</span></code>. Om du inte vill att Django ska mata ut naturliga nycklar under serialisering, men du vill behålla möjligheten att ladda naturliga nycklar, kan du välja att inte implementera metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">natural_key()</span></code>.</p>\n<p>Omvänt, om du (av någon konstig anledning) vill att Django ska mata ut naturliga nycklar under serialisering, men <em>inte</em> kunna ladda dessa nyckelvärden, definierar du bara inte metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">get_by_natural_key()</span></code>.</p>\n</aside>\n</section>\n<section id=\"natural-keys-and-forward-references\">\n<span id=\"id6\"></span><h3>Naturliga nycklar och framåtriktade referenser<a class=\"heading-anchor\" href=\"#natural-keys-and-forward-references\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ibland när du använder <a class=\"reference internal\" href=\"#topics-serialization-natural-keys\"><span class=\"std std-ref\">natural foreign keys</span></a> behöver du deserialisera data där ett objekt har en främmande nyckel som refererar till ett annat objekt som ännu inte har deserialiserats. Detta kallas för en ”framåtriktad referens”.</p>\n<p>Anta t.ex. att du har följande objekt i din fixtur:</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=\"o\">...</span>\n<span class=\"p\">{</span>\n    <span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;store.book&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Mostly Harmless&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;author&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Douglas&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Adams&quot;</span><span class=\"p\">]},</span>\n<span class=\"p\">},</span>\n<span class=\"o\">...</span>\n<span class=\"p\">{</span><span class=\"s2\">&quot;model&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;store.person&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Douglas&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;last_name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Adams&quot;</span><span class=\"p\">}},</span>\n<span class=\"o\">...</span>\n</code></pre></div>\n<p>För att hantera denna situation måste du skicka <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_forward_references=True</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">serializers.deserialize()</span></code>. Detta kommer att ställa in attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">deferred_fields</span></code> på <code class=\"docutils literal notranslate\"><span class=\"pre\">DeserializedObject</span></code>-instanser. Du kommer att behöva hålla reda på <code class=\"docutils literal notranslate\"><span class=\"pre\">DeserializedObject</span></code> instanser där detta attribut inte är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> och senare anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">save_deferred_fields()</span></code> på dem.</p>\n<p>Typisk användning ser ut så här:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">objs_with_deferred_fields</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n<span class=\"k\">for</span> <span class=\"n\">obj</span> <span class=\"ow\">in</span> <span class=\"n\">serializers</span><span class=\"o\">.</span><span class=\"n\">deserialize</span><span class=\"p\">(</span><span class=\"s2\">&quot;json&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">handle_forward_references</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">deferred_fields</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">objs_with_deferred_fields</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">obj</span><span class=\"p\">)</span>\n\n<span class=\"k\">for</span> <span class=\"n\">obj</span> <span class=\"ow\">in</span> <span class=\"n\">objs_with_deferred_fields</span><span class=\"p\">:</span>\n    <span class=\"n\">obj</span><span class=\"o\">.</span><span class=\"n\">save_deferred_fields</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>För att detta ska fungera måste <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> på referensmodellen ha <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code>.</p>\n</section>\n<section id=\"dependencies-during-serialization\">\n<h3>Beroenden under serialisering<a class=\"heading-anchor\" href=\"#dependencies-during-serialization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det är ofta möjligt att undvika att uttryckligen behöva hantera framåtriktade referenser genom att vara försiktig med ordningsföljden för objekt inom en fixtur.</p>\n<p>För att hjälpa till med detta kommer anrop till <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span></code></a> som använder alternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#cmdoption-dumpdata-natural-foreign\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">dumpdata</span> <span class=\"pre\">--natural-foreign</span></code></a> att serialisera alla modeller med en <code class=\"docutils literal notranslate\"><span class=\"pre\">natural_key()</span></code>-metod före serialisering av vanliga primärnyckelobjekt.</p>\n<p>Detta kanske dock inte alltid är tillräckligt. Om din naturliga nyckel hänvisar till ett annat objekt (genom att använda en främmande nyckel eller en naturlig nyckel till ett annat objekt som en del av en naturlig nyckel), måste du kunna säkerställa att de objekt som en naturlig nyckel är beroende av förekommer i de serialiserade data innan den naturliga nyckeln kräver dem.</p>\n<p>För att kontrollera denna ordning kan du definiera beroenden på dina <code class=\"docutils literal notranslate\"><span class=\"pre\">natural_key()</span></code>-metoder. Detta gör du genom att ställa in ett <code class=\"docutils literal notranslate\"><span class=\"pre\">dependencies</span></code> attribut på själva <code class=\"docutils literal notranslate\"><span class=\"pre\">natural_key()</span></code> metoden.</p>\n<p>Låt oss till exempel lägga till en naturlig nyckel i modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> från exemplet ovan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Person</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">natural_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,)</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">natural_key</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Den naturliga nyckeln för en <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> är en kombination av dess namn och dess författare. Detta innebär att <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> måste serialiseras före <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code>. För att definiera detta beroende lägger vi till en extra rad:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">natural_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,)</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">natural_key</span><span class=\"p\">()</span>\n\n\n<span class=\"n\">natural_key</span><span class=\"o\">.</span><span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;example_app.person&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Denna definition säkerställer att alla <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code>-objekt serialiseras före alla <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code>-objekt. I sin tur kommer alla objekt som refererar till <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> att serialiseras efter att både <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Book</span></code> har serialiserats.</p>\n</section>\n</section>","rootId":"serializing-django-objects","toc":[{"title":"Serialisering av data","anchor":"serializing-data","children":[{"title":"Delmängd av fält","anchor":"subset-of-fields","children":[]},{"title":"Nedärvda modeller","anchor":"inherited-models","children":[]}]},{"title":"Deserialisering av data","anchor":"deserializing-data","children":[]},{"title":"Format för serialisering","anchor":"serialization-formats","children":[{"title":"XML","anchor":"xml","children":[]},{"title":"JSON","anchor":"serialization-formats-json","children":[{"title":"DjangoJSONEncoder","anchor":"djangojsonencoder","children":[]}]},{"title":"JSONL","anchor":"serialization-formats-jsonl","children":[]},{"title":"YAML","anchor":"yaml","children":[]},{"title":"Anpassade serialiseringsformat","anchor":"custom-serialization-formats","children":[]}]},{"title":"Naturliga nycklar","anchor":"natural-keys","children":[{"title":"Deserialisering av naturliga nycklar","anchor":"deserialization-of-natural-keys","children":[]},{"title":"Serialisering av naturliga nycklar","anchor":"serialization-of-natural-keys","children":[]},{"title":"Naturliga nycklar och framåtriktade referenser","anchor":"natural-keys-and-forward-references","children":[]},{"title":"Beroenden under serialisering","anchor":"dependencies-during-serialization","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/5.2/topics/"}],"prev":{"docname":"topics/performance","title":"Prestanda och optimering","url":"/sv/5.2/topics/performance/"},"next":{"docname":"topics/settings","title":"Django-inställningar","url":"/sv/5.2/topics/settings/"},"formats":{"html":"/sv/5.2/topics/serialization/","markdown":"/sv/5.2/topics/serialization.md","json":"/sv/5.2/topics/serialization.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/serialization.txt","official":"https://docs.djangoproject.com/sv/5.2/topics/serialization/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}