{"title":"Göra förfrågningar","version":"5.2","locale":"sv","docname":"topics/db/queries","url":"/sv/5.2/topics/db/queries/","canonical":"https://djangodocs.dev/sv/5.2/topics/db/queries/","summary":"När du har skapat dina datamodeller ger Django dig automatiskt ett API för databasabstraktion som låter dig skapa, hämta, uppdatera och radera objekt.","html":"<h1>Göra förfrågningar<a class=\"heading-anchor\" href=\"#making-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>När du har skapat dina <a class=\"reference internal\" href=\"/sv/5.2/topics/db/models/\"><span class=\"doc\">datamodeller</span></a> ger Django dig automatiskt ett API för databasabstraktion som låter dig skapa, hämta, uppdatera och radera objekt. Detta dokument förklarar hur man använder detta API. Se <a class=\"reference internal\" href=\"/sv/5.2/ref/models/\"><span class=\"doc\">data model reference</span></a> för fullständig information om alla de olika alternativen för modelluppslagning.</p>\n<p>I den här handboken (och i referensen) hänvisar vi till följande modeller, som utgör en bloggapplikation:</p>\n<div class=\"code-block\" data-language=\"python\"><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\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Blog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    tagline <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Author</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    email <span class=\"o\">=</span> models<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Entry</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    blog <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>Blog<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    headline <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">)</span>\n    body_text <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    pub_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    mod_date <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">(</span>default<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">)</span>\n    authors <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Author<span class=\"p\">)</span>\n    number_of_comments <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    number_of_pingbacks <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    rating <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>headline\n</code></pre></div>\n<section id=\"creating-objects\">\n<h2>Skapa objekt<a class=\"heading-anchor\" href=\"#creating-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att representera databastabelldata i Python-objekt använder Django ett intuitivt system: En modellklass representerar en databastabell, och en instans av den klassen representerar en viss post i databastabellen.</p>\n<p>För att skapa ett objekt, instansiera det med hjälp av nyckelordsargument till modellklassen och anropa sedan <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> för att spara det i databasen.</p>\n<p>Förutsatt att modellerna finns i filen <code class=\"docutils literal notranslate\">models.py</code> i en Django-app med namnet <code class=\"docutils literal notranslate\">blog</code>, följer här ett exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">blog.models</span> <span class=\"kn\">import</span> Blog\n<span class=\"gp\">&gt;&gt;&gt; </span>b <span class=\"o\">=</span> Blog<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Beatles Blog&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;All the latest Beatles news.&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta utför en <code class=\"docutils literal notranslate\">INSERT</code> SQL-sats bakom kulisserna. Django träffar inte databasen förrän du uttryckligen anropar <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>.</p>\n<p>Metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> har inget returvärde.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> har ett antal avancerade alternativ som inte beskrivs här. Se dokumentationen för <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> för fullständig information.</p>\n<p>Om du vill skapa och spara ett objekt i ett enda steg använder du metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.create\" title=\"django.db.models.query.QuerySet.create\"><code class=\"xref py py-meth docutils literal notranslate\">create()</code></a>.</p>\n</aside>\n</section>\n<section id=\"saving-changes-to-objects\">\n<h2>Spara ändringar av objekt<a class=\"heading-anchor\" href=\"#saving-changes-to-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du vill spara ändringar i ett objekt som redan finns i databasen använder du <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>.</p>\n<p>Med en <code class=\"docutils literal notranslate\">Blog</code>-instans <code class=\"docutils literal notranslate\">b5</code> som redan har sparats i databasen ändrar detta exempel dess namn och uppdaterar dess post i databasen:</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>b5<span class=\"o\">.</span>name <span class=\"o\">=</span> <span class=\"s2\">&quot;New name&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b5<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta utför en <code class=\"docutils literal notranslate\">UPDATE</code> SQL-sats bakom kulisserna. Django träffar inte databasen förrän du uttryckligen anropar <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>.</p>\n<section id=\"saving-foreignkey-and-manytomanyfield-fields\">\n<h3>Spara fälten <code class=\"docutils literal notranslate\">ForeignKey</code> och <code class=\"docutils literal notranslate\">ManyToManyField</code><a class=\"heading-anchor\" href=\"#saving-foreignkey-and-manytomanyfield-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Uppdatering av ett <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>-fält fungerar exakt på samma sätt som att spara ett vanligt fält - tilldela ett objekt av rätt typ till fältet i fråga. Detta exempel uppdaterar attributet <code class=\"docutils literal notranslate\">blog</code> för en <code class=\"docutils literal notranslate\">Entry</code>-instans <code class=\"docutils literal notranslate\">entry</code>, förutsatt att lämpliga instanser av <code class=\"docutils literal notranslate\">Entry</code> och <code class=\"docutils literal notranslate\">Blog</code> redan har sparats i databasen (så att vi kan hämta dem nedan):</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">blog.models</span> <span class=\"kn\">import</span> Blog<span class=\"p\">,</span> Entry\n<span class=\"gp\">&gt;&gt;&gt; </span>entry <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>cheese_blog <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>entry<span class=\"o\">.</span>blog <span class=\"o\">=</span> cheese_blog\n<span class=\"gp\">&gt;&gt;&gt; </span>entry<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Uppdatering av en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> fungerar lite annorlunda - använd metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/relations/#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\">add()</code></a> på fältet för att lägga till en post i relationen. Detta exempel lägger till <code class=\"docutils literal notranslate\">Author</code>-instansen <code class=\"docutils literal notranslate\">joe</code> till <code class=\"docutils literal notranslate\">entry</code>-objektet:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">blog.models</span> <span class=\"kn\">import</span> Author\n<span class=\"gp\">&gt;&gt;&gt; </span>joe <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Joe&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>entry<span class=\"o\">.</span>authors<span class=\"o\">.</span>add<span class=\"p\">(</span>joe<span class=\"p\">)</span>\n</code></pre></div>\n<p>För att lägga till flera poster till en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> på en gång, inkludera flera argument i anropet till <a class=\"reference internal\" href=\"/sv/5.2/ref/models/relations/#django.db.models.fields.related.RelatedManager.add\" title=\"django.db.models.fields.related.RelatedManager.add\"><code class=\"xref py py-meth docutils literal notranslate\">add()</code></a>, så här:</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>john <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>paul <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>george <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;George&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>ringo <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Ringo&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>entry<span class=\"o\">.</span>authors<span class=\"o\">.</span>add<span class=\"p\">(</span>john<span class=\"p\">,</span> paul<span class=\"p\">,</span> george<span class=\"p\">,</span> ringo<span class=\"p\">)</span>\n</code></pre></div>\n<p>Django kommer att klaga om du försöker tilldela eller lägga till ett objekt av fel typ.</p>\n</section>\n</section>\n<section id=\"retrieving-objects\">\n<span id=\"id1\"></span><h2>Hämta objekt<a class=\"heading-anchor\" href=\"#retrieving-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att hämta objekt från din databas, konstruera 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\">QuerySet</code></a> via en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> på din modellklass.</p>\n<p>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\">QuerySet</code></a> representerar en samling objekt från din databas. Den kan ha noll, ett eller många <em>filter</em>. Filter begränsar frågeresultaten baserat på de angivna parametrarna. I SQL-termer motsvarar 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\">QuerySet</code></a> en <code class=\"docutils literal notranslate\">SELECT</code>-sats, och ett filter är en begränsningsklausul som <code class=\"docutils literal notranslate\">WHERE</code> eller <code class=\"docutils literal notranslate\">LIMIT</code>.</p>\n<p>Du får 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\">QuerySet</code></a> genom att använda din modells <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a>. Varje modell har minst en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a>, och den kallas <a class=\"reference internal\" href=\"/sv/5.2/ref/models/class/#django.db.models.Model.objects\" title=\"django.db.models.Model.objects\"><code class=\"xref py py-attr docutils literal notranslate\">objects</code></a> som standard. Du kan komma åt den direkt via modellklassen, så här:</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>Blog<span class=\"o\">.</span>objects\n<span class=\"go\">&lt;django.db.models.manager.Manager object at ...&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b <span class=\"o\">=</span> Blog<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Foo&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;Bar&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>objects\n<span class=\"go\">Traceback:</span>\n<span class=\"go\">    ...</span>\n<span class=\"go\">AttributeError: &quot;Manager isn&#39;t accessible via Blog instances.&quot;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>En <code class=\"docutils literal notranslate\">Manager</code> är endast tillgänglig via modellklasser, snarare än från modellinstanser, för att upprätthålla en åtskillnad mellan operationer på ”tabellnivå” och operationer på ”postnivå”.</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> är den huvudsakliga källan till querysets för en modell. Till exempel returnerar <code class=\"docutils literal notranslate\">Blog.objects.all()</code> 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\">QuerySet</code></a> som innehåller alla <code class=\"docutils literal notranslate\">Blog</code>-objekt i databasen.</p>\n<section id=\"retrieving-all-objects\">\n<h3>Hämta alla objekt<a class=\"heading-anchor\" href=\"#retrieving-all-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Det enklaste sättet att hämta objekt från en tabell är att hämta dem alla. För att göra detta använder du metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\">all()</code></a> på en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a>:</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>all_entries <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n</code></pre></div>\n<p>Metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\">all()</code></a> returnerar 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\">QuerySet</code></a> av alla objekt i databasen.</p>\n</section>\n<section id=\"retrieving-specific-objects-with-filters\">\n<h3>Hämta specifika objekt med filter<a class=\"heading-anchor\" href=\"#retrieving-specific-objects-with-filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Den <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\">QuerySet</code></a> som returneras av <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\">all()</code></a> beskriver alla objekt i databastabellen. Vanligtvis behöver du dock bara välja en delmängd av den fullständiga uppsättningen objekt.</p>\n<p>För att skapa en sådan delmängd förfinar du den ursprungliga <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\">QuerySet</code></a> genom att lägga till filtervillkor. De två vanligaste sätten att förfina 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\">QuerySet</code></a> är:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">filter(**kwargs)</code></dt><dd><p>Returnerar en ny <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\">QuerySet</code></a> som innehåller objekt som matchar de angivna uppslagsparametrarna.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">exkludera(**kwargs)</code></dt><dd><p>Returnerar en ny <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\">QuerySet</code></a> som innehåller objekt som <em>inte</em> matchar de angivna uppslagsparametrarna.</p>\n</dd>\n</dl>\n<p>Uppslagsparametrarna (<code class=\"docutils literal notranslate\">**kwargs</code> i ovanstående funktionsdefinitioner) ska vara i det format som beskrivs i <a class=\"reference internal\" href=\"#field-lookups\">Field lookups</a> nedan.</p>\n<p>Om du till exempel vill få 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\">QuerySet</code></a> med bloggposter från år 2006 använder du <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> 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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span><span class=\"mi\">2006</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Med den förvalda managerklassen är det samma sak 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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span><span class=\"mi\">2006</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"chaining-filters\">\n<span id=\"id2\"></span><h4>Kedja filter<a class=\"heading-anchor\" href=\"#chaining-filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Resultatet av att förfina 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\">QuerySet</code></a> är i sig 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\">QuerySet</code></a>, så det är möjligt att kedja förfiningar tillsammans. Till exempel:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>exclude<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    pub_date__gte<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__gte<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Detta tar den ursprungliga <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\">QuerySet</code></a> av alla poster i databasen, lägger till ett filter, sedan en uteslutning, sedan ytterligare ett filter. Slutresultatet är 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\">QuerySet</code></a> som innehåller alla poster med en rubrik som börjar med ”What”, som publicerades mellan den 30 januari 2005 och den aktuella dagen.</p>\n</section>\n<section id=\"filtered-querysets-are-unique\">\n<span id=\"id3\"></span><h4>Filtrerade <code class=\"docutils literal notranslate\">QuerySet</code> är unika<a class=\"heading-anchor\" href=\"#filtered-querysets-are-unique\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Varje gång du förfinar 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\">QuerySet</code></a> får du en helt ny <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\">QuerySet</code></a> som inte på något sätt är bunden till den tidigare <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\">QuerySet</code></a>. Varje förfining skapar en separat och distinkt <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\">QuerySet</code></a> som kan lagras, användas och återanvändas.</p>\n<p>Exempel:</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>q1 <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q2 <span class=\"o\">=</span> q1<span class=\"o\">.</span>exclude<span class=\"p\">(</span>pub_date__gte<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q3 <span class=\"o\">=</span> q1<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__gte<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">())</span>\n</code></pre></div>\n<p>Dessa tre querysets är separata. Den första är en bas <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\">QuerySet</code></a> som innehåller alla poster som innehåller en rubrik som börjar med ”What”. Den andra är en delmängd av den första, med ett ytterligare kriterium som utesluter poster vars <code class=\"docutils literal notranslate\">pub_date</code> är idag eller i framtiden. Den tredje är en delmängd av den första, med ett ytterligare kriterium som endast väljer poster vars <code class=\"docutils literal notranslate\">pub_date</code> är idag eller i framtiden. Den ursprungliga <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\">QuerySet</code></a> (<code class=\"docutils literal notranslate\">q1</code>) påverkas inte av förfiningsprocessen.</p>\n</section>\n<section id=\"querysets-are-lazy\">\n<span id=\"id4\"></span><h4>”QuerySet”: ”De är lata<a class=\"heading-anchor\" href=\"#querysets-are-lazy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">QuerySet</code>-objekt är lata - handlingen att skapa 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\">QuerySet</code></a> involverar inte någon databasaktivitet. Du kan stapla filter tillsammans hela dagen, och Django kommer faktiskt inte att köra frågan förrän <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\">QuerySet</code></a> är <em>utvärderad</em>. Ta en titt på detta exempel:</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>q <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q <span class=\"o\">=</span> q<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__lte<span class=\"o\">=</span>datetime<span class=\"o\">.</span>date<span class=\"o\">.</span>today<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>q <span class=\"o\">=</span> q<span class=\"o\">.</span>exclude<span class=\"p\">(</span>body_text__icontains<span class=\"o\">=</span><span class=\"s2\">&quot;food&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>q<span class=\"p\">)</span>\n</code></pre></div>\n<p>Även om det här ser ut som tre träffar i databasen, träffar den i själva verket databasen bara en gång, på den sista raden (<code class=\"docutils literal notranslate\">print(q)</code>). I allmänhet hämtas inte resultaten från 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\">QuerySet</code></a> från databasen förrän du ”ber” om dem. När du gör det <em>utvärderas</em> <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\">QuerySet</code></a> genom att komma åt databasen. För mer information om exakt när utvärderingen sker, se <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#when-querysets-are-evaluated\"><span class=\"std std-ref\">När QuerySet utvärderas</span></a>.</p>\n</section>\n</section>\n<section id=\"retrieving-a-single-object-with-get\">\n<span id=\"retrieving-single-object-with-get\"></span><h3>Hämta ett enskilt objekt med <code class=\"docutils literal notranslate\">get()</code><a class=\"heading-anchor\" href=\"#retrieving-a-single-object-with-get\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> ger dig alltid 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\">QuerySet</code></a>, även om bara ett enda objekt matchar frågan - i det här fallet kommer det att vara 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\">QuerySet</code></a> som innehåller ett enda element.</p>\n<p>Om du vet att det bara finns ett objekt som matchar din fråga kan du använda metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a> på en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> som returnerar objektet direkt:</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>one_entry <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Du kan använda vilket frågeuttryck som helst med <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>, precis som med <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> - se Fältuppslagningar nedan.</p>\n<p>Observera att det är skillnad mellan att använda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a> och att använda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> med en slice av <code class=\"docutils literal notranslate\">[0]</code>. Om det inte finns några resultat som matchar frågan kommer <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a> att ge upphov till ett <code class=\"docutils literal notranslate\">DoesNotExist</code> undantag. Detta undantag är ett attribut för den modellklass som frågan utförs på - så i koden ovan, om det inte finns något <code class=\"docutils literal notranslate\">Entry</code>-objekt med en primärnyckel på 1, kommer Django att höja <code class=\"docutils literal notranslate\">Entry.DoesNotExist</code>.</p>\n<p>På samma sätt kommer Django att klaga om mer än ett objekt matchar <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>-frågan. I det här fallet kommer det att höja <a class=\"reference internal\" href=\"/sv/5.2/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned\" title=\"django.core.exceptions.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\">MultipleObjectsReturned</code></a>, vilket återigen är ett attribut för själva modellklassen.</p>\n</section>\n<section id=\"other-queryset-methods\">\n<h3>Andra metoder för <code class=\"docutils literal notranslate\">QuerySet</code><a class=\"heading-anchor\" href=\"#other-queryset-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För det mesta använder du <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.all\" title=\"django.db.models.query.QuerySet.all\"><code class=\"xref py py-meth docutils literal notranslate\">all()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a> när du behöver leta upp objekt från databasen. Men det är långt ifrån allt som finns; se <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#queryset-api\"><span class=\"std std-ref\">QuerySet API Reference</span></a> för en fullständig lista över alla olika <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\">QuerySet</code></a>-metoder.</p>\n</section>\n<section id=\"limiting-querysets\">\n<span id=\"id5\"></span><h3>Begränsning av <code class=\"docutils literal notranslate\">QuerySet</code><a class=\"heading-anchor\" href=\"#limiting-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Använd en delmängd av Pythons array-slicing-syntax för att begränsa din <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\">QuerySet</code></a> till ett visst antal resultat. Detta är motsvarigheten till SQL:s <code class=\"docutils literal notranslate\">LIMIT</code> och <code class=\"docutils literal notranslate\">OFFSET</code>-klausuler.</p>\n<p>Till exempel returneras de 5 första objekten (<code class=\"docutils literal notranslate\">LIMIT 5</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Detta returnerar det sjätte till det tionde objektet (<code class=\"docutils literal notranslate\">OFFSET 5 LIMIT 5</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()[</span><span class=\"mi\">5</span><span class=\"p\">:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Negativ indexering (t.ex. <code class=\"docutils literal notranslate\">Entry.objects.all()[-1]</code>) stöds inte.</p>\n<p>Generellt sett returnerar skivning av 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\">QuerySet</code></a> en ny <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\">QuerySet</code></a> – den utvärderar inte frågan. Ett undantag är om du använder parametern ”step” i Pythons slice-syntax. Till exempel skulle detta faktiskt utföra frågan för att returnera en lista över varje <em>andra</em> objekt av de första 10:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()[:</span><span class=\"mi\">10</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Ytterligare filtrering eller ordning av en skivad frågeuppsättning är förbjuden på grund av den tvetydiga karaktären hos hur det kan fungera.</p>\n<p>Om du vill hämta ett <em>enkelt</em> objekt i stället för en lista (t.ex. <code class=\"docutils literal notranslate\">SELECT foo FROM bar LIMIT 1</code>) använder du ett index i stället för en slice. Till exempel returnerar detta den första <code class=\"docutils literal notranslate\">Entry</code> i databasen, efter att ha ordnat posterna alfabetiskt efter rubrik:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Detta motsvarar ungefär:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span>get<span class=\"p\">()</span>\n</code></pre></div>\n<p>Observera dock att den första av dessa kommer att ge upphov till <code class=\"docutils literal notranslate\">IndexError</code> medan den andra kommer att ge upphov till <code class=\"docutils literal notranslate\">DoesNotExist</code> om inga objekt matchar de angivna kriterierna. Se <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a> för mer information.</p>\n</section>\n<section id=\"field-lookups\">\n<span id=\"field-lookups-intro\"></span><h3>Fältuppslagningar<a class=\"heading-anchor\" href=\"#field-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Fältuppslagningar är hur du anger köttet i en SQL <code class=\"docutils literal notranslate\">WHERE</code>-klausul. De anges som nyckelordsargument till <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\">QuerySet</code></a>-metoderna <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>.</p>\n<p>Argument för nyckelord i Basic Lookups har formen <code class=\"docutils literal notranslate\">field__lookuptype=value</code>. (Det är en dubbel-underscore). Till exempel:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__lte<span class=\"o\">=</span><span class=\"s2\">&quot;2006-01-01&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>översätts (ungefär) till följande SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"o\">*</span> <span class=\"k\">FROM</span> blog_entry <span class=\"k\">WHERE</span> pub_date <span class=\"o\">&lt;=</span> <span class=\"s1\">&#39;2006-01-01&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<aside class=\"admonition-how-this-is-possible admonition\" role=\"note\">\n<p class=\"admonition-title\">Hur detta är möjligt</p>\n<p>Python har möjlighet att definiera funktioner som accepterar godtyckliga namn-värde-argument vars namn och värden utvärderas vid körning. För mer information, se <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/controlflow.html#tut-keywordargs\" title=\"(in Python v3.14)\"><span>Keyword Arguments</span></a> i den officiella Python-handledningen.</p>\n</aside>\n<p>Fältet som anges i en lookup måste vara namnet på ett modellfält. Det finns dock ett undantag, i händelse av en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> kan du ange fältnamnet suffixerat med <code class=\"docutils literal notranslate\">_id</code>. I det här fallet förväntas parametern value innehålla råvärdet för den utländska modellens primärnyckel. Till exempel:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog_id<span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du skickar ett ogiltigt nyckelordsargument kommer en lookup-funktion att ge upphov till <code class=\"docutils literal notranslate\">TypeError</code>.</p>\n<p>Databasens API stöder ungefär två dussin uppslagstyper; en fullständig referens finns i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">field lookup reference</span></a>. För att ge dig en försmak av vad som finns tillgängligt, här är några av de vanligaste uppslagningarna du förmodligen kommer att använda:</p>\n<dl>\n<dt><code class=\"xref std std-lookup docutils literal notranslate\">exakt</code></dt><dd><p>En ”exakt” matchning. Till exempel:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>headline__exact<span class=\"o\">=</span><span class=\"s2\">&quot;Cat bites dog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Skulle generera SQL enligt dessa linjer:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"p\">...</span> <span class=\"k\">WHERE</span> headline <span class=\"o\">=</span> <span class=\"s1\">&#39;Cat bites dog&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Om du inte anger någon uppslagstyp - det vill säga om ditt nyckelordsargument inte innehåller ett dubbelt understreck - antas uppslagstypen vara ”exakt”.</p>\n<p>Till exempel är följande två påståenden likvärdiga:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>id__exact<span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>  <span class=\"c1\"># Explicit form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>  <span class=\"c1\"># __exact is implied</span>\n</code></pre></div>\n<p>Detta är för enkelhetens skull, eftersom <code class=\"docutils literal notranslate\">exakta</code> uppslagningar är det vanliga fallet.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\">iexact</code></a></dt><dd><p>En matchning utan skiftlägeskänslighet. Så, frågan:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name__iexact<span class=\"o\">=</span><span class=\"s2\">&quot;beatles blog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Skulle matcha en <code class=\"docutils literal notranslate\">Blogg</code> med titeln <code class=\"docutils literal notranslate\">&quot;Beatles Blog&quot;</code>, <code class=\"docutils literal notranslate\">&quot;beatles blog&quot;</code>, eller till och med <code class=\"docutils literal notranslate\">&quot;BeAtlES blOG&quot;</code>.</p>\n</dd>\n<dt><code class=\"xref std std-lookup docutils literal notranslate\">innehåller</code></dt><dd><p>Test med skiftlägeskänslighet. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Översätts ungefär till denna SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"p\">...</span> <span class=\"k\">WHERE</span> headline <span class=\"k\">LIKE</span> <span class=\"s1\">&#39;%Lennon%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Observera att detta kommer att matcha rubriken <code class=\"docutils literal notranslate\">'Today Lennon honored'</code> men inte <code class=\"docutils literal notranslate\">'today lennon honored'</code>.</p>\n<p>Det finns också en version som inte tar hänsyn till skiftlägeskod, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\">icontains</code></a>.</p>\n</dd>\n<dt><code class=\"xref std std-lookup docutils literal notranslate\">startarmed</code>, <code class=\"xref std std-lookup docutils literal notranslate\">slutarmed</code></dt><dd><p>Börjar med respektive slutar med sökning. Det finns också versioner utan skiftlägeskänslighet som heter <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\">istartswith</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\">iendswith</code></a>.</p>\n</dd>\n</dl>\n<p>Återigen, detta skrapar bara på ytan. En fullständig referens finns i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">field lookup reference</span></a>.</p>\n</section>\n<section id=\"lookups-that-span-relationships\">\n<span id=\"id6\"></span><h3>Uppslagningar som sträcker sig över relationer<a class=\"heading-anchor\" href=\"#lookups-that-span-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django erbjuder ett kraftfullt och intuitivt sätt att ”följa” relationer i uppslagningar, och tar hand om SQL <code class=\"docutils literal notranslate\">JOIN</code> åt dig automatiskt, bakom kulisserna. För att spänna över en relation använder du fältnamnet på relaterade fält i olika modeller, separerade med dubbla understreck, tills du kommer till det fält du vill ha.</p>\n<p>Detta exempel hämtar alla <code class=\"docutils literal notranslate\">Entry</code>-objekt med en <code class=\"docutils literal notranslate\">Blog</code> vars <code class=\"docutils literal notranslate\">namn</code> är <code class=\"docutils literal notranslate\">'Beatles Blog'</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog__name<span class=\"o\">=</span><span class=\"s2\">&quot;Beatles Blog&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Denna spänning kan vara så djup som du vill.</p>\n<p>Det fungerar också baklänges. Även om det <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-attr docutils literal notranslate\">kan anpassas</code></a>, hänvisar du som standard till ett ”omvänt” förhållande i en uppslagning med hjälp av modellens gemena namn.</p>\n<p>Detta exempel hämtar alla <code class=\"docutils literal notranslate\">Blog</code> objekt som har minst en <code class=\"docutils literal notranslate\">Entry</code> vars <code class=\"docutils literal notranslate\">headline</code> innehåller <code class=\"docutils literal notranslate\">'Lennon'</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>entry__headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du filtrerar över flera relationer och en av de mellanliggande modellerna inte har ett värde som uppfyller filtervillkoret, kommer Django att behandla det som om det finns ett tomt (alla värden är <code class=\"docutils literal notranslate\">NULL</code>), men giltigt, objekt där. Allt detta innebär är att inget fel kommer att uppstå. Till exempel i detta filter:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>entry__authors__name<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>(om det fanns en relaterad <code class=\"docutils literal notranslate\">Author</code>-modell), om det inte fanns någon <code class=\"docutils literal notranslate\">author</code> associerad med en post, skulle det behandlas som om det inte heller fanns något <code class=\"docutils literal notranslate\">name</code> bifogat, snarare än att ge ett fel på grund av den saknade <code class=\"docutils literal notranslate\">author</code>. Vanligtvis är detta precis vad du vill ska hända. Det enda fallet där det kan vara förvirrande är om du använder <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-isnull\"><code class=\"xref std std-lookup docutils literal notranslate\">isnull</code></a>. Alltså:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>entry__authors__name__isnull<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>kommer att returnera <code class=\"docutils literal notranslate\">Blog</code>-objekt som har ett tomt <code class=\"docutils literal notranslate\">namn</code> på <code class=\"docutils literal notranslate\">författaren</code> och även de som har en tom <code class=\"docutils literal notranslate\">författare</code> på <code class=\"docutils literal notranslate\">inlägget</code>. Om du inte vill ha de senare objekten kan du skriva:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>entry__authors__isnull<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> entry__authors__name__isnull<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"spanning-multi-valued-relationships\">\n<span id=\"id7\"></span><h4>Spänner över flervärdiga relationer<a class=\"heading-anchor\" href=\"#spanning-multi-valued-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>När man spänner över en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> eller en omvänd <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> (t.ex. från <code class=\"docutils literal notranslate\">Blog</code> till <code class=\"docutils literal notranslate\">Entry</code>), väcker filtrering på flera attribut frågan om man ska kräva att varje attribut sammanfaller i samma relaterade objekt. Vi kan söka efter bloggar som har ett inlägg från 2008 med <em>”Lennon”</em> i rubriken, eller så kan vi söka efter bloggar som bara har något inlägg från 2008 samt något nyare eller äldre inlägg med <em>”Lennon”</em> i rubriken.</p>\n<p>För att välja ut alla bloggar som innehåller minst ett inlägg från 2008 som har <em>”Lennon”</em> i rubriken (samma inlägg uppfyller båda villkoren), skulle vi skriva:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>entry__headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span> entry__pub_date__year<span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Annars, för att utföra en mer tillåtande fråga som väljer alla bloggar med bara <em>något</em> inlägg med <em>”Lennon”</em> i rubriken och <em>något</em> inlägg från 2008, skulle vi skriva:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>entry__headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>\n    entry__pub_date__year<span class=\"o\">=</span><span class=\"mi\">2008</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Anta att det bara finns en blogg som har både poster som innehåller <em>”Lennon”</em> och poster från 2008, men att ingen av posterna från 2008 innehöll <em>”Lennon”</em>. Den första frågan skulle inte returnera några bloggar, men den andra frågan skulle returnera den enda bloggen. (Detta beror på att de poster som väljs av det andra filtret kanske eller kanske inte är desamma som posterna i det första filtret. Vi filtrerar <code class=\"docutils literal notranslate\">Blog</code>-objekten med varje filteruttalande, inte <code class=\"docutils literal notranslate\">Entry</code>-objekten.) Kort sagt, om varje villkor behöver matcha samma relaterade objekt, bör varje innehålla ett enda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a>-anrop.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Eftersom den andra (mer tillåtande) frågan kedjar flera filter utförs flera kopplingar till den primära modellen, vilket kan ge upphov till dubbletter.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date\n<span class=\"gp\">&gt;&gt;&gt; </span>beatles <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Beatles Blog&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>pop <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Pop Music Blog&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    blog<span class=\"o\">=</span>beatles<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    headline<span class=\"o\">=</span><span class=\"s2\">&quot;New Lennon Biography&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Entry: New Lennon Biography&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    blog<span class=\"o\">=</span>beatles<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    headline<span class=\"o\">=</span><span class=\"s2\">&quot;New Lennon Biography in Paperback&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2009</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Entry: New Lennon Biography in Paperback&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    blog<span class=\"o\">=</span>pop<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    headline<span class=\"o\">=</span><span class=\"s2\">&quot;Best Albums of 2008&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2008</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Entry: Best Albums of 2008&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    blog<span class=\"o\">=</span>pop<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    headline<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon Would Have Loved Hip Hop&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2020</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Entry: Lennon Would Have Loved Hip Hop&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    entry__headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    entry__pub_date__year<span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Blog: Beatles Blog&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    entry__headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    entry__pub_date__year<span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Blog: Beatles Blog&gt;, &lt;Blog: Beatles Blog&gt;, &lt;Blog: Pop Music Blog]&gt;</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Beteendet hos <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> för frågor som spänner över flervärdesrelationer, som beskrivs ovan, implementeras inte på motsvarande sätt för <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a>. Istället kommer villkoren i ett enda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a>-anrop inte nödvändigtvis att hänvisa till samma objekt.</p>\n<p>Till exempel skulle följande fråga utesluta bloggar som innehåller <em>både</em> poster med <em>”Lennon”</em> i rubriken <em>och</em> poster som publicerades 2008:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>exclude<span class=\"p\">(</span>\n    entry__headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n    entry__pub_date__year<span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Till skillnad från beteendet när du använder <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> kommer detta dock inte att begränsa bloggar baserat på poster som uppfyller båda villkoren. För att göra det, dvs. för att välja alla bloggar som inte innehåller poster som publicerats med <em>”Lennon”</em> och som publicerades 2008, måste du göra två frågor:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>exclude<span class=\"p\">(</span>\n    entry__in<span class=\"o\">=</span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n        headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n        pub_date__year<span class=\"o\">=</span><span class=\"mi\">2008</span><span class=\"p\">,</span>\n    <span class=\"p\">),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n</section>\n<section id=\"filters-can-reference-fields-on-the-model\">\n<span id=\"using-f-expressions-in-filters\"></span><h3>Filter kan referera till fält i modellen<a class=\"heading-anchor\" href=\"#filters-can-reference-fields-on-the-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I de exempel som vi har gett hittills har vi konstruerat filter som jämför värdet på ett modellfält med en konstant. Men hur gör man om man vill jämföra värdet på ett modellfält med ett annat fält i samma modell?</p>\n<p>Django tillhandahåller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\">F expressions</code></a> för att tillåta sådana jämförelser. Instanser av <code class=\"docutils literal notranslate\">F()</code> fungerar som en referens till ett modellfält i en fråga. Dessa referenser kan sedan användas i frågefilter för att jämföra värdena för två olika fält på samma modellinstans.</p>\n<p>Om du till exempel vill hitta en lista över alla bloggposter som har fått fler kommentarer än pingbacks, konstruerar vi ett <code class=\"docutils literal notranslate\">F()</code>-objekt för att referera till pingback-antalet och använder det <code class=\"docutils literal notranslate\">F()</code>-objektet i frågan:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>number_of_comments__gt<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;number_of_pingbacks&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Django stöder användningen av addition, subtraktion, multiplikation, division, modulo och potensaritmetik med <code class=\"docutils literal notranslate\">F()</code>-objekt, både med konstanter och med andra <code class=\"docutils literal notranslate\">F()</code>-objekt. För att hitta alla bloggposter med mer än <em>två gånger</em> så många kommentarer som pingbacks ändrar vi frågan:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>number_of_comments__gt<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;number_of_pingbacks&quot;</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>För att hitta alla poster där betyget för posten är mindre än summan av antalet pingbackar och antalet kommentarer, skulle vi ställa frågan:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>rating__lt<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;number_of_comments&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;number_of_pingbacks&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Du kan också använda dubbla understrykningar för att spänna över relationer i ett <code class=\"docutils literal notranslate\">F()</code>-objekt. Ett <code class=\"docutils literal notranslate\">F()</code>-objekt med en dubbel understrykning introducerar alla kopplingar som behövs för att komma åt det relaterade objektet. Om du t.ex. vill hämta alla poster där författarens namn är detsamma som bloggens namn kan du ställa följande fråga:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>authors__name<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;blog__name&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>För datum- och datum/tid-fält kan du lägga till eller dra ifrån ett <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\">timedelta</code></a>-objekt. Följande skulle returnera alla poster som ändrades mer än 3 dagar efter att de publicerades:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> timedelta\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>mod_date__gt<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Objekten <code class=\"docutils literal notranslate\">F()</code> stöder bitvisa operationer med <code class=\"docutils literal notranslate\">.bitand()</code>, <code class=\"docutils literal notranslate\">.bitor()</code>, <code class=\"docutils literal notranslate\">.bitxor()</code>, <code class=\"docutils literal notranslate\">.bitrightshift()</code> och <code class=\"docutils literal notranslate\">.bitleftshift()</code>. Till exempel:</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>F<span class=\"p\">(</span><span class=\"s2\">&quot;somefield&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>bitand<span class=\"p\">(</span><span class=\"mi\">16</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-oracle admonition\" role=\"note\">\n<p class=\"admonition-title\">Oracle</p>\n<p>Oracle stöder inte bitvis XOR-operation.</p>\n</aside>\n</section>\n<section id=\"expressions-can-reference-transforms\">\n<span id=\"using-transforms-in-expressions\"></span><h3>Uttryck kan referera till transformationer<a class=\"heading-anchor\" href=\"#expressions-can-reference-transforms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django stöder användning av transformationer i uttryck.</p>\n<p>Till exempel för att hitta alla <code class=\"docutils literal notranslate\">Entry</code>-objekt som publicerades samma år som de senast ändrades:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;mod_date__year&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>För att hitta det tidigaste året som en post publicerades kan vi ställa frågan:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Min\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>first_published_year<span class=\"o\">=</span>Min<span class=\"p\">(</span><span class=\"s2\">&quot;pub_date__year&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Detta exempel visar värdet på den högst rankade posten och det totala antalet kommentarer på alla poster för varje år:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> OuterRef<span class=\"p\">,</span> Subquery<span class=\"p\">,</span> Sum\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;pub_date__year&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    top_rating<span class=\"o\">=</span>Subquery<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>            pub_date__year<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;pub_date__year&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"p\">)</span>\n<span class=\"gp\">... </span>        <span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s2\">&quot;-rating&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>        <span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    total_comments<span class=\"o\">=</span>Sum<span class=\"p\">(</span><span class=\"s2\">&quot;number_of_comments&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"the-pk-lookup-shortcut\">\n<h3>Genvägen <code class=\"docutils literal notranslate\">pk</code> för uppslagning<a class=\"heading-anchor\" href=\"#the-pk-lookup-shortcut\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För enkelhetens skull tillhandahåller Django en genväg för uppslagning <code class=\"docutils literal notranslate\">pk</code>, som står för ”primary key”.</p>\n<p>I exemplet med modellen <code class=\"docutils literal notranslate\">Blog</code> är primärnyckeln fältet <code class=\"docutils literal notranslate\">id</code>, så dessa tre påståenden är likvärdiga:</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>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>id__exact<span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>  <span class=\"c1\"># Explicit form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>  <span class=\"c1\"># __exact is implied</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>  <span class=\"c1\"># pk implies id__exact</span>\n</code></pre></div>\n<p>Användningen av <code class=\"docutils literal notranslate\">pk</code> är inte begränsad till <code class=\"docutils literal notranslate\">__exact</code>-frågor - alla frågetermer kan kombineras med <code class=\"docutils literal notranslate\">pk</code> för att utföra en fråga på primärnyckeln i en modell:</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=\"go\"># Get blogs entries with id 1, 4 and 7</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pk__in<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">])</span>\n\n<span class=\"go\"># Get all blog entries with id &gt; 14</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pk__gt<span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">pk</code>-uppslag fungerar också över sammanfogningar. Till exempel är dessa tre uttalanden likvärdiga:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog__id__exact<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># Explicit form</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog__id<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># __exact is implied</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog__pk<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>  <span class=\"c1\"># __pk implies __id__exact</span>\n</code></pre></div>\n</section>\n<section id=\"escaping-percent-signs-and-underscores-in-like-statements\">\n<h3>Utelämnande av procenttecken och understrykningstecken i <code class=\"docutils literal notranslate\">LIKE</code>-satser<a class=\"heading-anchor\" href=\"#escaping-percent-signs-and-underscores-in-like-statements\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>De fältuppslagningar som motsvarar <code class=\"docutils literal notranslate\">LIKE</code> SQL-satser (<code class=\"docutils literal notranslate\">iexact</code>, <code class=\"docutils literal notranslate\">contains</code>, <code class=\"docutils literal notranslate\">icontains</code>, <code class=\"docutils literal notranslate\">startswith</code>, <code class=\"docutils literal notranslate\">istartswith</code>, <code class=\"docutils literal notranslate\">endswith</code> och <code class=\"docutils literal notranslate\">iendswith</code>) kommer automatiskt att undkomma de två specialtecken som används i <code class=\"docutils literal notranslate\">LIKE</code>-satser - procenttecknet och understrecket. (I en <code class=\"docutils literal notranslate\">LIKE</code>-sats betyder procenttecknet ett jokertecken med flera tecken och understreckaren ett jokertecken med ett tecken)</p>\n<p>Detta innebär att saker och ting ska fungera intuitivt, så att abstraktionen inte läcker. Om du t.ex. vill hämta alla poster som innehåller ett procenttecken använder du procenttecknet som vilket annat tecken som helst:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;%&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Django tar hand om citering åt dig; den resulterande SQL kommer att se ut ungefär så här:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"p\">...</span> <span class=\"k\">WHERE</span> headline <span class=\"k\">LIKE</span> <span class=\"s1\">&#39;%\\%%&#39;</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Detsamma gäller för understrykningstecken. Både procenttecken och understrykningar hanteras transparent åt dig.</p>\n</section>\n<section id=\"caching-and-querysets\">\n<span id=\"id8\"></span><h3>Cachelagring och ”QuerySet<a class=\"heading-anchor\" href=\"#caching-and-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Varje <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\">QuerySet</code></a> innehåller en cache för att minimera databasåtkomst. Att förstå hur det fungerar gör att du kan skriva den mest effektiva koden.</p>\n<p>I en nyskapad <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\">QuerySet</code></a> är cacheminnet tomt. Första gången 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\">QuerySet</code></a> utvärderas - och därmed en databasfråga sker - sparar Django frågeresultaten i <code class=\"xref py py-class docutils literal notranslate\">QuerySet</code> itereras över). Efterföljande utvärderingar av <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\">QuerySet</code></a> återanvänder de cachade resultaten.</p>\n<p>Tänk på detta cachningsbeteende, eftersom det kan drabba dig om du inte använder dina <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\">QuerySet</code></a> på rätt sätt. Till exempel kommer följande att skapa två <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\">QuerySet</code></a>s, utvärdera dem och kasta bort dem:</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=\"nb\">print</span><span class=\"p\">([</span>e<span class=\"o\">.</span>headline <span class=\"k\">for</span> e <span class=\"ow\">in</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span>e<span class=\"o\">.</span>pub_date <span class=\"k\">for</span> e <span class=\"ow\">in</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()])</span>\n</code></pre></div>\n<p>Det innebär att samma databasförfrågan kommer att köras två gånger, vilket effektivt fördubblar din databasbelastning. Det finns också en möjlighet att de två listorna kanske inte innehåller samma databasposter, eftersom en <code class=\"docutils literal notranslate\">Entry</code> kan ha lagts till eller tagits bort i den delade sekunden mellan de två förfrågningarna.</p>\n<p>För att undvika detta problem, spara <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\">QuerySet</code></a> och återanvänd den:</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>queryset <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span>p<span class=\"o\">.</span>headline <span class=\"k\">for</span> p <span class=\"ow\">in</span> queryset<span class=\"p\">])</span>  <span class=\"c1\"># Evaluate the query set.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span>p<span class=\"o\">.</span>pub_date <span class=\"k\">for</span> p <span class=\"ow\">in</span> queryset<span class=\"p\">])</span>  <span class=\"c1\"># Reuse the cache from the evaluation.</span>\n</code></pre></div>\n<section id=\"when-querysets-are-not-cached\">\n<h4>När <code class=\"docutils literal notranslate\">QuerySet</code> inte cachelagras<a class=\"heading-anchor\" href=\"#when-querysets-are-not-cached\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Querysets cachelagrar inte alltid sina resultat.  När endast <em>en del</em> av frågeuppsättningen utvärderas kontrolleras cacheminnet, men om det inte fylls på så cachas inte de objekt som returneras av den efterföljande frågan. Specifikt innebär detta att <a class=\"reference internal\" href=\"#limiting-querysets\"><span class=\"std std-ref\">begränsning av queryset</span></a> med hjälp av en array-slice eller ett index inte kommer att fylla på cacheminnet.</p>\n<p>Om man t.ex. upprepade gånger hämtar ett visst index i ett queryset-objekt kommer databasen att genomsökas varje gång:</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>queryset <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>queryset<span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>  <span class=\"c1\"># Queries the database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>queryset<span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>  <span class=\"c1\"># Queries the database again</span>\n</code></pre></div>\n<p>Om hela frågeuppsättningen redan har utvärderats kommer dock cacheminnet att kontrolleras i stället:</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>queryset <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span>entry <span class=\"k\">for</span> entry <span class=\"ow\">in</span> queryset<span class=\"p\">]</span>  <span class=\"c1\"># Queries the database</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>queryset<span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>  <span class=\"c1\"># Uses cache</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>queryset<span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>  <span class=\"c1\"># Uses cache</span>\n</code></pre></div>\n<p>Här följer några exempel på andra åtgärder som leder till att hela frågeuppsättningen utvärderas och därmed fyller på cacheminnet:</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=\"p\">[</span>entry <span class=\"k\">for</span> entry <span class=\"ow\">in</span> queryset<span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">bool</span><span class=\"p\">(</span>queryset<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>entry <span class=\"ow\">in</span> queryset\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">list</span><span class=\"p\">(</span>queryset<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>Att bara skriva ut querysetet kommer inte att fylla på cachen. Detta beror på att anropet till <code class=\"docutils literal notranslate\">__repr__()</code> endast returnerar en del av hela frågeuppsättningen.</p>\n</aside>\n</section>\n</section>\n</section>\n<section id=\"asynchronous-queries\">\n<span id=\"async-queries\"></span><h2>Asynkrona förfrågningar<a class=\"heading-anchor\" href=\"#asynchronous-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du skriver asynkrona vyer eller kod kan du inte använda ORM för frågor på det sätt som vi har beskrivit ovan, eftersom du inte kan anropa <em>blockerande</em> synkron kod från asynkron kod - det kommer att blockera händelseslingan (eller, mer troligt, Django kommer att märka och höja en <code class=\"docutils literal notranslate\">SynchronousOnlyOperation</code> för att förhindra att det händer).</p>\n<p>Lyckligtvis kan du göra många frågor med hjälp av Djangos asynkrona fråge-API. Varje metod som kan blockera - till exempel <code class=\"docutils literal notranslate\">get()</code> eller <code class=\"docutils literal notranslate\">delete()</code> - har en asynkron variant (<code class=\"docutils literal notranslate\">aget()</code> eller <code class=\"docutils literal notranslate\">adelete()</code>), och när du itererar över resultat kan du använda asynkron iteration (<code class=\"docutils literal notranslate\">async for</code>) istället.</p>\n<section id=\"query-iteration\">\n<h3>Fråga iteration<a class=\"heading-anchor\" href=\"#query-iteration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Standardmetoden för att iterera över en fråga - med <code class=\"docutils literal notranslate\">for</code> - kommer att resultera i en blockerande databasfråga bakom kulisserna eftersom Django laddar resultaten vid iterationstiden. För att åtgärda detta kan du byta till <code class=\"docutils literal notranslate\">async for</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">async</span> <span class=\"k\">for</span> entry <span class=\"ow\">in</span> Authors<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;A&quot;</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Tänk på att du inte heller kan göra andra saker som kan iterera över queryset, till exempel att linda <code class=\"docutils literal notranslate\">list()</code> runt den för att tvinga fram dess utvärdering (du kan använda <code class=\"docutils literal notranslate\">async for</code> i en comprehension, om du vill det).</p>\n<p>Eftersom <code class=\"docutils literal notranslate\">QuerySet</code>-metoder som <code class=\"docutils literal notranslate\">filter()</code> och <code class=\"docutils literal notranslate\">exclude()</code> faktiskt inte kör frågan - de ställer in queryset för att köras när det itereras över - kan du använda dem fritt i asynkron kod. För en guide till vilka metoder som kan fortsätta att användas på det här sättet och vilka som har asynkrona versioner, läs nästa avsnitt.</p>\n</section>\n<section id=\"queryset-and-manager-methods\">\n<h3><code class=\"docutils literal notranslate\">QuerySet</code> och manager-metoder<a class=\"heading-anchor\" href=\"#queryset-and-manager-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Vissa metoder för hanterare och frågeuppsättningar - som <code class=\"docutils literal notranslate\">get()</code> och <code class=\"docutils literal notranslate\">first()</code> - tvingar fram exekvering av frågeuppsättningen och är blockerande. Vissa, som <code class=\"docutils literal notranslate\">filter()</code> och <code class=\"docutils literal notranslate\">exclude()</code>, tvingar inte fram exekvering och är därför säkra att köra från asynkron kod. Men hur ska du kunna se skillnaden?</p>\n<p>Även om du kan rota runt och se om det finns en <code class=\"docutils literal notranslate\">a</code>-prefixerad version av metoden (till exempel har vi <code class=\"docutils literal notranslate\">aget()</code> men inte <code class=\"docutils literal notranslate\">afilter()</code>), finns det ett mer logiskt sätt - leta upp vilken typ av metod det är i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/\"><span class=\"doc\">QuerySet-referensen</span></a>.</p>\n<p>Där hittar du metoderna för QuerySets grupperade i två avsnitt:</p>\n<ul class=\"simple\">\n<li><p><em>Metoder som returnerar nya querysets</em>: Dessa är de icke-blockerande och har inga asynkrona versioner. Du är fri att använda dessa i alla situationer, men läs noterna om <code class=\"docutils literal notranslate\">defer()</code> och <code class=\"docutils literal notranslate\">only()</code> innan du använder dem.</p></li>\n<li><p><em>Metoder som inte returnerar querysets</em>: Dessa är de blockerande och har asynkrona versioner - det asynkrona namnet för varje metod anges i dokumentationen, men vårt standardmönster är att lägga till prefixet <code class=\"docutils literal notranslate\">a</code>.</p></li>\n</ul>\n<p>Med hjälp av denna distinktion kan du räkna ut när du behöver använda asynkrona versioner och när du inte behöver göra det. Här är till exempel en giltig asynkron fråga:</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>user <span class=\"o\">=</span> <span class=\"k\">await</span> User<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>username<span class=\"o\">=</span>my_input<span class=\"p\">)</span><span class=\"o\">.</span>afirst<span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">filter()</code> returnerar en queryset, och därför går det bra att fortsätta kedja den i en asynkron miljö, medan <code class=\"docutils literal notranslate\">first()</code> utvärderar och returnerar en modellinstans - därför ändrar vi till <code class=\"docutils literal notranslate\">afirst()</code> och använder <code class=\"docutils literal notranslate\">await</code> i början av hela uttrycket för att anropa det på ett asynkronvänligt sätt.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Om du glömmer att lägga in <code class=\"docutils literal notranslate\">await</code>-delen kan du se fel som <em>”coroutine-objektet har inget attribut x”</em> eller <em>”&lt;coroutine …&gt;”</em> strängar i stället för dina modellinstanser. Om du någonsin ser dessa, saknar du en <code class=\"docutils literal notranslate\">await</code> någonstans för att göra den coroutine till ett verkligt värde.</p>\n</aside>\n</section>\n<section id=\"transactions\">\n<h3>Transaktioner<a class=\"heading-anchor\" href=\"#transactions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Transaktioner stöds <strong>inte</strong> för närvarande med asynkrona frågor och uppdateringar. Du kommer att upptäcka att försök att använda en sådan ger upphov till <code class=\"docutils literal notranslate\">SynchronousOnlyOperation</code>.</p>\n<p>Om du vill använda en transaktion föreslår vi att du skriver din ORM-kod i en separat, synkron funktion och sedan anropar den med hjälp av <code class=\"docutils literal notranslate\">sync_to_async</code> - se <a class=\"reference internal\" href=\"/sv/5.2/topics/async/\"><span class=\"doc\">Asynkront stöd</span></a> för mer information.</p>\n</section>\n</section>\n<section id=\"querying-jsonfield\">\n<span id=\"id9\"></span><h2>Fråga om <code class=\"docutils literal notranslate\">JSONField</code><a class=\"heading-anchor\" href=\"#querying-jsonfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Lookups implementation är annorlunda i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a>, främst på grund av förekomsten av nyckeltransformationer. För att demonstrera kommer vi att använda följande exempelmodell:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Dog</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    data <span class=\"o\">=</span> models<span class=\"o\">.</span>JSONField<span class=\"p\">(</span>null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<section id=\"storing-and-querying-for-none\">\n<h3>Lagring av och frågor om <code class=\"docutils literal notranslate\">None</code><a class=\"heading-anchor\" href=\"#storing-and-querying-for-none\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Som med andra fält kommer lagring av <code class=\"docutils literal notranslate\">None</code> som fältets värde att lagra det som SQL <code class=\"docutils literal notranslate\">NULL</code>. Även om det inte rekommenderas är det möjligt att lagra JSON skalär <code class=\"docutils literal notranslate\">null</code> istället för SQL <code class=\"docutils literal notranslate\">NULL</code> genom att använda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#django.db.models.Value\" title=\"django.db.models.Value\"><code class=\"xref py py-class docutils literal notranslate\">Value(None, JSONField())</code></a>.</p>\n<p>Oavsett vilket av värdena som lagras, när det hämtas från databasen, är Python-representationen av JSON-skalaren <code class=\"docutils literal notranslate\">null</code> densamma som SQL <code class=\"docutils literal notranslate\">NULL</code>, dvs <code class=\"docutils literal notranslate\">None</code>. Därför kan det vara svårt att skilja mellan dem.</p>\n<p>Detta gäller endast för <code class=\"docutils literal notranslate\">None</code> som fältets värde på högsta nivå. Om <code class=\"docutils literal notranslate\">None</code> är inuti en <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#list\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">list</code></a> eller <a class=\"reference external\" href=\"https://docs.python.org/3/library/stdtypes.html#dict\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">dict</code></a>, kommer det alltid att tolkas som JSON <code class=\"docutils literal notranslate\">null</code>.</p>\n<p>Vid frågor kommer värdet <code class=\"docutils literal notranslate\">None</code> alltid att tolkas som JSON <code class=\"docutils literal notranslate\">null</code>. För att fråga efter SQL <code class=\"docutils literal notranslate\">NULL</code>, använd <code class=\"xref std std-lookup docutils literal notranslate\">isnull`</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Max&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>  <span class=\"c1\"># SQL NULL.</span>\n<span class=\"go\">&lt;Dog: Max&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Archie&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> JSONField<span class=\"p\">()))</span>  <span class=\"c1\"># JSON null.</span>\n<span class=\"go\">&lt;Dog: Archie&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Archie&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> JSONField<span class=\"p\">()))</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Archie&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__isnull<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Max&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__isnull<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Archie&gt;]&gt;</span>\n</code></pre></div>\n<p>Om du inte är säker på att du vill arbeta med SQL-värden av typen <code class=\"docutils literal notranslate\">NULL</code>, bör du överväga att ange <code class=\"docutils literal notranslate\">null=False</code> och tillhandahålla en lämplig standard för tomma värden, t.ex. <code class=\"docutils literal notranslate\">default=dict</code>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Lagring av JSON-skalaren <code class=\"docutils literal notranslate\">null</code> bryter inte mot <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\">null=False</code></a>.</p>\n</aside>\n</section>\n<section id=\"key-index-and-path-transforms\">\n<span id=\"std-fieldlookup-jsonfield.key\"></span><h3>Nyckel-, index- och banomvandlingar<a class=\"heading-anchor\" href=\"#key-index-and-path-transforms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du vill göra en sökning baserad på en viss nyckel i en ordbok använder du den nyckeln som uppslagsnamn:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    data<span class=\"o\">=</span><span class=\"p\">{</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>            <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>            <span class=\"s2\">&quot;other_pets&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n<span class=\"gp\">... </span>                <span class=\"p\">{</span>\n<span class=\"gp\">... </span>                    <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Fishy&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>                <span class=\"p\">}</span>\n<span class=\"gp\">... </span>            <span class=\"p\">],</span>\n<span class=\"gp\">... </span>        <span class=\"p\">},</span>\n<span class=\"gp\">... </span>    <span class=\"p\">},</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Dog: Rufus&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"kc\">None</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Meg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__breed<span class=\"o\">=</span><span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n<p>Flera nycklar kan kedjas ihop för att bilda en sökvägsuppslagning:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__owner__name<span class=\"o\">=</span><span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;]&gt;</span>\n</code></pre></div>\n<p>Om nyckeln är ett heltal tolkas den som en indextransform i en array:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__owner__other_pets__0__name<span class=\"o\">=</span><span class=\"s2\">&quot;Fishy&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;]&gt;</span>\n</code></pre></div>\n<p>Om den nyckel som du vill söka på krockar med namnet på en annan lookup, använd istället lookupen <a class=\"reference internal\" href=\"#std-fieldlookup-jsonfield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a>.</p>\n<p>För att söka efter nycklar som saknas, använd <code class=\"docutils literal notranslate\">isnull</code> lookup:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Shep&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Shep&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__owner__isnull<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Shep&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Uppslagningsexemplen ovan använder implicit uppslagningen <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\">exact</code></a>. Nyckel-, index- och sökvägstransformationer kan också kedjas med: <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\">icontains</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-endswith\"><code class=\"xref std std-lookup docutils literal notranslate\">endswith</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\">iendswith</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\">iexact</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-regex\"><code class=\"xref std std-lookup docutils literal notranslate\">regex</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-iregex\"><code class=\"xref std std-lookup docutils literal notranslate\">iregex</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-startswith\"><code class=\"xref std std-lookup docutils literal notranslate\">startswith</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\">istartswith</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-lt\"><code class=\"xref std std-lookup docutils literal notranslate\">lt</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-lte\"><code class=\"xref std std-lookup docutils literal notranslate\">lte</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-gt\"><code class=\"xref std std-lookup docutils literal notranslate\">gt</code></a>, and <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-gte\"><code class=\"xref std std-lookup docutils literal notranslate\">gte</code></a>, as well as with <a class=\"reference internal\" href=\"#containment-and-key-lookups\"><span class=\"std std-ref\">Inneslutning och nyckeluppslagningar</span></a>.</p>\n</aside>\n<section id=\"module-django.db.models.fields.json\">\n<span id=\"kt-expressions\"></span><h4><code class=\"docutils literal notranslate\">KT()</code> uttryck<a class=\"heading-anchor\" href=\"#module-django.db.models.fields.json\"><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.db.models.fields.json.KT\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">KT</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">lookup</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.fields.json.KT\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Representerar textvärdet för en nyckel-, index- eller sökvägstransformation av <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\">JSONField</code></a>. Du kan använda den dubbla understrecksnoteringen i <code class=\"docutils literal notranslate\">lookup</code> för att kedja nyckel- och indextransformationer för ordböcker.</p>\n<p>Till exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.fields.json</span> <span class=\"kn\">import</span> KT\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Shep&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    data<span class=\"o\">=</span><span class=\"p\">{</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;owner&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;Bob&quot;</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;lhasa apso&quot;</span><span class=\"p\">],</span>\n<span class=\"gp\">... </span>    <span class=\"p\">},</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Dog: Shep&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    first_breed<span class=\"o\">=</span>KT<span class=\"p\">(</span><span class=\"s2\">&quot;data__breed__1&quot;</span><span class=\"p\">),</span> owner_name<span class=\"o\">=</span>KT<span class=\"p\">(</span><span class=\"s2\">&quot;data__owner__name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>filter<span class=\"p\">(</span>first_breed__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;lhasa&quot;</span><span class=\"p\">,</span> owner_name<span class=\"o\">=</span><span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Shep&gt;]&gt;</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>På grund av det sätt på vilket sökvägsfrågor fungerar är <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a> inte garanterade att producera uttömmande uppsättningar. Om du vill inkludera objekt som inte har sökvägen, lägg till <code class=\"docutils literal notranslate\">isnull</code> lookup.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Eftersom vilken sträng som helst kan vara en nyckel i ett JSON-objekt kommer alla andra uppslagningar än de som anges nedan att tolkas som en nyckeluppslagning. Inga felmeddelanden skickas ut. Var extra försiktig med skrivfel och kontrollera alltid att dina frågor fungerar som du tänkt dig.</p>\n</aside>\n<aside class=\"admonition-mariadb-and-oracle-users admonition\" role=\"note\">\n<p class=\"admonition-title\">MariaDB- och Oracle-användare</p>\n<p>Om du använder <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\">order_by()</code></a> på nyckel-, index- eller sökvägstransformationer sorteras objekten med hjälp av strängrepresentationen av värdena. Detta beror på att MariaDB och Oracle Database inte tillhandahåller en funktion som konverterar JSON-värden till deras motsvarande SQL-värden.</p>\n</aside>\n<aside class=\"admonition-oracle-users admonition\" role=\"note\">\n<p class=\"admonition-title\">Oracle-användare</p>\n<p>Om du använder <code class=\"docutils literal notranslate\">None</code> som uppslagsvärde i en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a>-fråga i Oracle Database returneras objekt som inte har <code class=\"docutils literal notranslate\">null</code> som värde på den angivna sökvägen, inklusive objekt som inte har sökvägen. På andra databasbackends kommer frågan att returnera objekt som har sökvägen och värdet är inte <code class=\"docutils literal notranslate\">null</code>.</p>\n</aside>\n<aside class=\"admonition-postgresql-users admonition\" role=\"note\">\n<p class=\"admonition-title\">PostgreSQL-användare</p>\n<p>På PostgreSQL, om endast en nyckel eller ett index används, används SQL-operatören <code class=\"docutils literal notranslate\">-&gt;</code>. Om flera operatörer används används operatören `` #&gt;``.</p>\n</aside>\n<aside class=\"admonition-sqlite-users admonition\" role=\"note\">\n<p class=\"admonition-title\">SQLite-användare</p>\n<p>I SQLite kommer strängvärdena <code class=\"docutils literal notranslate\">&quot;true&quot;</code>, <code class=\"docutils literal notranslate\">&quot;false&quot;</code> och <code class=\"docutils literal notranslate\">&quot;null&quot;</code> alltid att tolkas som <code class=\"docutils literal notranslate\">True</code>, <code class=\"docutils literal notranslate\">False</code> respektive JSON <code class=\"docutils literal notranslate\">null</code>.</p>\n</aside>\n</section>\n</section>\n<section id=\"containment-and-key-lookups\">\n<span id=\"id10\"></span><h3>Inneslutning och nyckeluppslagningar<a class=\"heading-anchor\" href=\"#containment-and-key-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"contains\">\n<span id=\"std-fieldlookup-jsonfield.contains\"></span><h4><code class=\"docutils literal notranslate\">innehåller</code><a class=\"heading-anchor\" href=\"#contains\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Uppslaget <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> åsidosätts för <code class=\"docutils literal notranslate\">JSONField</code>. De objekt som returneras är de där den givna <code class=\"docutils literal notranslate\">dict</code> av nyckel-värdepar alla finns i fältets toppnivå. Till exempel:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Rufus&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Meg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{})</span>\n<span class=\"go\">&lt;Dog: Fred&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Merry&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;pekingese&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tricks&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;fetch&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;dance&quot;</span><span class=\"p\">]}</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contains<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contains<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contains<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;tricks&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;dance&quot;</span><span class=\"p\">]})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Merry&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-oracle-and-sqlite admonition\" role=\"note\">\n<p class=\"admonition-title\">Oracle och SQLite</p>\n<p><code class=\"docutils literal notranslate\">contains</code> stöds inte av Oracle och SQLite.</p>\n</aside>\n</section>\n<section id=\"contained-by\">\n<span id=\"std-fieldlookup-jsonfield.contained_by\"></span><h4><code class=\"docutils literal notranslate\">innehålls_av</code><a class=\"heading-anchor\" href=\"#contained-by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Detta är motsatsen till <a class=\"reference internal\" href=\"#std-fieldlookup-jsonfield.contains\"><code class=\"xref std std-lookup docutils literal notranslate\">contains</code></a> - de objekt som returneras är de där nyckel-värdeparen i objektet är en delmängd av dem i det värde som skickas. Till exempel:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Rufus&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Meg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{})</span>\n<span class=\"go\">&lt;Dog: Fred&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Merry&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;pekingese&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tricks&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;fetch&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;dance&quot;</span><span class=\"p\">]}</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contained_by<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;, &lt;Dog: Fred&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__contained_by<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Fred&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    data__contained_by<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;pekingese&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;tricks&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;dance&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;fetch&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;hug&quot;</span><span class=\"p\">]}</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Merry&gt;, &lt;Dog: Fred&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-oracle-and-sqlite admonition\" role=\"note\">\n<p class=\"admonition-title\">Oracle och SQLite</p>\n<p><code class=\"docutils literal notranslate\">contained_by</code> stöds inte av Oracle och SQLite.</p>\n</aside>\n</section>\n<section id=\"has-key\">\n<span id=\"std-fieldlookup-jsonfield.has_key\"></span><h4><code class=\"docutils literal notranslate\">har_nyckel</code><a class=\"heading-anchor\" href=\"#has-key\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returnerar objekt där den angivna nyckeln finns i den översta nivån av data. Till exempel:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Rufus&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Meg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__has_key<span class=\"o\">=</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"has-keys\">\n<span id=\"std-fieldlookup-jsonfield.has_keys\"></span><h4><code class=\"docutils literal notranslate\">har_nycklar</code><a class=\"heading-anchor\" href=\"#has-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returnerar objekt där alla de angivna nycklarna finns på den översta nivån i data. Till exempel:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Rufus&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;collie&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Meg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__has_keys<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"has-any-keys\">\n<span id=\"std-fieldlookup-jsonfield.has_any_keys\"></span><h4><code class=\"docutils literal notranslate\">har_några_nycklar</code><a class=\"heading-anchor\" href=\"#has-any-keys\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Returnerar objekt där någon av de angivna nycklarna finns på den översta nivån i data. Till exempel:</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>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;labrador&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Rufus&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> data<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;Bob&quot;</span><span class=\"p\">})</span>\n<span class=\"go\">&lt;Dog: Meg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Dog<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>data__has_any_keys<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;owner&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;breed&quot;</span><span class=\"p\">])</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Rufus&gt;, &lt;Dog: Meg&gt;]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"complex-lookups-with-q-objects\">\n<span id=\"complex-lookups-with-q\"></span><h2>Komplexa uppslagningar med <code class=\"docutils literal notranslate\">Q</code>-objekt<a class=\"heading-anchor\" href=\"#complex-lookups-with-q-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Frågor med nyckelordsargument – i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a>, etc. – är ”AND” tillsammans. Om du behöver köra mer komplexa frågor (till exempel frågor med <code class=\"docutils literal notranslate\">OR</code>-satser) kan du använda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\">Q objects</code></a>.</p>\n<p>Ett <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\">Q-objekt</code></a> (<code class=\"docutils literal notranslate\">django.db.models.Q</code>) är ett objekt som används för att kapsla in en samling nyckelordsargument. Dessa nyckelordsargument specificeras som i ”Fältuppslagningar” ovan.</p>\n<p>Till exempel kapslar detta <code class=\"docutils literal notranslate\">Q</code>-objekt in en enda <code class=\"docutils literal notranslate\">LIKE</code>-fråga:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Q\n\nQ<span class=\"p\">(</span>question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">Q</code>-objekt kan kombineras med hjälp av operatörerna <code class=\"docutils literal notranslate\">&amp;</code>, <code class=\"docutils literal notranslate\">|</code> och <code class=\"docutils literal notranslate\">^</code>. När en operator används på två <code class=\"docutils literal notranslate\">Q</code>-objekt, ger det ett nytt <code class=\"docutils literal notranslate\">Q</code>-objekt.</p>\n<p>Till exempel ger detta uttalande ett enda <code class=\"docutils literal notranslate\">Q</code>-objekt som representerar ”OR” av två <code class=\"docutils literal notranslate\">&quot;question__startswith&quot;</code>-frågor:</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>Q<span class=\"p\">(</span>question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> Q<span class=\"p\">(</span>question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Detta motsvarar följande SQL <code class=\"docutils literal notranslate\">WHERE</code> klausul:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">WHERE</span> question <span class=\"k\">LIKE</span> <span class=\"s1\">&#39;Who%&#39;</span> <span class=\"k\">OR</span> question <span class=\"k\">LIKE</span> <span class=\"s1\">&#39;What%&#39;</span>\n</code></pre></div>\n<p>Du kan komponera satser av godtycklig komplexitet genom att kombinera <code class=\"docutils literal notranslate\">Q</code>-objekt med operatörerna <code class=\"docutils literal notranslate\">&amp;</code>, <code class=\"docutils literal notranslate\">|</code> och <code class=\"docutils literal notranslate\">^</code> och använda parentetisk gruppering. Dessutom kan <code class=\"docutils literal notranslate\">Q</code>-objekt negeras med operatorn <code class=\"docutils literal notranslate\">~</code>, vilket möjliggör kombinerade uppslagningar som kombinerar både en normal fråga och en negerad (<code class=\"docutils literal notranslate\">NOT</code>) fråga:</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>Q<span class=\"p\">(</span>question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"o\">~</span>Q<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Varje uppslagsfunktion som tar nyckelordsargument (t.ex. <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\">filter()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\">exclude()</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\">get()</code></a>) kan också skickas ett eller flera <code class=\"docutils literal notranslate\">Q</code>-objekt som positionella (ej namngivna) argument. Om du ger flera <code class=\"docutils literal notranslate\">Q</code>-objektargument till en uppslagsfunktion kommer argumenten att ”AND”-kopplas ihop. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Poll<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>\n    Q<span class=\"p\">(</span>question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">),</span>\n    Q<span class=\"p\">(</span>pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">|</span> Q<span class=\"p\">(</span>pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>…översätts ungefär till SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"o\">*</span> <span class=\"k\">from</span> polls <span class=\"k\">WHERE</span> question <span class=\"k\">LIKE</span> <span class=\"s1\">&#39;Who%&#39;</span>\n    <span class=\"k\">AND</span> <span class=\"p\">(</span>pub_date <span class=\"o\">=</span> <span class=\"s1\">&#39;2005-05-02&#39;</span> <span class=\"k\">OR</span> pub_date <span class=\"o\">=</span> <span class=\"s1\">&#39;2005-05-06&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Uppslagsfunktioner kan blanda användningen av <code class=\"docutils literal notranslate\">Q</code>-objekt och nyckelordsargument. Alla argument som anges i en lookup-funktion (oavsett om det är nyckelordsargument eller <code class=\"docutils literal notranslate\">Q</code>-objekt) ”AND”-kopplas ihop. Om ett <code class=\"docutils literal notranslate\">Q</code>-objekt anges måste det dock föregå definitionen av eventuella nyckelordsargument. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Poll<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>\n    Q<span class=\"p\">(</span>pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">|</span> Q<span class=\"p\">(</span>pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)),</span>\n    question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>… skulle vara en giltig fråga, motsvarande det föregående exemplet; men:</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=\"c1\"># INVALID QUERY</span>\nPoll<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>\n    question__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">,</span>\n    Q<span class=\"p\">(</span>pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">|</span> Q<span class=\"p\">(</span>pub_date<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2005</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>… skulle inte vara giltigt.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">Se även</p>\n<p><a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.2.x/tests/or_lookups/tests.py\">OR lookups examples</a> i Djangos enhetstester visar några möjliga användningsområden för <code class=\"docutils literal notranslate\">Q</code>.</p>\n</aside>\n</section>\n<section id=\"comparing-objects\">\n<h2>Jämförelse av objekt<a class=\"heading-anchor\" href=\"#comparing-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>För att jämföra två modellinstanser använder du Pythons standardjämförelseoperator, det dubbla likhetstecknet: <code class=\"docutils literal notranslate\">==</code>. Bakom kulisserna jämför det de primära nyckelvärdena för två modeller.</p>\n<p>Med hjälp av exemplet <code class=\"docutils literal notranslate\">Entry</code> ovan är följande två uttalanden likvärdiga:</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>some_entry <span class=\"o\">==</span> other_entry\n<span class=\"gp\">&gt;&gt;&gt; </span>some_entry<span class=\"o\">.</span>id <span class=\"o\">==</span> other_entry<span class=\"o\">.</span>id\n</code></pre></div>\n<p>Om en modells primärnyckel inte heter <code class=\"docutils literal notranslate\">id</code> är det inget problem. Jämförelser kommer alltid att använda primärnyckeln, oavsett vad den heter. Om till exempel en modells primärnyckelfält heter <code class=\"docutils literal notranslate\">name</code> är dessa två påståenden likvärdiga:</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>some_obj <span class=\"o\">==</span> other_obj\n<span class=\"gp\">&gt;&gt;&gt; </span>some_obj<span class=\"o\">.</span>name <span class=\"o\">==</span> other_obj<span class=\"o\">.</span>name\n</code></pre></div>\n</section>\n<section id=\"deleting-objects\">\n<span id=\"topics-db-queries-delete\"></span><h2>Radering av objekt<a class=\"heading-anchor\" href=\"#deleting-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Metoden delete heter lägligt nog <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>. Denna metod raderar omedelbart objektet och returnerar antalet objekt som raderats och en ordbok med antalet raderingar per objekttyp. Exempel på detta:</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>e<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n<span class=\"go\">(1, {&#39;blog.Entry&#39;: 1})</span>\n</code></pre></div>\n<p>Du kan också radera objekt i bulk. Varje <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\">QuerySet</code></a> har en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>-metod, som raderar alla medlemmar i den <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\">QuerySet</code></a>.</p>\n<p>Detta raderar till exempel alla <code class=\"docutils literal notranslate\">Entry</code>-objekt med <code class=\"docutils literal notranslate\">pub_date</code> år 2005:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n<span class=\"go\">(5, {&#39;webapp.Entry&#39;: 5})</span>\n</code></pre></div>\n<p>Tänk på att detta, när det är möjligt, kommer att utföras enbart i SQL, och därför kommer inte <code class=\"docutils literal notranslate\">delete()</code>-metoderna för enskilda objektinstanser nödvändigtvis att anropas under processen. Om du har tillhandahållit en anpassad <code class=\"docutils literal notranslate\">delete()</code>-metod för en modellklass och vill se till att den anropas, måste du ”manuellt” radera instanser av den modellen (t.ex, genom att iterera över 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\">QuerySet</code></a> och anropa <code class=\"docutils literal notranslate\">delete()</code> på varje objekt individuellt) i stället för att använda bulk <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a>-metoden för 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\">QuerySet</code></a>.</p>\n<p>När Django raderar ett objekt emulerar det som standard beteendet hos SQL-begränsningen <code class=\"docutils literal notranslate\">ON DELETE CASCADE</code> - med andra ord kommer alla objekt som hade främmande nycklar som pekar på det objekt som ska raderas att raderas tillsammans med det. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>b <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"c1\"># This will delete the Blog and all of its Entry objects.</span>\nb<span class=\"o\">.</span>delete<span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta kaskadbeteende kan anpassas via argumentet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\">on_delete</code></a> till <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>.</p>\n<p>Observera att <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\">delete()</code></a> är den enda <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\">QuerySet</code></a>-metoden som inte exponeras på en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> själv. Detta är en säkerhetsmekanism för att förhindra att du av misstag begär <code class=\"docutils literal notranslate\">Entry.objects.delete()</code> och raderar <em>alla</em> posterna. Om du <em>vill</em> ta bort alla objekt måste du uttryckligen begära en komplett frågeuppsättning:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span><span class=\"o\">.</span>delete<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"copying-model-instances\">\n<span id=\"topics-db-queries-copy\"></span><h2>Kopiera modellinstanser<a class=\"heading-anchor\" href=\"#copying-model-instances\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Även om det inte finns någon inbyggd metod för att kopiera modellinstanser, är det möjligt att enkelt skapa en ny instans med alla fältvärden kopierade. I det enklaste fallet kan du ställa in <code class=\"docutils literal notranslate\">pk</code> till <code class=\"docutils literal notranslate\">None</code> och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\">_state.adding</code></a> till <code class=\"docutils literal notranslate\">True</code>. Med hjälp av vårt bloggexempel:</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>blog <span class=\"o\">=</span> Blog<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;My blog&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;Blogging is easy&quot;</span><span class=\"p\">)</span>\nblog<span class=\"o\">.</span>save<span class=\"p\">()</span>  <span class=\"c1\"># blog.pk == 1</span>\n\nblog<span class=\"o\">.</span>pk <span class=\"o\">=</span> <span class=\"kc\">None</span>\nblog<span class=\"o\">.</span>_state<span class=\"o\">.</span>adding <span class=\"o\">=</span> <span class=\"kc\">True</span>\nblog<span class=\"o\">.</span>save<span class=\"p\">()</span>  <span class=\"c1\"># blog.pk == 2</span>\n</code></pre></div>\n<p>Saker och ting blir mer komplicerade om man använder sig av arv. Tänk dig en subklass av <code class=\"docutils literal notranslate\">Blog</code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ThemeBlog</span><span class=\"p\">(</span>Blog<span class=\"p\">):</span>\n    theme <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n\n\ndjango_blog <span class=\"o\">=</span> ThemeBlog<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Django&quot;</span><span class=\"p\">,</span> tagline<span class=\"o\">=</span><span class=\"s2\">&quot;Django is easy&quot;</span><span class=\"p\">,</span> theme<span class=\"o\">=</span><span class=\"s2\">&quot;python&quot;</span><span class=\"p\">)</span>\ndjango_blog<span class=\"o\">.</span>save<span class=\"p\">()</span>  <span class=\"c1\"># django_blog.pk == 3</span>\n</code></pre></div>\n<p>På grund av hur arv fungerar måste du ställa in både <code class=\"docutils literal notranslate\">pk</code> och <code class=\"docutils literal notranslate\">id</code> till <code class=\"docutils literal notranslate\">None</code>, och <code class=\"docutils literal notranslate\">_state.adding</code> till <code class=\"docutils literal notranslate\">True</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>django_blog<span class=\"o\">.</span>pk <span class=\"o\">=</span> <span class=\"kc\">None</span>\ndjango_blog<span class=\"o\">.</span>id <span class=\"o\">=</span> <span class=\"kc\">None</span>\ndjango_blog<span class=\"o\">.</span>_state<span class=\"o\">.</span>adding <span class=\"o\">=</span> <span class=\"kc\">True</span>\ndjango_blog<span class=\"o\">.</span>save<span class=\"p\">()</span>  <span class=\"c1\"># django_blog.pk == 4</span>\n</code></pre></div>\n<p>Denna process kopierar inte relationer som inte är en del av modellens databastabell. Till exempel har <code class=\"docutils literal notranslate\">Entry</code> en <code class=\"docutils literal notranslate\">ManyToManyField</code> till <code class=\"docutils literal notranslate\">Author</code>. När du har duplicerat en post måste du ställa in relationerna många-till-många för den nya posten:</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>entry <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span>  <span class=\"c1\"># some previous entry</span>\nold_authors <span class=\"o\">=</span> entry<span class=\"o\">.</span>authors<span class=\"o\">.</span>all<span class=\"p\">()</span>\nentry<span class=\"o\">.</span>pk <span class=\"o\">=</span> <span class=\"kc\">None</span>\nentry<span class=\"o\">.</span>_state<span class=\"o\">.</span>adding <span class=\"o\">=</span> <span class=\"kc\">True</span>\nentry<span class=\"o\">.</span>save<span class=\"p\">()</span>\nentry<span class=\"o\">.</span>authors<span class=\"o\">.</span>set<span class=\"p\">(</span>old_authors<span class=\"p\">)</span>\n</code></pre></div>\n<p>För ett <code class=\"docutils literal notranslate\">OneToOneField</code> måste du duplicera det relaterade objektet och tilldela det till det nya objektets fält för att undvika att bryta mot den unika begränsningen för en-till-en. Om vi till exempel antar att <code class=\"docutils literal notranslate\">entry</code> redan är duplicerat enligt 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>detail <span class=\"o\">=</span> EntryDetail<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\ndetail<span class=\"o\">.</span>pk <span class=\"o\">=</span> <span class=\"kc\">None</span>\ndetail<span class=\"o\">.</span>_state<span class=\"o\">.</span>adding <span class=\"o\">=</span> <span class=\"kc\">True</span>\ndetail<span class=\"o\">.</span>entry <span class=\"o\">=</span> entry\ndetail<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"updating-multiple-objects-at-once\">\n<span id=\"topics-db-queries-update\"></span><h2>Uppdatering av flera objekt samtidigt<a class=\"heading-anchor\" href=\"#updating-multiple-objects-at-once\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ibland vill man sätta ett fält till ett visst värde för alla objekt i 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\">QuerySet</code></a>. Det kan du göra med metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\">update()</code></a>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Update all the headlines with pub_date in 2007.</span>\nEntry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>pub_date__year<span class=\"o\">=</span><span class=\"mi\">2007</span><span class=\"p\">)</span><span class=\"o\">.</span>update<span class=\"p\">(</span>headline<span class=\"o\">=</span><span class=\"s2\">&quot;Everything is the same&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Du kan bara ställa in fält som inte är relationsfält och <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>-fält med den här metoden. För att uppdatera ett fält som inte är ett relationsfält anger du det nya värdet som en konstant. För att uppdatera <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>-fält anger du det nya värdet som den nya modellinstans du vill peka på. Till exempel:</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>b <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Change every Entry so that it belongs to this Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>blog<span class=\"o\">=</span>b<span class=\"p\">)</span>\n</code></pre></div>\n<p>Metoden <code class=\"docutils literal notranslate\">update()</code> tillämpas omedelbart och returnerar antalet rader som matchas av frågan (vilket kanske inte är lika med antalet rader som uppdaterats om vissa rader redan har det nya värdet). Den enda begränsningen för <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\">QuerySet</code></a> som uppdateras är att den endast kan komma åt en databastabell: modellens huvudtabell. Du kan filtrera baserat på relaterade fält, men du kan bara uppdatera kolumner i modellens huvudtabell. Ett exempel:</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>b <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>pk<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Update all the headlines belonging to this Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog<span class=\"o\">=</span>b<span class=\"p\">)</span><span class=\"o\">.</span>update<span class=\"p\">(</span>headline<span class=\"o\">=</span><span class=\"s2\">&quot;Everything is the same&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Tänk på att metoden <code class=\"docutils literal notranslate\">update()</code> konverteras direkt till en SQL-sats. Det är en bulkoperation för direkta uppdateringar. Den kör inte några <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>-metoder på dina modeller, eller avger signalerna <code class=\"docutils literal notranslate\">pre_save</code> eller <code class=\"docutils literal notranslate\">post_save</code> (som är en konsekvens av att anropa <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>), eller hedrar fältalternativet <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.DateField.auto_now\" title=\"django.db.models.DateField.auto_now\"><code class=\"xref py py-attr docutils literal notranslate\">auto_now</code></a>. Om du vill spara varje objekt i 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\">QuerySet</code></a> och se till att metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> anropas på varje instans, behöver du ingen speciell funktion för att hantera det. Loopa över dem och anropa <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>:</p>\n<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> item <span class=\"ow\">in</span> my_queryset<span class=\"p\">:</span>\n    item<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Anrop till update kan också använda <a class=\"reference internal\" href=\"/sv/5.2/ref/models/expressions/#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\">F expressions</code></a> för att uppdatera ett fält baserat på värdet av ett annat fält i modellen. Detta är särskilt användbart för att öka räknare baserat på deras aktuella värde. Till exempel för att öka antalet pingbackar för varje inlägg i bloggen:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>number_of_pingbacks<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;number_of_pingbacks&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Men till skillnad från <code class=\"docutils literal notranslate\">F()</code>-objekt i filter- och exkluderingsklausuler kan du inte införa joins när du använder <code class=\"docutils literal notranslate\">F()</code>-objekt i en uppdatering - du kan bara referera till fält som är lokala för den modell som uppdateras. Om du försöker införa en join med ett <code class=\"docutils literal notranslate\">F()</code>-objekt, kommer ett <code class=\"docutils literal notranslate\">FieldError</code> att uppstå:</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=\"go\"># This will raise a FieldError</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>headline<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;blog__name&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"related-objects\">\n<span id=\"topics-db-queries-related\"></span><h2>Relaterade objekt<a class=\"heading-anchor\" href=\"#related-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du definierar en relation i en modell (dvs. en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a>) kommer instanser av den modellen att ha ett bekvämt API för att komma åt det eller de relaterade objekten.</p>\n<p>Med hjälp av modellerna högst upp på denna sida kan till exempel ett <code class=\"docutils literal notranslate\">Entry</code>-objekt <code class=\"docutils literal notranslate\">e</code> få sitt associerade <code class=\"docutils literal notranslate\">Blog</code>-objekt genom att komma åt <code class=\"docutils literal notranslate\">blog</code>-attributet: <code class=\"docutils literal notranslate\">e.blog</code>.</p>\n<p>(Bakom kulisserna implementeras denna funktionalitet av Python <a class=\"reference external\" href=\"https://docs.python.org/3/howto/descriptor.html\" title=\"(in Python v3.14)\"><span class=\"xref std std-doc\">descriptors</span></a>. Detta borde egentligen inte spela någon roll för dig, men vi påpekar det här för den nyfikne)</p>\n<p>Django skapar också API-åtkomst för den ”andra” sidan av relationen - länken från den relaterade modellen till den modell som definierar relationen. Till exempel har ett <code class=\"docutils literal notranslate\">Blog</code>-objekt <code class=\"docutils literal notranslate\">b</code> tillgång till en lista över alla relaterade <code class=\"docutils literal notranslate\">Entry</code>-objekt via <code class=\"docutils literal notranslate\">entry_set</code>-attributet: <code class=\"docutils literal notranslate\">b.entry_set.all()</code>.</p>\n<p>Alla exempel i detta avsnitt använder modellerna <code class=\"docutils literal notranslate\">Blog</code>, <code class=\"docutils literal notranslate\">Author</code> och <code class=\"docutils literal notranslate\">Entry</code> som definieras högst upp på denna sida.</p>\n<section id=\"one-to-many-relationships\">\n<h3>En-till-många-relationer<a class=\"heading-anchor\" href=\"#one-to-many-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"forward\">\n<h4>Framåt<a class=\"heading-anchor\" href=\"#forward\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om en modell har en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, kommer instanser av den modellen att ha tillgång till det relaterade (främmande) objektet via ett attribut för modellen.</p>\n<p>Exempel:</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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>e<span class=\"o\">.</span>blog  <span class=\"c1\"># Returns the related Blog object.</span>\n</code></pre></div>\n<p>Du kan hämta och ställa in via ett foreign-key-attribut. Som du kanske förväntar dig sparas inte ändringar av den främmande nyckeln i databasen förrän du anropar <a class=\"reference internal\" href=\"/sv/5.2/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a>. Exempel på detta:</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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>e<span class=\"o\">.</span>blog <span class=\"o\">=</span> some_blog\n<span class=\"gp\">&gt;&gt;&gt; </span>e<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Om ett fält i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> har inställningen <code class=\"docutils literal notranslate\">null=True</code> (dvs. det tillåter <code class=\"docutils literal notranslate\">NULL</code>-värden) kan du tilldela <code class=\"docutils literal notranslate\">None</code> för att ta bort relationen. Exempel på detta:</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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>e<span class=\"o\">.</span>blog <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>e<span class=\"o\">.</span>save<span class=\"p\">()</span>  <span class=\"c1\"># &quot;UPDATE blog_entry SET blog_id = NULL ...;&quot;</span>\n</code></pre></div>\n<p>Framåtriktad åtkomst till en-till-många-relationer cachelagras första gången det relaterade objektet nås. Efterföljande åtkomst till främmande nyckel på samma objektinstans cachelagras. Exempel på detta:</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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>e<span class=\"o\">.</span>blog<span class=\"p\">)</span>  <span class=\"c1\"># Hits the database to retrieve the associated Blog.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>e<span class=\"o\">.</span>blog<span class=\"p\">)</span>  <span class=\"c1\"># Doesn&#39;t hit the database; uses cached version.</span>\n</code></pre></div>\n<p>Observera att metoden <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\">select_related()</code></a> <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\">QuerySet</code></a> rekursivt fyller på cacheminnet med alla en-till-många-relationer i förväg. Exempel på detta:</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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>select_related<span class=\"p\">()</span><span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>e<span class=\"o\">.</span>blog<span class=\"p\">)</span>  <span class=\"c1\"># Doesn&#39;t hit the database; uses cached version.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>e<span class=\"o\">.</span>blog<span class=\"p\">)</span>  <span class=\"c1\"># Doesn&#39;t hit the database; uses cached version.</span>\n</code></pre></div>\n</section>\n<section id=\"following-relationships-backward\">\n<span id=\"backwards-related-objects\"></span><h4>Följa relationer ”baklänges”<a class=\"heading-anchor\" href=\"#following-relationships-backward\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Om en modell har en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a>, kommer instanser av modellen med utländsk nyckel att ha tillgång till en <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> som returnerar alla instanser av den första modellen. Som standard har denna <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> namnet <code class=\"docutils literal notranslate\">FOO_set</code>, där <code class=\"docutils literal notranslate\">FOO</code> är källmodellens namn, med gemener. Denna <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> returnerar <code class=\"docutils literal notranslate\">QuerySet</code>-instanser, som kan filtreras och manipuleras enligt beskrivningen i avsnittet ”Hämta objekt” ovan.</p>\n<p>Exempel:</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>b <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>all<span class=\"p\">()</span>  <span class=\"c1\"># Returns all Entry objects related to Blog.</span>\n\n<span class=\"go\"># b.entry_set is a Manager that returns QuerySets.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>count<span class=\"p\">()</span>\n</code></pre></div>\n<p>Du kan åsidosätta namnet <code class=\"docutils literal notranslate\">FOO_set</code> genom att ange parametern <code class=\"xref py py-attr docutils literal notranslate\">related_name`</code> i definitionen <code class=\"xref py py-class docutils literal notranslate\">ForeignKey`</code>. Om till exempel modellen <code class=\"docutils literal notranslate\">Entry</code> ändrades till <code class=\"docutils literal notranslate\">blog = ForeignKey(Blog, on_delete=models.CASCADE, related_name='entries')</code>, skulle ovanstående exempelkod se ut så här:</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>b <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>entries<span class=\"o\">.</span>all<span class=\"p\">()</span>  <span class=\"c1\"># Returns all Entry objects related to Blog.</span>\n\n<span class=\"go\"># b.entries is a Manager that returns ``QuerySet`` instances.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>entries<span class=\"o\">.</span>filter<span class=\"p\">(</span>headline__contains<span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>b<span class=\"o\">.</span>entries<span class=\"o\">.</span>count<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"using-a-custom-reverse-manager\">\n<span id=\"using-custom-reverse-manager\"></span><h4>Använda en anpassad reverse manager<a class=\"heading-anchor\" href=\"#using-a-custom-reverse-manager\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Som standard är <a class=\"reference internal\" href=\"/sv/5.2/ref/models/relations/#django.db.models.fields.related.RelatedManager\" title=\"django.db.models.fields.related.RelatedManager\"><code class=\"xref py py-class docutils literal notranslate\">RelatedManager</code></a> som används för omvända relationer en underklass av <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#manager-names\"><span class=\"std std-ref\">default manager</span></a> för den modellen. Om du vill ange en annan manager för en viss fråga kan du använda följande syntax:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Entry</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    objects <span class=\"o\">=</span> models<span class=\"o\">.</span>Manager<span class=\"p\">()</span>  <span class=\"c1\"># Default Manager</span>\n    entries <span class=\"o\">=</span> EntryManager<span class=\"p\">()</span>  <span class=\"c1\"># Custom Manager</span>\n\n\nb <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\nb<span class=\"o\">.</span>entry_set<span class=\"p\">(</span>manager<span class=\"o\">=</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>all<span class=\"p\">()</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\">EntryManager</code> utförde standardfiltrering i sin <code class=\"docutils literal notranslate\">get_queryset()</code>-metod, skulle den filtreringen gälla för <code class=\"docutils literal notranslate\">all()</code>-anropet.</p>\n<p>Genom att ange en anpassad reverse manager kan du också anropa dess anpassade metoder:</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>b<span class=\"o\">.</span>entry_set<span class=\"p\">(</span>manager<span class=\"o\">=</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>is_published<span class=\"p\">()</span>\n</code></pre></div>\n<aside class=\"admonition-interaction-with-prefetching admonition\" role=\"note\">\n<p class=\"admonition-title\">Interaktion med prefetching</p>\n<p>När du anropar <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\">prefetch_related()</code></a> med en omvänd relation kommer standardhanteraren att användas. Om du vill hämta relaterade objekt med hjälp av en anpassad omvänd hanterare, använd <a class=\"reference internal\" href=\"/sv/5.2/ref/models/querysets/#django.db.models.Prefetch\" title=\"django.db.models.Prefetch\"><code class=\"xref py py-class docutils literal notranslate\">Prefetch()</code></a>. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Prefetch\n\nprefetch_manager <span class=\"o\">=</span> Prefetch<span class=\"p\">(</span><span class=\"s2\">&quot;entry_set&quot;</span><span class=\"p\">,</span> queryset<span class=\"o\">=</span>Entry<span class=\"o\">.</span>entries<span class=\"o\">.</span>all<span class=\"p\">())</span>\nBlog<span class=\"o\">.</span>objects<span class=\"o\">.</span>prefetch_related<span class=\"p\">(</span>prefetch_manager<span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"additional-methods-to-handle-related-objects\">\n<h4>Ytterligare metoder för att hantera relaterade objekt<a class=\"heading-anchor\" href=\"#additional-methods-to-handle-related-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Förutom <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\">QuerySet</code></a>-metoderna som definieras i ”Hämta objekt” ovan har <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> ytterligare metoder som används för att hantera uppsättningen relaterade objekt. En sammanfattning av varje metod finns nedan, och fullständiga detaljer finns i <a class=\"reference internal\" href=\"/sv/5.2/ref/models/relations/\"><span class=\"doc\">related objects reference</span></a>.</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\">add(obj1, obj2, ...)</code></dt><dd><p>Lägger till de angivna modellobjekten i den relaterade objektuppsättningen.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">skapa(**kwargs)</code></dt><dd><p>Skapar ett nytt objekt, sparar det och lägger till det i den relaterade objektuppsättningen. Returnerar det nyskapade objektet.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">remove(obj1, obj2, ...)</code></dt><dd><p>Tar bort de angivna modellobjekten från den relaterade objektuppsättningen.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">clear()</code></dt><dd><p>Tar bort alla objekt från den relaterade objektuppsättningen.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\">set(objs)</code></dt><dd><p>Byt ut uppsättningen av relaterade objekt.</p>\n</dd>\n</dl>\n<p>För att tilldela medlemmarna i en relaterad uppsättning använder du metoden <code class=\"docutils literal notranslate\">set()</code> med en iterabel av objektinstanser. Till exempel, om <code class=\"docutils literal notranslate\">e1</code> och <code class=\"docutils literal notranslate\">e2</code> är <code class=\"docutils literal notranslate\">Entry</code> instanser:</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>b <span class=\"o\">=</span> Blog<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\nb<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>set<span class=\"p\">([</span>e1<span class=\"p\">,</span> e2<span class=\"p\">])</span>\n</code></pre></div>\n<p>Om metoden <code class=\"docutils literal notranslate\">clear()</code> är tillgänglig kommer alla befintliga objekt att tas bort från <code class=\"docutils literal notranslate\">entry_set</code> innan alla objekt i iterabeln (i det här fallet en lista) läggs till i uppsättningen. Om metoden <code class=\"docutils literal notranslate\">clear()</code> <em>inte</em> är tillgänglig kommer alla objekt i iterabeln att läggas till utan att några befintliga element tas bort.</p>\n<p>Varje ”omvänd” operation som beskrivs i detta avsnitt har en omedelbar effekt på databasen. Varje tillägg, skapande och borttagning sparas omedelbart och automatiskt i databasen.</p>\n</section>\n</section>\n<section id=\"many-to-many-relationships\">\n<span id=\"m2m-reverse-relationships\"></span><h3>Många-till-många-relationer<a class=\"heading-anchor\" href=\"#many-to-many-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Båda ändarna av en many-to-many-relation får automatisk API-åtkomst till den andra änden. API:et fungerar på samma sätt som en ”bakvänd” en-till-många-relation, se ovan.</p>\n<p>En skillnad är i attributnamngivningen: Den modell som definierar <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> använder attributnamnet för själva fältet, medan den ”omvända” modellen använder det gemena modellnamnet för den ursprungliga modellen, plus <code class=\"docutils literal notranslate\">'_set'</code> (precis som omvända en-till-många-relationer).</p>\n<p>Ett exempel gör detta lättare att förstå:</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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\ne<span class=\"o\">.</span>authors<span class=\"o\">.</span>all<span class=\"p\">()</span>  <span class=\"c1\"># Returns all Author objects for this Entry.</span>\ne<span class=\"o\">.</span>authors<span class=\"o\">.</span>count<span class=\"p\">()</span>\ne<span class=\"o\">.</span>authors<span class=\"o\">.</span>filter<span class=\"p\">(</span>name__contains<span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n\na <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\na<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>all<span class=\"p\">()</span>  <span class=\"c1\"># Returns all Entry objects for this Author.</span>\n</code></pre></div>\n<p>Precis som <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\">ForeignKey</code></a> kan <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> ange <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField.related_name\" title=\"django.db.models.ManyToManyField.related_name\"><code class=\"xref py py-attr docutils literal notranslate\">related_name</code></a>. I exemplet ovan, om <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> i <code class=\"docutils literal notranslate\">Entry</code> hade specificerat <code class=\"docutils literal notranslate\">related_name='entries'</code>, skulle varje <code class=\"docutils literal notranslate\">Author</code>-instans ha ett <code class=\"docutils literal notranslate\">entries</code>-attribut istället för <code class=\"docutils literal notranslate\">entry_set</code>.</p>\n<p>En annan skillnad mot en-till-många-relationer är att metoderna <code class=\"docutils literal notranslate\">add()</code>, <code class=\"docutils literal notranslate\">set()</code> och <code class=\"docutils literal notranslate\">remove()</code> för många-till-många-relationer accepterar primärnyckelvärden, förutom modellinstanser. Om till exempel <code class=\"docutils literal notranslate\">e1</code> och <code class=\"docutils literal notranslate\">e2</code> är <code class=\"docutils literal notranslate\">Entry</code>-instanser, fungerar dessa <code class=\"docutils literal notranslate\">set()</code>-anrop på samma 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>a <span class=\"o\">=</span> Author<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\na<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>set<span class=\"p\">([</span>e1<span class=\"p\">,</span> e2<span class=\"p\">])</span>\na<span class=\"o\">.</span>entry_set<span class=\"o\">.</span>set<span class=\"p\">([</span>e1<span class=\"o\">.</span>pk<span class=\"p\">,</span> e2<span class=\"o\">.</span>pk<span class=\"p\">])</span>\n</code></pre></div>\n</section>\n<section id=\"one-to-one-relationships\">\n<h3>En-till-en-relationer<a class=\"heading-anchor\" href=\"#one-to-one-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>En-till-en-relationer är mycket lika många-till-en-relationer. Om du definierar en <a class=\"reference internal\" href=\"/sv/5.2/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\">OneToOneField</code></a> på din modell, kommer instanser av den modellen att ha tillgång till det relaterade objektet via ett attribut för modellen.</p>\n<p>Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">EntryDetail</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    entry <span class=\"o\">=</span> models<span class=\"o\">.</span>OneToOneField<span class=\"p\">(</span>Entry<span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    details <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n\n\ned <span class=\"o\">=</span> EntryDetail<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\ned<span class=\"o\">.</span>entry  <span class=\"c1\"># Returns the related Entry object.</span>\n</code></pre></div>\n<p>Skillnaden kommer i ”omvända” frågor. Den relaterade modellen i en en-till-en-relation har också tillgång till ett <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a>-objekt, men det <a class=\"reference internal\" href=\"/sv/5.2/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\">Manager</code></a> representerar ett enda objekt, snarare än en samling 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>e <span class=\"o\">=</span> Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\ne<span class=\"o\">.</span>entrydetail  <span class=\"c1\"># returns the related EntryDetail object</span>\n</code></pre></div>\n<p>Om inget objekt har tilldelats denna relation kommer Django att göra ett undantag för <code class=\"docutils literal notranslate\">DoesNotExist</code>.</p>\n<p>Instanser kan tilldelas den omvända relationen på samma sätt som du skulle tilldela den framåtriktade relationen:</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>e<span class=\"o\">.</span>entrydetail <span class=\"o\">=</span> ed\n</code></pre></div>\n</section>\n<section id=\"how-are-the-backward-relationships-possible\">\n<h3>Hur är de bakåtriktade relationerna möjliga?<a class=\"heading-anchor\" href=\"#how-are-the-backward-relationships-possible\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Andra objektrelationella mappare kräver att du definierar relationer på båda sidor. Django-utvecklarna anser att detta är ett brott mot DRY-principen (Don’t Repeat Yourself), så Django kräver bara att du definierar relationen i ena änden.</p>\n<p>Men hur är detta möjligt, med tanke på att en modellklass inte vet vilka andra modellklasser som är relaterade till den förrän dessa andra modellklasser har laddats?</p>\n<p>Svaret ligger i <a class=\"reference internal\" href=\"/sv/5.2/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-data docutils literal notranslate\">appregistret</code></a>. När Django startar importerar den varje applikation som listas i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, och sedan modulen <code class=\"docutils literal notranslate\">models</code> i varje applikation. När en ny modellklass skapas lägger Django till bakåtrelationer till alla relaterade modeller. Om de relaterade modellerna inte har importerats ännu, håller Django reda på relationerna och lägger till dem när de relaterade modellerna så småningom importeras.</p>\n<p>Av den anledningen är det särskilt viktigt att alla modeller du använder definieras i applikationer som finns listade i <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>. Annars kanske inte baklängesrelationerna fungerar som de ska.</p>\n</section>\n<section id=\"queries-over-related-objects\">\n<h3>Frågor över relaterade objekt<a class=\"heading-anchor\" href=\"#queries-over-related-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Förfrågningar som involverar relaterade objekt följer samma regler som förfrågningar som involverar normala värdefält. När du anger det värde som en fråga ska matcha kan du använda antingen en objektinstans i sig eller primärnyckelvärdet för objektet.</p>\n<p>Om du till exempel har ett bloggobjekt <code class=\"docutils literal notranslate\">b</code> med <code class=\"docutils literal notranslate\">id=5</code>, skulle följande tre frågor vara identiska:</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>Entry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog<span class=\"o\">=</span>b<span class=\"p\">)</span>  <span class=\"c1\"># Query using object instance</span>\nEntry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog<span class=\"o\">=</span>b<span class=\"o\">.</span>id<span class=\"p\">)</span>  <span class=\"c1\"># Query using id from instance</span>\nEntry<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>blog<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>  <span class=\"c1\"># Query using id directly</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"falling-back-to-raw-sql\">\n<h2>Återgår till rå SQL<a class=\"heading-anchor\" href=\"#falling-back-to-raw-sql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du behöver skriva en SQL-fråga som är för komplex för Djangos databasmappare att hantera, kan du falla tillbaka på att skriva SQL för hand. Django har ett par alternativ för att skriva råa SQL-frågor; se <a class=\"reference internal\" href=\"/sv/5.2/topics/db/sql/\"><span class=\"doc\">Utföra SQL-frågor i råformat</span></a>.</p>\n<p>Slutligen är det viktigt att notera att Djangos databaslager bara är ett gränssnitt till din databas. Du kan komma åt din databas via andra verktyg, programmeringsspråk eller databasramverk; det finns inget Django-specifikt med din databas.</p>\n</section>","rootId":"making-queries","toc":[{"title":"Skapa objekt","anchor":"creating-objects","children":[]},{"title":"Spara ändringar av objekt","anchor":"saving-changes-to-objects","children":[{"title":"Spara fälten ForeignKey och ManyToManyField","anchor":"saving-foreignkey-and-manytomanyfield-fields","children":[]}]},{"title":"Hämta objekt","anchor":"retrieving-objects","children":[{"title":"Hämta alla objekt","anchor":"retrieving-all-objects","children":[]},{"title":"Hämta specifika objekt med filter","anchor":"retrieving-specific-objects-with-filters","children":[{"title":"Kedja filter","anchor":"chaining-filters","children":[]},{"title":"Filtrerade QuerySet är unika","anchor":"filtered-querysets-are-unique","children":[]},{"title":"”QuerySet”: ”De är lata","anchor":"querysets-are-lazy","children":[]}]},{"title":"Hämta ett enskilt objekt med get()","anchor":"retrieving-a-single-object-with-get","children":[]},{"title":"Andra metoder för QuerySet","anchor":"other-queryset-methods","children":[]},{"title":"Begränsning av QuerySet","anchor":"limiting-querysets","children":[]},{"title":"Fältuppslagningar","anchor":"field-lookups","children":[]},{"title":"Uppslagningar som sträcker sig över relationer","anchor":"lookups-that-span-relationships","children":[{"title":"Spänner över flervärdiga relationer","anchor":"spanning-multi-valued-relationships","children":[]}]},{"title":"Filter kan referera till fält i modellen","anchor":"filters-can-reference-fields-on-the-model","children":[]},{"title":"Uttryck kan referera till transformationer","anchor":"expressions-can-reference-transforms","children":[]},{"title":"Genvägen pk för uppslagning","anchor":"the-pk-lookup-shortcut","children":[]},{"title":"Utelämnande av procenttecken och understrykningstecken i LIKE-satser","anchor":"escaping-percent-signs-and-underscores-in-like-statements","children":[]},{"title":"Cachelagring och ”QuerySet","anchor":"caching-and-querysets","children":[{"title":"När QuerySet inte cachelagras","anchor":"when-querysets-are-not-cached","children":[]}]}]},{"title":"Asynkrona förfrågningar","anchor":"asynchronous-queries","children":[{"title":"Fråga iteration","anchor":"query-iteration","children":[]},{"title":"QuerySet och manager-metoder","anchor":"queryset-and-manager-methods","children":[]},{"title":"Transaktioner","anchor":"transactions","children":[]}]},{"title":"Fråga om JSONField","anchor":"querying-jsonfield","children":[{"title":"Lagring av och frågor om None","anchor":"storing-and-querying-for-none","children":[]},{"title":"Nyckel-, index- och banomvandlingar","anchor":"key-index-and-path-transforms","children":[{"title":"KT() uttryck","anchor":"module-django.db.models.fields.json","children":[]}]},{"title":"Inneslutning och nyckeluppslagningar","anchor":"containment-and-key-lookups","children":[{"title":"innehåller","anchor":"contains","children":[]},{"title":"innehålls_av","anchor":"contained-by","children":[]},{"title":"har_nyckel","anchor":"has-key","children":[]},{"title":"har_nycklar","anchor":"has-keys","children":[]},{"title":"har_några_nycklar","anchor":"has-any-keys","children":[]}]}]},{"title":"Komplexa uppslagningar med Q-objekt","anchor":"complex-lookups-with-q-objects","children":[]},{"title":"Jämförelse av objekt","anchor":"comparing-objects","children":[]},{"title":"Radering av objekt","anchor":"deleting-objects","children":[]},{"title":"Kopiera modellinstanser","anchor":"copying-model-instances","children":[]},{"title":"Uppdatering av flera objekt samtidigt","anchor":"updating-multiple-objects-at-once","children":[]},{"title":"Relaterade objekt","anchor":"related-objects","children":[{"title":"En-till-många-relationer","anchor":"one-to-many-relationships","children":[{"title":"Framåt","anchor":"forward","children":[]},{"title":"Följa relationer ”baklänges”","anchor":"following-relationships-backward","children":[]},{"title":"Använda en anpassad reverse manager","anchor":"using-a-custom-reverse-manager","children":[]},{"title":"Ytterligare metoder för att hantera relaterade objekt","anchor":"additional-methods-to-handle-related-objects","children":[]}]},{"title":"Många-till-många-relationer","anchor":"many-to-many-relationships","children":[]},{"title":"En-till-en-relationer","anchor":"one-to-one-relationships","children":[]},{"title":"Hur är de bakåtriktade relationerna möjliga?","anchor":"how-are-the-backward-relationships-possible","children":[]},{"title":"Frågor över relaterade objekt","anchor":"queries-over-related-objects","children":[]}]},{"title":"Återgår till rå SQL","anchor":"falling-back-to-raw-sql","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/5.2/topics/"},{"docname":"topics/db/index","title":"Modeller och databaser","url":"/sv/5.2/topics/db/"}],"prev":{"docname":"topics/db/models","title":"Modeller","url":"/sv/5.2/topics/db/models/"},"next":{"docname":"topics/db/aggregation","title":"Aggregering","url":"/sv/5.2/topics/db/aggregation/"},"formats":{"html":"/sv/5.2/topics/db/queries/","markdown":"/sv/5.2/topics/db/queries.md","json":"/sv/5.2/topics/db/queries.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/db/queries.txt","official":"https://docs.djangoproject.com/sv/5.2/topics/db/queries/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}