{"title":"Göra förfrågningar","version":"6.1","locale":"sv","docname":"topics/db/queries","url":"/sv/6.1/topics/db/queries/","canonical":"https://djangodocs.dev/sv/6.1/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. Detta…","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/6.1/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/6.1/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=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Blog</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">tagline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Entry</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Blog</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">)</span>\n    <span class=\"n\">body_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">mod_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">)</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">)</span>\n    <span class=\"n\">number_of_comments</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">number_of_pingbacks</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">rating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">headline</span>\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/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> för att spara det i databasen.</p>\n<p>Förutsatt att modellerna finns i filen <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> i en Django-app med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></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=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Beatles Blog&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><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><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta utför en <code class=\"docutils literal notranslate\"><span class=\"pre\">INSERT</span></code> SQL-sats bakom kulisserna. Django träffar inte databasen förrän du uttryckligen anropar <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<p>Metoden <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> har inget returvärde.</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<p><a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> har ett antal avancerade alternativ som inte beskrivs här. Se dokumentationen för <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> för fullständig information.</p>\n<p>To create and save an object in a single step, use the\n<a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">create()</span></code></a> method.</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/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<p>Med en <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code>-instans <code class=\"docutils literal notranslate\"><span class=\"pre\">b5</span></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><span class=\"n\">b5</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;New name&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b5</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta utför en <code class=\"docutils literal notranslate\"><span class=\"pre\">UPDATE</span></code> SQL-sats bakom kulisserna. Django träffar inte databasen förrän du uttryckligen anropar <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>.</p>\n<section id=\"saving-foreignkey-and-manytomanyfield-fields\">\n<h3>Spara fälten <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></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\"><span class=\"pre\">blog</span></code> för en <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>-instans <code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></code>, förutsatt att lämpliga instanser av <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></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=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Blog</span><span class=\"p\">,</span> <span class=\"n\">Entry</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">cheese_blog</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Cheddar Talk&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">cheese_blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Uppdatering av en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> fungerar lite annorlunda - använd metoden <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">add()</span></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\"><span class=\"pre\">Author</span></code>-instansen <code class=\"docutils literal notranslate\"><span class=\"pre\">joe</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">entry</span></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=\"w\"> </span><span class=\"nn\">blog.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Author</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">joe</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Joe&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">joe</span><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/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> på en gång, inkludera flera argument i anropet till <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">add()</span></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><span class=\"n\">john</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paul</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">george</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;George&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ringo</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Ringo&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">john</span><span class=\"p\">,</span> <span class=\"n\">paul</span><span class=\"p\">,</span> <span class=\"n\">george</span><span class=\"p\">,</span> <span class=\"n\">ringo</span><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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> via en <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> på din modellklass.</p>\n<p>En <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> en <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code>-sats, och ett filter är en begränsningsklausul som <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code>.</p>\n<p>Du får en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> genom att använda din modells <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a>. Varje modell har minst en <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a>, och den kallas <a class=\"reference internal\" href=\"/sv/6.1/ref/models/class/#django.db.models.Model.objects\" title=\"django.db.models.Model.objects\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">objects</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n<span class=\"go\">&lt;django.db.models.manager.Manager object at ...&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Foo&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Bar&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">objects</span>\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\"><span class=\"pre\">Manager</span></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/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> är den huvudsakliga källan till querysets för en modell. Till exempel returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog.objects.all()</span></code> en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> som innehåller alla <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></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/6.1/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\"><span class=\"pre\">all()</span></code></a> på en <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></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><span class=\"n\">all_entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Metoden <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">all()</span></code></a> returnerar en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> som returneras av <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">all()</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> genom att lägga till filtervillkor. De två vanligaste sätten att förfina en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> är:</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">filter(**kwargs)</span></code></dt><dd><p>Returnerar en ny <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> som innehåller objekt som matchar de angivna uppslagsparametrarna.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">exkludera(**kwargs)</span></code></dt><dd><p>Returnerar en ny <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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\"><span class=\"pre\">**kwargs</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> med bloggposter från år 2006 använder du <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> är i sig en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>, så 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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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\"><span class=\"pre\">QuerySet</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> får du en helt ny <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> som inte på något sätt är bunden till den tidigare <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>. Varje förfining skapar en separat och distinkt <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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><span class=\"n\">q1</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q2</span> <span class=\"o\">=</span> <span class=\"n\">q1</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q3</span> <span class=\"o\">=</span> <span class=\"n\">q1</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__gte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n</code></pre></div>\n<p>Dessa tre querysets är separata. Den första är en bas <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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\"><span class=\"pre\">pub_date</span></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\"><span class=\"pre\">pub_date</span></code> är idag eller i framtiden. Den ursprungliga <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">q1</span></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\"><span class=\"pre\">QuerySet</span></code>-objekt är lata - handlingen att skapa en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> ä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><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;What&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__lte</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">q</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">body_text__icontains</span><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><span class=\"n\">q</span><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\"><span class=\"pre\">print(q)</span></code>). I allmänhet hämtas inte resultaten från en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> genom att komma åt databasen. För mer information om exakt när utvärderingen sker, se <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></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/6.1/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\"><span class=\"pre\">filter()</span></code></a> ger dig alltid en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>, ä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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/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\"><span class=\"pre\">get()</span></code></a> på en <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></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><span class=\"n\">one_entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><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/6.1/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\"><span class=\"pre\">get()</span></code></a>, precis som med <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a> - se Fältuppslagningar nedan.</p>\n<p>Observera att det är skillnad mellan att använda <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></code></a> och att använda <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a> med en slice av <code class=\"docutils literal notranslate\"><span class=\"pre\">[0]</span></code>. Om det inte finns några resultat som matchar frågan kommer <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></code></a> att ge upphov till ett <code class=\"docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></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\"><span class=\"pre\">Entry</span></code>-objekt med en primärnyckel på 1, kommer Django att höja <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry.DoesNotExist</span></code>.</p>\n<p>På samma sätt kommer Django att klaga om mer än ett objekt matchar <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></code></a>-frågan. I det här fallet kommer det att höja <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.MultipleObjectsReturned\" title=\"django.core.exceptions.MultipleObjectsReturned\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">MultipleObjectsReturned</span></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\"><span class=\"pre\">QuerySet</span></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/6.1/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\"><span class=\"pre\">all()</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></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/6.1/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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>-metoder.</p>\n</section>\n<section id=\"limiting-querysets\">\n<span id=\"id5\"></span><h3>Begränsning av <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> till ett visst antal resultat. Detta är motsvarigheten till SQL:s <code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">OFFSET</span></code>-klausuler.</p>\n<p>Till exempel returneras de 5 första objekten (<code class=\"docutils literal notranslate\"><span class=\"pre\">LIMIT</span> <span class=\"pre\">5</span></code>):</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[:</span><span class=\"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\"><span class=\"pre\">OFFSET</span> <span class=\"pre\">5</span> <span class=\"pre\">LIMIT</span> <span class=\"pre\">5</span></code>):</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[</span><span class=\"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\"><span class=\"pre\">Entry.objects.all()[-1]</span></code>) stöds inte.</p>\n<p>Generellt sett returnerar skivning av en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> en ny <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> – 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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[:</span><span class=\"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\"><span class=\"pre\">SELECT</span> <span class=\"pre\">foo</span> <span class=\"pre\">FROM</span> <span class=\"pre\">bar</span> <span class=\"pre\">LIMIT</span> <span class=\"pre\">1</span></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\"><span class=\"pre\">Entry</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><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><span class=\"n\">get</span><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\"><span class=\"pre\">IndexError</span></code> medan den andra kommer att ge upphov till <code class=\"docutils literal notranslate\"><span class=\"pre\">DoesNotExist</span></code> om inga objekt matchar de angivna kriterierna. Se <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></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\"><span class=\"pre\">WHERE</span></code>-klausul. De anges som nyckelordsargument till <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>-metoderna <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></code></a>.</p>\n<p>Argument för nyckelord i Basic Lookups har formen <code class=\"docutils literal notranslate\"><span class=\"pre\">field__lookuptype=value</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__lte</span><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=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">blog_entry</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </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\">\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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> kan du ange fältnamnet suffixerat med <code class=\"docutils literal notranslate\"><span class=\"pre\">_id</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog_id</span><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\"><span class=\"pre\">TypeError</span></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/6.1/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\"><span class=\"pre\">exakt</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__exact</span><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=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">id__exact</span><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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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\"><span class=\"pre\">exakta</span></code> uppslagningar är det vanliga fallet.</p>\n</dd>\n<dt><a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iexact</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name__iexact</span><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\"><span class=\"pre\">Blogg</span></code> med titeln <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Beatles</span> <span class=\"pre\">Blog&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;beatles</span> <span class=\"pre\">blog&quot;</span></code>, eller till och med <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;BeAtlES</span> <span class=\"pre\">blOG&quot;</span></code>.</p>\n</dd>\n<dt><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">innehåller</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><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=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </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\"><span class=\"pre\">'Today</span> <span class=\"pre\">Lennon</span> <span class=\"pre\">honored'</span></code> men inte <code class=\"docutils literal notranslate\"><span class=\"pre\">'today</span> <span class=\"pre\">lennon</span> <span class=\"pre\">honored'</span></code>.</p>\n<p>Det finns också en version som inte tar hänsyn till skiftlägeskod, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a>.</p>\n</dd>\n<dt><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">startarmed</span></code>, <code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">slutarmed</span></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/6.1/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">istartswith</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iendswith</span></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/6.1/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\"><span class=\"pre\">JOIN</span></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\"><span class=\"pre\">Entry</span></code>-objekt med en <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> vars <code class=\"docutils literal notranslate\"><span class=\"pre\">namn</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">'Beatles</span> <span class=\"pre\">Blog'</span></code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__name</span><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>It works backwards, too. While it can be customized by setting\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey.related_query_name\" title=\"django.db.models.ForeignKey.related_query_name\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">related_query_name</span></code></a>, by default you\nrefer to a ”reverse” relationship in a lookup using the lowercase name of the\nmodel.</p>\n<p>Detta exempel hämtar alla <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> objekt som har minst en <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> vars <code class=\"docutils literal notranslate\"><span class=\"pre\">headline</span></code> innehåller <code class=\"docutils literal notranslate\"><span class=\"pre\">'Lennon'</span></code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__headline__contains</span><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\"><span class=\"pre\">NULL</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__authors__name</span><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\"><span class=\"pre\">Author</span></code>-modell), om det inte fanns någon <code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></code> associerad med en post, skulle det behandlas som om det inte heller fanns något <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> bifogat, snarare än att ge ett fel på grund av den saknade <code class=\"docutils literal notranslate\"><span class=\"pre\">author</span></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/6.1/ref/models/querysets/#std-fieldlookup-isnull\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">isnull</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__authors__name__isnull</span><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\"><span class=\"pre\">Blog</span></code>-objekt som har ett tomt <code class=\"docutils literal notranslate\"><span class=\"pre\">namn</span></code> på <code class=\"docutils literal notranslate\"><span class=\"pre\">författaren</span></code> och även de som har en tom <code class=\"docutils literal notranslate\"><span class=\"pre\">författare</span></code> på <code class=\"docutils literal notranslate\"><span class=\"pre\">inlägget</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__authors__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">entry__authors__name__isnull</span><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/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> eller en omvänd <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> (t.ex. från <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span> <span class=\"n\">entry__pub_date__year</span><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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n    <span class=\"n\">entry__pub_date__year</span><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\"><span class=\"pre\">Blog</span></code>-objekten med varje filteruttalande, inte <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></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/6.1/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\"><span class=\"pre\">filter()</span></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=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">beatles</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Beatles Blog&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pop</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">beatles</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;New Lennon Biography&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">beatles</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;New Lennon Biography in Paperback&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">pop</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Best Albums of 2008&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">pop</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline</span><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>    <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">entry__pub_date__year</span><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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">entry__headline__contains</span><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><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">entry__pub_date__year</span><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\" id=\"exclude-implementation\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Beteendet hos <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></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/6.1/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\"><span class=\"pre\">exclude()</span></code></a>. Istället kommer villkoren i ett enda <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n    <span class=\"n\">entry__headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">entry__pub_date__year</span><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/6.1/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\"><span class=\"pre\">filter()</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n    <span class=\"n\">entry__in</span><span class=\"o\">=</span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">pub_date__year</span><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 provides <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#f-expressions\"><span class=\"std std-ref\">F()-uttryck</span></a> to allow such comparisons. Instances of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> act as a reference to a model field within a query. These references\ncan then be used in query filters to compare the values of two different fields\non the same model instance.</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\"><span class=\"pre\">F()</span></code>-objekt för att referera till pingback-antalet och använder det <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">number_of_comments__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><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\"><span class=\"pre\">F()</span></code>-objekt, både med konstanter och med andra <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">number_of_comments__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">rating__lt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;number_of_comments&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">F</span><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\"><span class=\"pre\">F()</span></code>-objekt. Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors__name</span><span class=\"o\">=</span><span class=\"n\">F</span><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\"><span class=\"pre\">timedelta</span></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=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timedelta</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">mod_date__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><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\"><span class=\"pre\">F()</span></code> stöder bitvisa operationer med <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitand()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitor()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitxor()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitrightshift()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">.bitleftshift()</span></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><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;somefield&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">bitand</span><span class=\"p\">(</span><span class=\"mi\">16</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-oracle admonition\">\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\"><span class=\"pre\">Entry</span></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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"n\">F</span><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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Min</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">first_published_year</span><span class=\"o\">=</span><span class=\"n\">Min</span><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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">OuterRef</span><span class=\"p\">,</span> <span class=\"n\">Subquery</span><span class=\"p\">,</span> <span class=\"n\">Sum</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;pub_date__year&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">top_rating</span><span class=\"o\">=</span><span class=\"n\">Subquery</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>            <span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><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><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-rating&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>        <span class=\"o\">.</span><span class=\"n\">values</span><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>    <span class=\"n\">total_comments</span><span class=\"o\">=</span><span class=\"n\">Sum</span><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\"><span class=\"pre\">pk</span></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\"><span class=\"pre\">pk</span></code>, som står för ”primary key”.</p>\n<p>I exemplet med modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> är primärnyckeln fältet <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">id__exact</span><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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><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\"><span class=\"pre\">pk</span></code> är inte begränsad till <code class=\"docutils literal notranslate\"><span class=\"pre\">__exact</span></code>-frågor - alla frågetermer kan kombineras med <code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pk__in</span><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><span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pk__gt</span><span class=\"o\">=</span><span class=\"mi\">14</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pk</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__id__exact</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__id</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog__pk</span><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\"><span class=\"pre\">LIKE</span></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\"><span class=\"pre\">LIKE</span></code> SQL-satser (<code class=\"docutils literal notranslate\"><span class=\"pre\">iexact</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">icontains</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">startswith</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">istartswith</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">endswith</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">iendswith</span></code>) kommer automatiskt att undkomma de två specialtecken som används i <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></code>-satser - procenttecknet och understrecket. (I en <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><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=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">headline</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> är cacheminnet tomt. Första gången en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> utvärderas - och därmed en databasfråga sker - sparar Django frågeresultaten i <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> itereras över). Efterföljande utvärderingar av <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> å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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> på rätt sätt. Till exempel kommer följande att skapa två <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>s, 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><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">pub_date</span> <span class=\"k\">for</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()])</span>\n</code></pre></div>\n<p>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\"><span class=\"pre\">Entry</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><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><span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">pub_date</span> <span class=\"k\">for</span> <span class=\"n\">p</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><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\"><span class=\"pre\">QuerySet</span></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 do not always cache their results. When evaluating only <em>part</em> of\nthe queryset, the cache is checked, but if it is not populated then the items\nreturned by the subsequent query are not cached. Specifically, this means that\n<a class=\"reference internal\" href=\"#limiting-querysets\"><span class=\"std std-ref\">limiting the queryset</span></a> using an array slice or an\nindex will not populate the cache.</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><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">queryset</span><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><span class=\"n\">queryset</span><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><span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"n\">entry</span> <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</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><span class=\"n\">queryset</span><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><span class=\"n\">queryset</span><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><span class=\"n\">entry</span> <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">bool</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">queryset</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Att bara skriva ut querysetet kommer inte att fylla på cachen. Detta beror på att anropet till <code class=\"docutils literal notranslate\"><span class=\"pre\">__repr__()</span></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\"><span class=\"pre\">SynchronousOnlyOperation</span></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\"><span class=\"pre\">get()</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> - har en asynkron variant (<code class=\"docutils literal notranslate\"><span class=\"pre\">aget()</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">adelete()</span></code>), och när du itererar över resultat kan du använda asynkron iteration (<code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">for</span></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\"><span class=\"pre\">for</span></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\"><span class=\"pre\">async</span> <span class=\"pre\">for</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">async</span> <span class=\"k\">for</span> <span class=\"n\">entry</span> <span class=\"ow\">in</span> <span class=\"n\">Authors</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><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\"><span class=\"pre\">list()</span></code> runt den för att tvinga fram dess utvärdering (du kan använda <code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">for</span></code> i en comprehension, om du vill det).</p>\n<p>Eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>-metoder som <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude()</span></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\"><span class=\"pre\">QuerySet</span></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\"><span class=\"pre\">get()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">first()</span></code> - tvingar fram exekvering av frågeuppsättningen och är blockerande. Vissa, som <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude()</span></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\"><span class=\"pre\">a</span></code>-prefixerad version av metoden (till exempel har vi <code class=\"docutils literal notranslate\"><span class=\"pre\">aget()</span></code> men inte <code class=\"docutils literal notranslate\"><span class=\"pre\">afilter()</span></code>), finns det ett mer logiskt sätt - leta upp vilken typ av metod det är i <a class=\"reference internal\" href=\"/sv/6.1/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>Methods that return new querysets</em>: These are the non-blocking ones,\nand don’t have asynchronous versions. You’re free to use these in any\nsituation, but understand the constraint of <a class=\"reference internal\" href=\"#no-deferred-queries\">no deferred queries</a> before\nusing <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a>,\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">only()</span></code></a>, or\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.fetch_mode\" title=\"django.db.models.query.QuerySet.fetch_mode\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">fetch_mode()</span></code></a>.</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\"><span class=\"pre\">a</span></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><span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"n\">my_input</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">afirst</span><span class=\"p\">()</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></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\"><span class=\"pre\">first()</span></code> utvärderar och returnerar en modellinstans - därför ändrar vi till <code class=\"docutils literal notranslate\"><span class=\"pre\">afirst()</span></code> och använder <code class=\"docutils literal notranslate\"><span class=\"pre\">await</span></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\"><span class=\"pre\">await</span></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\"><span class=\"pre\">await</span></code> någonstans för att göra den coroutine till ett verkligt värde.</p>\n</aside>\n</section>\n<section id=\"no-deferred-queries\">\n<h3>No deferred queries<a class=\"heading-anchor\" href=\"#no-deferred-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Relations are deferred by default. If the <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> relation is not prefetched,\naccessing <code class=\"docutils literal notranslate\"><span class=\"pre\">entry.blog</span></code> during asynchronous evaluation of a queryset attempts\na blocking database query, raising <code class=\"docutils literal notranslate\"><span class=\"pre\">SynchronousOnlyOperation</span></code>. (A similar\nlimitation applies to fields deferred via <code class=\"docutils literal notranslate\"><span class=\"pre\">defer()</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">only()</span></code>.) To avoid\nthis, see the advice on prefetching in <a class=\"reference internal\" href=\"#topics-db-queries-related\"><span class=\"std std-ref\">Relaterade objekt</span></a>.</p>\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\"><span class=\"pre\">SynchronousOnlyOperation</span></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\"><span class=\"pre\">sync_to_async</span></code> - se <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">JSONField</span></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/6.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Dog</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n<section id=\"storing-and-querying-for-none\">\n<span id=\"id10\"></span><h3>Lagring av och frågor om <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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>As with other fields, storing <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> as the field’s value will store it as\nSQL <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>. While not recommended, it is possible to store JSON scalar\n<code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code> instead of SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> by using the <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#django.db.models.JSONNull\" title=\"django.db.models.JSONNull\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONNull()</span></code></a> expression.</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\"><span class=\"pre\">null</span></code> densamma som SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>, dvs <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. Därför kan det vara svårt att skilja mellan dem.</p>\n<p>This only applies to <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> as the top-level value of the field. If <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>\nis inside a <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\"><span class=\"pre\">list</span></code></a> or <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\"><span class=\"pre\">dict</span></code></a>, it will always be interpreted\nas JSON <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code>.</p>\n<p>When querying, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-isnull\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">isnull=True</span></code></a> is used to match SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>,\nwhile exact-matching <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONNull()</span></code> is used to match JSON <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code>.</p>\n<aside class=\"version-note version-deprecated\" data-version=\"6.1\">\n<p class=\"version-note-title\">Deprecated since Django 6.1</p><p><span class=\"versionmodified deprecated\">Ersatt sedan version 6.1: </span>Exact-matching <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> in a query to mean JSON <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code> is deprecated.\nAfter the deprecation period, it will be interpreted as SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">JSONNull()</span></code> expression was added.</p>\n</aside>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">JSONNull</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Max&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Archie&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">JSONNull</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"go\">...: RemovedInDjango70Warning: Using None as the right-hand side of an</span>\n<span class=\"go\">exact lookup on JSONField to mean JSON scalar &#39;null&#39; is deprecated. Use</span>\n<span class=\"go\">JSONNull() instead (or use the __isnull lookup if you meant SQL NULL).</span>\n<span class=\"go\">...</span>\n<span class=\"go\">&lt;QuerySet [&lt;Dog: Archie&gt;]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">JSONNull</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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__isnull</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__isnull</span><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\"><span class=\"pre\">NULL</span></code>, bör du överväga att ange <code class=\"docutils literal notranslate\"><span class=\"pre\">null=False</span></code> och tillhandahålla en lämplig standard för tomma värden, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">default=dict</span></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\"><span class=\"pre\">null</span></code> bryter inte mot <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.null\" title=\"django.db.models.Field.null\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">null=False</span></code></a>.</p>\n</aside>\n<aside class=\"admonition-storing-json-null-inside-json-data admonition\">\n<p class=\"admonition-title\">Storing JSON <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code> inside JSON data</p>\n<p>While <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#django.db.models.JSONNull\" title=\"django.db.models.JSONNull\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONNull()</span></code></a> can be used in\n<a class=\"reference internal\" href=\"#std-fieldlookup-jsonfield.key\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">jsonfield.key</span></code></a> exact lookups, it cannot be stored inside\n<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\"><span class=\"pre\">dict</span></code></a> or <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\"><span class=\"pre\">list</span></code></a> instances meant to be saved in a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code>, unless a custom encoder is used. If you don’t want to use\na custom encoder, use <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> instead.</p>\n</aside>\n</section>\n<section id=\"key-index-and-path-transforms\">\n<span id=\"std-fieldlookup-jsonfield.key\"></span><span id=\"id11\"></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__breed</span><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>To query a key for JSON <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> or <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#django.db.models.JSONNull\" title=\"django.db.models.JSONNull\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONNull()</span></code></a> can be used.</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__owner</span><span class=\"o\">=</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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__owner</span><span class=\"o\">=</span><span class=\"n\">JSONNull</span><span class=\"p\">())</span>\n<span class=\"go\">&lt;Dog: Meg&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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__owner__name</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__owner__other_pets__0__name</span><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>If the key is a negative integer, it cannot be used in a filter keyword\ndirectly, but you can still use dictionary unpacking to use it in a query:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"p\">{</span><span class=\"s2\">&quot;data__owner__other_pets__-1__name&quot;</span><span class=\"p\">:</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<aside class=\"admonition-mysql-mariadb-and-oracle-21c admonition\">\n<p class=\"admonition-title\">MySQL, MariaDB, and Oracle &lt; 21c</p>\n<p>Negative JSON array indices are not supported.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>SQLite support for negative JSON array indices was added.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>Oracle 21c+ support for negative JSON array indices was added.</p>\n</aside>\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\"><span class=\"pre\">contains</span></code></a>.</p>\n<p>För att söka efter nycklar som saknas, använd <code class=\"docutils literal notranslate\"><span class=\"pre\">isnull</span></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Shep&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__owner__isnull</span><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/6.1/ref/models/querysets/#std-fieldlookup-exact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">exact</span></code></a>. Nyckel-, index- och sökvägstransformationer kan också kedjas med: <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-icontains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">icontains</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-endswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">endswith</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iendswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iendswith</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iexact\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iexact</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-regex\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">regex</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-iregex\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">iregex</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-startswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">startswith</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-istartswith\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">istartswith</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-lt\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">lt</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-lte\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">lte</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-gt\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">gt</span></code></a>, and <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#std-fieldlookup-gte\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">gte</span></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\"><span class=\"pre\">KT()</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">KT</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">lookup</span></span></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/6.1/ref/models/fields/#django.db.models.JSONField\" title=\"django.db.models.JSONField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">JSONField</span></code></a>. Du kan använda den dubbla understrecksnoteringen i <code class=\"docutils literal notranslate\"><span class=\"pre\">lookup</span></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=\"w\"> </span><span class=\"nn\">django.db.models.fields.json</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">KT</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Shep&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">first_breed</span><span class=\"o\">=</span><span class=\"n\">KT</span><span class=\"p\">(</span><span class=\"s2\">&quot;data__breed__1&quot;</span><span class=\"p\">),</span> <span class=\"n\">owner_name</span><span class=\"o\">=</span><span class=\"n\">KT</span><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><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">first_breed__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;lhasa&quot;</span><span class=\"p\">,</span> <span class=\"n\">owner_name</span><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/6.1/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\"><span class=\"pre\">exclude()</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></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\"><span class=\"pre\">isnull</span></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\">\n<p class=\"admonition-title\">MariaDB- och Oracle-användare</p>\n<p>Om du använder <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">order_by()</span></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\">\n<p class=\"admonition-title\">Oracle-användare</p>\n<p>Om du använder <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> som uppslagsvärde i en <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></code></a>-fråga i Oracle Database returneras objekt som inte har <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></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\"><span class=\"pre\">null</span></code>.</p>\n</aside>\n<aside class=\"admonition-postgresql-users admonition\">\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\"><span class=\"pre\">-&gt;</span></code>. Om flera operatörer används används operatören `` #&gt;``.</p>\n</aside>\n<aside class=\"admonition-sqlite-users admonition\">\n<p class=\"admonition-title\">SQLite-användare</p>\n<p>I SQLite kommer strängvärdena <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;true&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;false&quot;</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;null&quot;</span></code> alltid att tolkas som <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> respektive JSON <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code>.</p>\n</aside>\n</section>\n</section>\n<section id=\"containment-and-key-lookups\">\n<span id=\"id12\"></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\"><span class=\"pre\">innehåller</span></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/6.1/ref/models/querysets/#std-fieldlookup-contains\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">contains</span></code></a> åsidosätts för <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONField</span></code>. De objekt som returneras är de där den givna <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Merry&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__contains</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__contains</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__contains</span><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\">\n<p class=\"admonition-title\">Oracle och SQLite</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></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\"><span class=\"pre\">innehålls_av</span></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\"><span class=\"pre\">contains</span></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Merry&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__contained_by</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__contained_by</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">data__contained_by</span><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\">\n<p class=\"admonition-title\">Oracle och SQLite</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">contained_by</span></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\"><span class=\"pre\">har_nyckel</span></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__has_key</span><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\"><span class=\"pre\">har_nycklar</span></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__has_keys</span><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\"><span class=\"pre\">har_några_nycklar</span></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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Rufus&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Meg&quot;</span><span class=\"p\">,</span> <span class=\"n\">data</span><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><span class=\"n\">Dog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">data__has_any_keys</span><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\"><span class=\"pre\">Q</span></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>Keyword argument queries – in <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a>,\netc. – are ”AND”ed together. If you need to execute more complex queries (for\nexample, queries with <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> statements), you can use <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#q-objects\"><span class=\"std std-ref\">objekt av typen Q()</span></a>.</p>\n<p>A <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#q-objects\"><span class=\"std std-ref\">Q object</span></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.Q</span></code>) is an object used to\nencapsulate a collection of keyword arguments. These keyword arguments are\nspecified as in ”Field lookups” above.</p>\n<p>Till exempel kapslar detta <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt in en enda <code class=\"docutils literal notranslate\"><span class=\"pre\">LIKE</span></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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Q</span>\n\n<span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><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\"><span class=\"pre\">Q</span></code>-objekt kan kombineras med hjälp av operatörerna <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code>. När en operator används på två <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt, ger det ett nytt <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt.</p>\n<p>Till exempel ger detta uttalande ett enda <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt som representerar ”OR” av två <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;question__startswith&quot;</span></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><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><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\"><span class=\"pre\">WHERE</span></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><span class=\"w\"> </span><span class=\"n\">question</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;Who%&#39;</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"n\">question</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </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\"><span class=\"pre\">Q</span></code>-objekt med operatörerna <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code> och använda parentetisk gruppering. Dessutom kan <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt negeras med operatorn <code class=\"docutils literal notranslate\"><span class=\"pre\">~</span></code>, vilket möjliggör kombinerade uppslagningar som kombinerar både en normal fråga och en negerad (<code class=\"docutils literal notranslate\"><span class=\"pre\">NOT</span></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=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"o\">~</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><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/6.1/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\"><span class=\"pre\">filter()</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">get()</span></code></a>) kan också skickas ett eller flera <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt som positionella (ej namngivna) argument. Om du ger flera <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></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><span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">),</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"k\">from</span><span class=\"w\"> </span><span class=\"n\">polls</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">question</span><span class=\"w\"> </span><span class=\"k\">LIKE</span><span class=\"w\"> </span><span class=\"s1\">&#39;Who%&#39;</span>\n<span class=\"w\">    </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s1\">&#39;2005-05-02&#39;</span><span class=\"w\"> </span><span class=\"k\">OR</span><span class=\"w\"> </span><span class=\"n\">pub_date</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </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\"><span class=\"pre\">Q</span></code>-objekt och nyckelordsargument. Alla argument som anges i en lookup-funktion (oavsett om det är nyckelordsargument eller <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></code>-objekt) ”AND”-kopplas ihop. Om ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Q</span></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><span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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=\"n\">question__startswith</span><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>\n<span class=\"n\">Poll</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n    <span class=\"n\">question__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Who&quot;</span><span class=\"p\">,</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><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\">\n<p class=\"admonition-title\">Se även</p>\n<p><a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.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\"><span class=\"pre\">Q</span></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\"><span class=\"pre\">==</span></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\"><span class=\"pre\">Entry</span></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><span class=\"n\">some_entry</span> <span class=\"o\">==</span> <span class=\"n\">other_entry</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">some_entry</span><span class=\"o\">.</span><span class=\"n\">id</span> <span class=\"o\">==</span> <span class=\"n\">other_entry</span><span class=\"o\">.</span><span class=\"n\">id</span>\n</code></pre></div>\n<p>Om en modells primärnyckel inte heter <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></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\"><span class=\"pre\">name</span></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><span class=\"n\">some_obj</span> <span class=\"o\">==</span> <span class=\"n\">other_obj</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">some_obj</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"n\">other_obj</span><span class=\"o\">.</span><span class=\"n\">name</span>\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/6.1/ref/models/instances/#django.db.models.Model.delete\" title=\"django.db.models.Model.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>. 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><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">delete</span><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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> har en <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">delete()</span></code></a>-metod, som raderar alla medlemmar i den <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>.</p>\n<p>Detta raderar till exempel alla <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>-objekt med <code class=\"docutils literal notranslate\"><span class=\"pre\">pub_date</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2005</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><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\"><span class=\"pre\">delete()</span></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\"><span class=\"pre\">delete()</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> och anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">delete()</span></code> på varje objekt individuellt) i stället för att använda bulk <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">delete()</span></code></a>-metoden för en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>.</p>\n<p>När Django raderar ett objekt emulerar det som standard beteendet hos SQL-begränsningen <code class=\"docutils literal notranslate\"><span class=\"pre\">ON</span> <span class=\"pre\">DELETE</span> <span class=\"pre\">CASCADE</span></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><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><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>\n<span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Detta kaskadbeteende kan anpassas via argumentet <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey.on_delete\" title=\"django.db.models.ForeignKey.on_delete\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">on_delete</span></code></a> till <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>.</p>\n<p>Observera att <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">delete()</span></code></a> är den enda <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>-metoden som inte exponeras på en <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></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\"><span class=\"pre\">Entry.objects.delete()</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">delete</span><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\"><span class=\"pre\">pk</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> och <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model._state\" title=\"django.db.models.Model._state\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">_state.adding</span></code></a> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></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><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;My blog&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Blogging is easy&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>  <span class=\"c1\"># blog.pk == 1</span>\n\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">save</span><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\"><span class=\"pre\">Blog</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ThemeBlog</span><span class=\"p\">(</span><span class=\"n\">Blog</span><span class=\"p\">):</span>\n    <span class=\"n\">theme</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">django_blog</span> <span class=\"o\">=</span> <span class=\"n\">ThemeBlog</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Django&quot;</span><span class=\"p\">,</span> <span class=\"n\">tagline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Django is easy&quot;</span><span class=\"p\">,</span> <span class=\"n\">theme</span><span class=\"o\">=</span><span class=\"s2\">&quot;python&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">save</span><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\"><span class=\"pre\">pk</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, och <code class=\"docutils literal notranslate\"><span class=\"pre\">_state.adding</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">id</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"n\">django_blog</span><span class=\"o\">.</span><span class=\"n\">save</span><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\"><span class=\"pre\">Entry</span></code> en <code class=\"docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></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><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span>  <span class=\"c1\"># some previous entry</span>\n<span class=\"n\">old_authors</span> <span class=\"o\">=</span> <span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">(</span><span class=\"n\">old_authors</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>För ett <code class=\"docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></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\"><span class=\"pre\">entry</span></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><span class=\"n\">detail</span> <span class=\"o\">=</span> <span class=\"n\">EntryDetail</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">entry</span>\n<span class=\"n\">detail</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Note that it is not possible to copy instances of models with deferred fields\nusing this pattern unless values are assigned to them:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">defer</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">pk</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">_state</span><span class=\"o\">.</span><span class=\"n\">adding</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"w\">    </span><span class=\"o\">...</span>\n<span class=\"gr\">AttributeError</span>: <span class=\"n\">Cannot retrieve deferred field &#39;name&#39; from an unsaved model.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;Another Blog&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">save</span><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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>. Det kan du göra med metoden <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">update()</span></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>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pub_date__year</span><span class=\"o\">=</span><span class=\"mi\">2007</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">headline</span><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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></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><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">headline</span><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\"><span class=\"pre\">update()</span></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/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>-metoder på dina modeller, eller avger signalerna <code class=\"docutils literal notranslate\"><span class=\"pre\">pre_save</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">post_save</span></code> (som är en konsekvens av att anropa <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>), eller hedrar fältalternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.DateField.auto_now\" title=\"django.db.models.DateField.auto_now\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">auto_now</span></code></a>. Om du vill spara varje objekt i en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> och se till att metoden <a class=\"reference internal\" href=\"/sv/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> 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/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">my_queryset</span><span class=\"p\">:</span>\n    <span class=\"n\">item</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Calls to update can also use <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#f-expressions\"><span class=\"std std-ref\">F()-uttryck</span></a> to update one field based on\nthe value of another field in the model. This is especially useful for\nincrementing counters based upon their current value. For example, to increment\nthe pingback count for every entry in the blog:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">number_of_pingbacks</span><span class=\"o\">=</span><span class=\"n\">F</span><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\"><span class=\"pre\">F()</span></code>-objekt i filter- och exkluderingsklausuler kan du inte införa joins när du använder <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></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\"><span class=\"pre\">F()</span></code>-objekt, kommer ett <code class=\"docutils literal notranslate\"><span class=\"pre\">FieldError</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"n\">F</span><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>When you define a relationship in a model (with\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>,\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></code></a>, or\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a>), instances of the model class gain\naccessor attributes for the related object(s).</p>\n<p>Using the models at the top of this page, for example, an <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> object\n<code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code> has its associated <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> object accessible in its <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span></code> attribute:\n<code class=\"docutils literal notranslate\"><span class=\"pre\">e.blog</span></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 also creates API accessors for the ”other” side of the relationship –\nthe link from the related model to the model that defines the relationship.\nFor example, a <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code> object <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> has a manager that returns all related\n<code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> objects in the <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_set</span></code> attribute: <code class=\"docutils literal notranslate\"><span class=\"pre\">b.entry_set.all()</span></code>.</p>\n<p>These accessors may be prefetched by the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> methods\n<a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">select_related()</span></code></a> or\n<a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">prefetch_related()</span></code></a>. If not prefetched,\naccess will trigger an on-demand fetch through the model’s\n<a class=\"reference internal\" href=\"/sv/6.1/topics/db/fetch-modes/\"><span class=\"doc\">fetch mode</span></a>.</p>\n<p>Alla exempel i detta avsnitt använder modellerna <code class=\"docutils literal notranslate\"><span class=\"pre\">Blog</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span>  <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/6.1/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a>. 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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"n\">some_blog</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Om ett fält i <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> har inställningen <code class=\"docutils literal notranslate\"><span class=\"pre\">null=True</span></code> (dvs. det tillåter <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>-värden) kan du tilldela <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">save</span><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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"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><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><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><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><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/6.1/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\"><span class=\"pre\">select_related()</span></code></a> <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a> 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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><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><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">blog</span><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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a>, kommer instanser av modellen med utländsk nyckel att ha tillgång till en <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> som returnerar alla instanser av den första modellen. Som standard har denna <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO_set</span></code>, där <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO</span></code> är källmodellens namn, med gemener. Denna <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a> returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></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><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">all</span><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><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Du kan åsidosätta namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">FOO_set</span></code> genom att ange parametern <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">related_name`</span></code> i definitionen <code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey`</span></code>. Om till exempel modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> ändrades till <code class=\"docutils literal notranslate\"><span class=\"pre\">blog</span> <span class=\"pre\">=</span> <span class=\"pre\">ForeignKey(Blog,</span> <span class=\"pre\">on_delete=models.CASCADE,</span> <span class=\"pre\">related_name='entries')</span></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><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">all</span><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><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">headline__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Lennon&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">count</span><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/6.1/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\"><span class=\"pre\">RelatedManager</span></code></a> som används för omvända relationer en underklass av <a class=\"reference internal\" href=\"/sv/6.1/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=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Entry</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Manager</span><span class=\"p\">()</span>  <span class=\"c1\"># Default Manager</span>\n    <span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">EntryManager</span><span class=\"p\">()</span>  <span class=\"c1\"># Custom Manager</span>\n\n\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"p\">(</span><span class=\"n\">manager</span><span class=\"o\">=</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">EntryManager</span></code> utförde standardfiltrering i sin <code class=\"docutils literal notranslate\"><span class=\"pre\">get_queryset()</span></code>-metod, skulle den filtreringen gälla för <code class=\"docutils literal notranslate\"><span class=\"pre\">all()</span></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><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"p\">(</span><span class=\"n\">manager</span><span class=\"o\">=</span><span class=\"s2\">&quot;entries&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">is_published</span><span class=\"p\">()</span>\n</code></pre></div>\n<aside class=\"admonition-interaction-with-prefetching admonition\">\n<p class=\"admonition-title\">Interaktion med prefetching</p>\n<p>När du anropar <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">prefetch_related()</span></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/6.1/ref/models/querysets/#django.db.models.Prefetch\" title=\"django.db.models.Prefetch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Prefetch()</span></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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Prefetch</span>\n\n<span class=\"n\">prefetch_manager</span> <span class=\"o\">=</span> <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s2\">&quot;entry_set&quot;</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n<span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"n\">prefetch_manager</span><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/6.1/ref/models/querysets/#django.db.models.query.QuerySet\" title=\"django.db.models.query.QuerySet\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code></a>-metoderna som definieras i ”Hämta objekt” ovan har <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></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/6.1/ref/models/relations/\"><span class=\"doc\">related objects reference</span></a>.</p>\n<dl class=\"simple\">\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">add(obj1,</span> <span class=\"pre\">obj2,</span> <span class=\"pre\">...)</span></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\"><span class=\"pre\">skapa(**kwargs)</span></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\"><span class=\"pre\">remove(obj1,</span> <span class=\"pre\">obj2,</span> <span class=\"pre\">...)</span></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\"><span class=\"pre\">clear()</span></code></dt><dd><p>Tar bort alla objekt från den relaterade objektuppsättningen.</p>\n</dd>\n<dt><code class=\"docutils literal notranslate\"><span class=\"pre\">set(objs)</span></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\"><span class=\"pre\">set()</span></code> med en iterabel av objektinstanser. Till exempel, om <code class=\"docutils literal notranslate\"><span class=\"pre\">e1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">e2</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></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><span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">([</span><span class=\"n\">e1</span><span class=\"p\">,</span> <span class=\"n\">e2</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>Om metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">clear()</span></code> är tillgänglig kommer alla befintliga objekt att tas bort från <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_set</span></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\"><span class=\"pre\">clear()</span></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/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></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\"><span class=\"pre\">'_set'</span></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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>  <span class=\"c1\"># Returns all Author objects for this Entry.</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span>\n\n<span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">all</span><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/6.1/ref/models/fields/#django.db.models.ForeignKey\" title=\"django.db.models.ForeignKey\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code></a> kan <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> ange <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">related_name</span></code></a>. I exemplet ovan, om <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> i <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> hade specificerat <code class=\"docutils literal notranslate\"><span class=\"pre\">related_name='entries'</span></code>, skulle varje <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code>-instans ha ett <code class=\"docutils literal notranslate\"><span class=\"pre\">entries</span></code>-attribut istället för <code class=\"docutils literal notranslate\"><span class=\"pre\">entry_set</span></code>.</p>\n<p>En annan skillnad mot en-till-många-relationer är att metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">add()</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">remove()</span></code> för många-till-många-relationer accepterar primärnyckelvärden, förutom modellinstanser. Om till exempel <code class=\"docutils literal notranslate\"><span class=\"pre\">e1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">e2</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code>-instanser, fungerar dessa <code class=\"docutils literal notranslate\"><span class=\"pre\">set()</span></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><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">([</span><span class=\"n\">e1</span><span class=\"p\">,</span> <span class=\"n\">e2</span><span class=\"p\">])</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">set</span><span class=\"p\">([</span><span class=\"n\">e1</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">,</span> <span class=\"n\">e2</span><span class=\"o\">.</span><span class=\"n\">pk</span><span class=\"p\">])</span>\n</code></pre></div>\n<section id=\"filtering-on-many-to-many-relationships\">\n<h4>Filtering on many-to-many relationships<a class=\"heading-anchor\" href=\"#filtering-on-many-to-many-relationships\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>When calling <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> on a many-to-many relationship, be aware that the\njoin between <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> and the intermediary model to <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code> is performed\nonly once, resulting in a restrictive, or ”sticky”, filter. Consider the\nfollowing example:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">batucada</span> <span class=\"o\">=</span> <span class=\"n\">Blog</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Batucada Blog&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">batucada</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;Supporting social movements with drums&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pub_date</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2019</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">gloria</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Gloria&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">anna</span> <span class=\"o\">=</span> <span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Anna&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">gloria</span><span class=\"p\">,</span> <span class=\"n\">anna</span><span class=\"p\">)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">anna</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Gloria&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n<p>This filtered query is looking for blog entries that are co-authored by\n<code class=\"docutils literal notranslate\"><span class=\"pre\">anna</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">gloria</span></code>. You would expect it to return the entry <code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code>.\nHowever, the filter condition, which traverses the many-to-many\nrelationship between <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code>, yields an empty\n<code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n<p>Since the join between <code class=\"docutils literal notranslate\"><span class=\"pre\">Entry</span></code> and the intermediary model to <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span></code>\nhappens only once, no single object of the joined models - i.e., a relation\nbetween one author and one entry - can fulfill the query condition (entries\nthat are co-authored by <code class=\"docutils literal notranslate\"><span class=\"pre\">anna</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">gloria</span></code>). You can circumvent this\nbehavior by chaining two consecutive <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> calls, resulting in two\nseparate joins and thus a more permissive filter:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">anna</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Gloria&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Entry: Supporting social movements with drums&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-exclude-is-also-sticky admonition\">\n<p class=\"admonition-title\">exclude() is also sticky</p>\n<p>Please note that for this example,\n<a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></code></a> behaves similarly\nto <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a> despite being\nimplemented differently. When traversing the many-to-many relationship,\nit does not exclude the entry <code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code> despite being co-authored by Gloria:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">anna</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Gloria&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;Entry: Supporting social movements with drums&gt;]&gt;</span>\n</code></pre></div>\n<p>When chaining a second <code class=\"docutils literal notranslate\"><span class=\"pre\">exclude()</span></code> call, an empty <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> is\nreturned, as expected:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">anna</span><span class=\"o\">.</span><span class=\"n\">entry_set</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Gloria&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet []&gt;</span>\n</code></pre></div>\n<p>However, in other cases, <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">exclude()</span></code></a>\nbehaves differently from <a class=\"reference internal\" href=\"/sv/6.1/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\"><span class=\"pre\">filter()</span></code></a>.\nSee the <a class=\"reference internal\" href=\"#exclude-implementation\"><span class=\"std std-ref\">note</span></a> in the ”Spanning multi-valued\nrelationships” section above.</p>\n</aside>\n</section>\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/6.1/ref/models/fields/#django.db.models.OneToOneField\" title=\"django.db.models.OneToOneField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">OneToOneField</span></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=\"w\"> </span><span class=\"nc\">EntryDetail</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"n\">Entry</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">details</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n\n<span class=\"n\">ed</span> <span class=\"o\">=</span> <span class=\"n\">EntryDetail</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">ed</span><span class=\"o\">.</span><span class=\"n\">entry</span>  <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/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></code></a>-objekt, men det <a class=\"reference internal\" href=\"/sv/6.1/topics/db/managers/#django.db.models.Manager\" title=\"django.db.models.Manager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Manager</span></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><span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">entrydetail</span>  <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\"><span class=\"pre\">DoesNotExist</span></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><span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">entrydetail</span> <span class=\"o\">=</span> <span class=\"n\">ed</span>\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>The answer lies in the <a class=\"reference internal\" href=\"/sv/6.1/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">app</span> <span class=\"pre\">registry</span></code></a>. When Django\nstarts, it imports each application listed in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, and\nthen the <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> module inside each application. Whenever a new model class\nis created, Django adds backward-relationships to any related models. If the\nrelated models haven’t been imported yet, Django keeps track of the\nrelationships and adds them when the related models eventually are imported.</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/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></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\"><span class=\"pre\">b</span></code> med <code class=\"docutils literal notranslate\"><span class=\"pre\">id=5</span></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><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"p\">)</span>  <span class=\"c1\"># Query using object instance</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><span class=\"o\">=</span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>  <span class=\"c1\"># Query using id from instance</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">blog</span><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/6.1/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":"No deferred queries","anchor":"no-deferred-queries","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":"Filtering on many-to-many relationships","anchor":"filtering-on-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/6.1/topics/"},{"docname":"topics/db/index","title":"Modeller och databaser","url":"/sv/6.1/topics/db/"}],"prev":{"docname":"topics/db/models","title":"Modeller","url":"/sv/6.1/topics/db/models/"},"next":{"docname":"topics/db/fetch-modes","title":"Fetch modes","url":"/sv/6.1/topics/db/fetch-modes/"},"formats":{"html":"/sv/6.1/topics/db/queries/","markdown":"/sv/6.1/topics/db/queries.md","json":"/sv/6.1/topics/db/queries.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/db/queries.txt","official":"https://docs.djangoproject.com/sv/6.1/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"]}