{"title":"Frågeuttryck","version":"6.1","locale":"sv","docname":"ref/models/expressions","url":"/sv/6.1/ref/models/expressions/","canonical":"https://djangodocs.dev/sv/6.1/ref/models/expressions/","summary":"Frågeuttryck beskriver ett värde eller en beräkning som kan användas som en del av en uppdatering, ett skapande, ett filter, en ordning efter, en annotering eller…","html":"<h1>Frågeuttryck<a class=\"heading-anchor\" href=\"#query-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Frågeuttryck beskriver ett värde eller en beräkning som kan användas som en del av en uppdatering, ett skapande, ett filter, en ordning efter, en annotering eller ett aggregat. När ett uttryck ger ett booleskt värde kan det användas direkt i filter. Det finns ett antal inbyggda uttryck (dokumenteras nedan) som kan användas för att hjälpa dig att skriva frågor. Uttryck kan kombineras, eller i vissa fall nästlas, för att bilda mer komplexa beräkningar.</p>\n<section id=\"supported-arithmetic\">\n<h2>Stöd för aritmetik<a class=\"heading-anchor\" href=\"#supported-arithmetic\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django stöder negation, addition, subtraktion, multiplikation, division, modulo aritmetik och power-operatorn på frågeuttryck med hjälp av Python-konstanter, variabler och till och med andra uttryck.</p>\n</section>\n<section id=\"output-field\">\n<span id=\"id1\"></span><h2>Utgångsfält<a class=\"heading-anchor\" href=\"#output-field\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Många av de uttryck som dokumenteras i detta avsnitt stöder en valfri parameter <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code>. Om den anges kommer Django att ladda värdet i det fältet efter att ha hämtat det från databasen.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> tar en modellfältsinstans, som <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField()</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField()</span></code>. Vanligtvis behöver fältet inte några argument, som <code class=\"docutils literal notranslate\"><span class=\"pre\">max_length</span></code>, eftersom fältargument avser datavalidering som inte kommer att utföras på uttryckets utdatavärde.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> krävs endast när Django inte automatiskt kan bestämma resultatets fälttyp, till exempel komplexa uttryck som blandar fälttyper. Om du till exempel lägger till en <code class=\"docutils literal notranslate\"><span class=\"pre\">DecimalField()</span></code> och en <code class=\"docutils literal notranslate\"><span class=\"pre\">FloatField()</span></code> krävs ett utmatningsfält, som <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field=FloatField()</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> also allows using custom fields that perform type conversions\noutside a specific model field context. For example, if you frequently need to\nperform date arithmetic with <code class=\"docutils literal notranslate\"><span class=\"pre\">timedelta</span></code>, you can create a custom field that\nhandles the conversion, ensuring consistent results across databases. See\n<a class=\"reference internal\" href=\"/sv/6.1/howto/custom-model-fields/\"><span class=\"doc\">Så här skapar du anpassade modellfält</span></a>.</p>\n</section>\n<section id=\"some-examples\">\n<h2>Några exempel<a class=\"heading-anchor\" href=\"#some-examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\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\">Count</span><span class=\"p\">,</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">Value</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Length</span><span class=\"p\">,</span> <span class=\"n\">Upper</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.lookups</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">GreaterThan</span>\n\n<span class=\"go\"># Find companies that have more employees than chairs.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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\">num_employees__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">))</span>\n\n<span class=\"go\"># Find companies that have at least twice as many employees</span>\n<span class=\"go\"># as chairs. Both the querysets below are equivalent.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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\">num_employees__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">)</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\">Company</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\">num_employees__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">))</span>\n\n<span class=\"go\"># How many chairs are needed for each company to seat all employees?</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">company</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">Company</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\">num_employees__gt</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span>    <span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">chairs_needed</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span>    <span class=\"o\">.</span><span class=\"n\">first</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\">company</span><span class=\"o\">.</span><span class=\"n\">num_employees</span>\n<span class=\"go\">120</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">company</span><span class=\"o\">.</span><span class=\"n\">num_chairs</span>\n<span class=\"go\">50</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">company</span><span class=\"o\">.</span><span class=\"n\">chairs_needed</span>\n<span class=\"go\">70</span>\n\n<span class=\"go\"># Create a new company using expressions.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">company</span> <span class=\"o\">=</span> <span class=\"n\">Company</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;Google&quot;</span><span class=\"p\">,</span> <span class=\"n\">ticker</span><span class=\"o\">=</span><span class=\"n\">Upper</span><span class=\"p\">(</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s2\">&quot;goog&quot;</span><span class=\"p\">)))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">company</span><span class=\"o\">.</span><span class=\"n\">ticker</span>\n<span class=\"go\">&#39;GOOG&#39;</span>\n\n<span class=\"go\"># Annotate models with an aggregated value. Both forms</span>\n<span class=\"go\"># below are equivalent.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_products</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;products&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_products</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;products&quot;</span><span class=\"p\">)))</span>\n\n<span class=\"go\"># Aggregates can contain complex computations also</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_offerings</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;products&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;services&quot;</span><span class=\"p\">)))</span>\n\n<span class=\"go\"># Expressions can also be used in order_by(), either directly</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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=\"n\">Length</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">asc</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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=\"n\">Length</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">())</span>\n<span class=\"go\"># or using the double underscore lookup syntax.</span>\n<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\">CharField</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Length</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">CharField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">Length</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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;name__length&quot;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Boolean expression can be used directly in filters.</span>\n<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\">Exists</span><span class=\"p\">,</span> <span class=\"n\">OuterRef</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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\">Exists</span><span class=\"p\">(</span><span class=\"n\">Employee</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\">company</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">),</span> <span class=\"n\">salary__gt</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n\n<span class=\"go\"># Lookup expressions can also be used directly in filters</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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\">GreaterThan</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">)))</span>\n<span class=\"go\"># or annotations.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Company</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\">need_chairs</span><span class=\"o\">=</span><span class=\"n\">GreaterThan</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"built-in-expressions\">\n<h2>Inbyggda uttryck<a class=\"heading-anchor\" href=\"#built-in-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Dessa uttryck definieras i <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.expressions</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.models.aggregates</span></code>, men för enkelhetens skull är de tillgängliga och importeras vanligtvis från <a class=\"reference internal\" href=\"/sv/6.1/topics/db/models/#module-django.db.models\" title=\"django.db.models\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.db.models</span></code></a>.</p>\n</aside>\n<section id=\"f-expressions\">\n<span id=\"id2\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>-uttryck<a class=\"heading-anchor\" href=\"#f-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.F\">\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\">F</span></span><a class=\"heading-anchor\" href=\"#django.db.models.F\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>-objekt representerar värdet av ett modellfält, transformerat värde av ett modellfält eller annoterad kolumn. Det gör det möjligt att referera till modellfältsvärden och utföra databasoperationer med hjälp av dem utan att faktiskt behöva dra ut dem från databasen till Python-minnet.</p>\n<p>Istället använder Django objektet <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> för att generera ett SQL-uttryck som beskriver den nödvändiga operationen på databasnivå.</p>\n<p>Låt oss prova detta med ett exempel. Normalt kan man göra något liknande:</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\"># Tintin filed a news story!</span>\n<span class=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">Reporters</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;Tintin&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">stories_filed</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n<span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Här har vi hämtat värdet av <code class=\"docutils literal notranslate\"><span class=\"pre\">reporter.stories_filed</span></code> från databasen till minnet och manipulerat det med hjälp av välkända Python-operatorer, och sedan sparat objektet tillbaka till databasen. Men istället kunde vi också ha gjort:</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\">F</span>\n\n<span class=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">Reporters</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;Tintin&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">stories_filed</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;stories_filed&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Även om <code class=\"docutils literal notranslate\"><span class=\"pre\">reporter.stories_filed</span> <span class=\"pre\">=</span> <span class=\"pre\">F('stories_filed')</span> <span class=\"pre\">+</span> <span class=\"pre\">1</span></code> ser ut som en normal Python-tilldelning av värde till ett instansattribut, är det i själva verket en SQL-konstruktion som beskriver en operation i databasen.</p>\n<p>När Django stöter på en instans av <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> åsidosätter den Pythons standardoperatorer för att skapa ett inkapslat SQL-uttryck; i det här fallet ett som instruerar databasen att öka databasfältet som representeras av <code class=\"docutils literal notranslate\"><span class=\"pre\">reporter.stories_filed</span></code>.</p>\n<p>Oavsett vilket värde som finns eller fanns på <code class=\"docutils literal notranslate\"><span class=\"pre\">reporter.stories_filed</span></code> får Python aldrig veta något om det - det hanteras helt och hållet av databasen. Allt Python gör, genom Djangos <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>-klass, är att skapa SQL-syntaxen för att hänvisa till fältet och beskriva operationen.</p>\n<p>As well as being used in operations on single instances as above, <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> can\nbe used with <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> to perform bulk updates on a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>. This\nreduces the two queries we were using above - the <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> and the\n<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> - to just one:</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\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">Reporters</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</span><span class=\"o\">=</span><span class=\"s2\">&quot;Tintin&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">stories_filed</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;stories_filed&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>We can also use <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> to increment\nthe field value on multiple objects - which could be very much faster than\npulling them all into Python from the database, looping over them, incrementing\nthe field value of each one, and saving each one back to the database:</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\">Reporter</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\">stories_filed</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;stories_filed&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><code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> kan därför erbjuda prestandafördelar genom:</p>\n<ul class=\"simple\">\n<li><p>att få databasen, snarare än Python, att göra jobbet</p></li>\n<li><p>minska antalet förfrågningar som vissa operationer kräver</p></li>\n</ul>\n<section id=\"slicing-f-expressions\">\n<span id=\"slicing-using-f\"></span><h4>Skivning av <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>-uttryck<a class=\"heading-anchor\" href=\"#slicing-f-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För strängbaserade fält, textbaserade fält och <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/postgres/fields/#django.contrib.postgres.fields.ArrayField\" title=\"django.contrib.postgres.fields.ArrayField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ArrayField</span></code></a> kan du använda Pythons syntax för array-slicing. Indexen är 0-baserade. Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">step</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">slice</span></code> och negativ indexering stöds inte. 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=\"c1\"># Replacing a name with a substring of itself.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"n\">Writers</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;Priyansh&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"n\">name</span>\n<span class=\"go\">&#39;riya&#39;</span>\n</code></pre></div>\n</section>\n<section id=\"avoiding-race-conditions-using-f\">\n<span id=\"id3\"></span><h4>Undvika tävlingsförhållanden med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code><a class=\"heading-anchor\" href=\"#avoiding-race-conditions-using-f\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>En annan fördel med <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> är att om databasen - snarare än Python - uppdaterar ett fälts värde undviks ett <em>race condition</em>.</p>\n<p>Om två Python-trådar kör koden i det första exemplet ovan kan den ena tråden hämta, öka och spara ett fälts värde efter att den andra har hämtat det från databasen. Det värde som den andra tråden sparar kommer att baseras på det ursprungliga värdet; den första trådens arbete kommer att gå förlorat.</p>\n<p>If the database is responsible for updating the field, the process is more\nrobust: it will only ever update the field based on the value of the field in\nthe database when the <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> or <code class=\"docutils literal notranslate\"><span class=\"pre\">update()</span></code> is executed, rather\nthan based on its value when the instance was retrieved.</p>\n</section>\n<section id=\"f-assignments-are-refreshed-after-model-save\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> assignments are refreshed after <code class=\"docutils literal notranslate\"><span class=\"pre\">Model.save()</span></code><a class=\"heading-anchor\" href=\"#f-assignments-are-refreshed-after-model-save\"><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\">F()</span></code> objects assigned to model fields are refreshed from the database on\n<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> on backends that support it without incurring a subsequent\nquery (SQLite, PostgreSQL, and Oracle) and deferred otherwise (MySQL or\nMariaDB). For 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=\"n\">reporter</span> <span class=\"o\">=</span> <span class=\"n\">Reporters</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;Tintin&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">stories_filed</span> <span class=\"o\">=</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;stories_filed&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">reporter</span><span class=\"o\">.</span><span class=\"n\">stories_filed</span>  <span class=\"c1\"># This triggers a refresh query on MySQL/MariaDB.</span>\n<span class=\"go\">14  # Assuming the database value was 13 when the object was saved.</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>In previous versions of Django, <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> objects were not refreshed from the\ndatabase on <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> which resulted in them being evaluated and\npersisted every time the instance was saved.</p>\n</aside>\n</section>\n<section id=\"using-f-in-filters\">\n<h4>Använda <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> i filter<a class=\"heading-anchor\" href=\"#using-f-in-filters\"><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\">F()</span></code> är också mycket användbart i <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>-filter, där de gör det möjligt att filtrera en uppsättning objekt mot kriterier baserade på deras fältvärden, snarare än på Python-värden.</p>\n<p>Detta finns dokumenterat i <a class=\"reference internal\" href=\"/sv/6.1/topics/db/queries/#using-f-expressions-in-filters\"><span class=\"std std-ref\">Använda F()-uttryck i frågor</span></a>.</p>\n</section>\n<section id=\"using-f-with-annotations\">\n<span id=\"id4\"></span><h4>Använda <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> med annotationer<a class=\"heading-anchor\" href=\"#using-f-with-annotations\"><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\">F()</span></code> kan användas för att skapa dynamiska fält i dina modeller genom att kombinera olika fält med aritmetik:</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\">company</span> <span class=\"o\">=</span> <span class=\"n\">Company</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">chairs_needed</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Om de fält som du kombinerar är av olika typer måste du tala om för Django vilken typ av fält som ska returneras. De flesta uttryck stöder <a class=\"reference internal\" href=\"#output-field\"><span class=\"std std-ref\">output_field</span></a> för detta fall, men eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> inte gör det, måste du omsluta uttrycket med <a class=\"reference internal\" href=\"#django.db.models.ExpressionWrapper\" title=\"django.db.models.ExpressionWrapper\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ExpressionWrapper</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=\"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\">DateTimeField</span><span class=\"p\">,</span> <span class=\"n\">ExpressionWrapper</span><span class=\"p\">,</span> <span class=\"n\">F</span>\n\n<span class=\"n\">Ticket</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=\"n\">expires</span><span class=\"o\">=</span><span class=\"n\">ExpressionWrapper</span><span class=\"p\">(</span>\n        <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;active_at&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;duration&quot;</span><span class=\"p\">),</span> <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">DateTimeField</span><span class=\"p\">()</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Vid hänvisning till relationsfält som <code class=\"docutils literal notranslate\"><span class=\"pre\">ForeignKey</span></code> returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> primärnyckelvärdet i stället för en modellinstans:</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\">car</span> <span class=\"o\">=</span> <span class=\"n\">Company</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">built_by</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;manufacturer&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\">car</span><span class=\"o\">.</span><span class=\"n\">manufacturer</span>\n<span class=\"go\">&lt;Manufacturer: Toyota&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">built_by</span>\n<span class=\"go\">3</span>\n</code></pre></div>\n</section>\n<section id=\"using-f-to-sort-null-values\">\n<span id=\"id5\"></span><h4>Använda <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> för att sortera nollvärden<a class=\"heading-anchor\" href=\"#using-f-to-sort-null-values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Använd <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> och nyckelordsargumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_first</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_last</span></code> till <a class=\"reference internal\" href=\"#django.db.models.Expression.asc\" title=\"django.db.models.Expression.asc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Expression.asc()</span></code></a> eller <a class=\"reference internal\" href=\"#django.db.models.Expression.desc\" title=\"django.db.models.Expression.desc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">desc()</span></code></a> för att styra ordningsföljden för ett fälts null-värden. Som standard beror ordningsföljden på din databas.</p>\n<p>Till exempel:, för att sortera företag som inte har kontaktats (<code class=\"docutils literal notranslate\"><span class=\"pre\">last_contacted</span></code> är null) efter företag som har kontaktats:</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\">F</span>\n\n<span class=\"n\">Company</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=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;last_contacted&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">desc</span><span class=\"p\">(</span><span class=\"n\">nulls_last</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n<section id=\"using-f-with-logical-operations\">\n<h4>Använda <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> med logiska operationer<a class=\"heading-anchor\" href=\"#using-f-with-logical-operations\"><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\">F()</span></code>-uttryck som ger <code class=\"docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code> kan logiskt negeras med inversionsoperatorn <code class=\"docutils literal notranslate\"><span class=\"pre\">~F()</span></code>. Till exempel:, för att byta aktiveringsstatus för företag:</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\">F</span>\n\n<span class=\"n\">Company</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\">is_active</span><span class=\"o\">=~</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;is_active&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"func-expressions\">\n<span id=\"id6\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Func()</span></code> uttryck<a class=\"heading-anchor\" href=\"#func-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Func()</span></code>-uttryck är bastypen för alla uttryck som involverar databasfunktioner som <code class=\"docutils literal notranslate\"><span class=\"pre\">COALESCE</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">LOWER</span></code>, eller aggregat som <code class=\"docutils literal notranslate\"><span class=\"pre\">SUM</span></code>. De kan användas direkt:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"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><span class=\"p\">,</span> <span class=\"n\">Func</span>\n\n<span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">field_lower</span><span class=\"o\">=</span><span class=\"n\">Func</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;field&quot;</span><span class=\"p\">),</span> <span class=\"n\">function</span><span class=\"o\">=</span><span class=\"s2\">&quot;LOWER&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>eller så kan de användas för att bygga upp ett bibliotek med databasfunktioner:</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\">Lower</span><span class=\"p\">(</span><span class=\"n\">Func</span><span class=\"p\">):</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;LOWER&quot;</span>\n\n\n<span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">field_lower</span><span class=\"o\">=</span><span class=\"n\">Lower</span><span class=\"p\">(</span><span class=\"s2\">&quot;field&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Men båda fallen kommer att resultera i en frågeuppsättning där varje modell är annoterad med ett extra attribut <code class=\"docutils literal notranslate\"><span class=\"pre\">field_lower</span></code> som produceras, ungefär, från 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>\n<span class=\"w\">    </span><span class=\"p\">...</span>\n<span class=\"w\">    </span><span class=\"k\">LOWER</span><span class=\"p\">(</span><span class=\"ss\">&quot;db_table&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;field&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"ss\">&quot;field_lower&quot;</span>\n</code></pre></div>\n<p>See <a class=\"reference internal\" href=\"/sv/6.1/ref/models/database-functions/\"><span class=\"doc\">Databasfunktioner</span></a> for a list of built-in database\nfunctions.</p>\n<p>API:et <code class=\"docutils literal notranslate\"><span class=\"pre\">Func</span></code> är uppbyggt enligt följande:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Func\">\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\">Func</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">expressions</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Func\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Func.function\">\n<span class=\"sig-name descname\"><span class=\"pre\">function</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Func.function\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut som beskriver den funktion som ska genereras. Specifikt kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">funktionen</span></code> att interpoleras som <code class=\"docutils literal notranslate\"><span class=\"pre\">funktion</span></code> platshållare inom <a class=\"reference internal\" href=\"#django.db.models.Func.template\" title=\"django.db.models.Func.template\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">template</span></code></a>. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Func.template\">\n<span class=\"sig-name descname\"><span class=\"pre\">template</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Func.template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut, i form av en formatsträng, som beskriver den SQL som genereras för denna funktion. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(function)s(%(expressions)s)'</span></code>.</p>\n<p>Om du konstruerar SQL som <code class=\"docutils literal notranslate\"><span class=\"pre\">strftime('%W',</span> <span class=\"pre\">'date')</span></code> och behöver ett bokstavligt <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code>-tecken i frågan, fyrdubblar du det (<code class=\"docutils literal notranslate\"><span class=\"pre\">%%%%</span></code>) i attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code> eftersom strängen interpoleras två gånger: en gång under mallinterpolationen i <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code> och en gång i SQL-interpolationen med frågeparametrarna i databasmarkören.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Func.arg_joiner\">\n<span class=\"sig-name descname\"><span class=\"pre\">arg_joiner</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Func.arg_joiner\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut som anger det tecken som används för att sammanfoga listan med <code class=\"docutils literal notranslate\"><span class=\"pre\">uttryck</span></code>. Standardvärden är <code class=\"docutils literal notranslate\"><span class=\"pre\">',</span> <span class=\"pre\">'</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Func.arity\">\n<span class=\"sig-name descname\"><span class=\"pre\">arity</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Func.arity\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut som anger antalet argument som funktionen accepterar. Om detta attribut är inställt och funktionen anropas med ett annat antal uttryck, kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code> att uppstå. Standardvärde är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Func.as_sql\">\n<span class=\"sig-name descname\"><span class=\"pre\">as_sql</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">compiler</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">function</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">arg_joiner</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra_context</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Func.as_sql\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Genererar SQL-fragmentet för databasfunktionen. Returnerar en tupel <code class=\"docutils literal notranslate\"><span class=\"pre\">(sql,</span> <span class=\"pre\">params)</span></code>, där <code class=\"docutils literal notranslate\"><span class=\"pre\">sql</span></code> är SQL-strängen och <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> är listan eller tupeln med frågeparametrar.</p>\n<p>Metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">as_vendor()</span></code> bör använda parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">function</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">arg_joiner</span></code> och alla andra <code class=\"docutils literal notranslate\"><span class=\"pre\">**extra_context</span></code> för att anpassa SQL efter behov. Ett exempel:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">django/db/modeller/functions.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ConcatPair</span><span class=\"p\">(</span><span class=\"n\">Func</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;CONCAT&quot;</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_mysql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">extra_context</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">as_sql</span><span class=\"p\">(</span>\n            <span class=\"n\">compiler</span><span class=\"p\">,</span>\n            <span class=\"n\">connection</span><span class=\"p\">,</span>\n            <span class=\"n\">function</span><span class=\"o\">=</span><span class=\"s2\">&quot;CONCAT_WS&quot;</span><span class=\"p\">,</span>\n            <span class=\"n\">template</span><span class=\"o\">=</span><span class=\"s2\">&quot;</span><span class=\"si\">%(function)s</span><span class=\"s2\">(&#39;&#39;, </span><span class=\"si\">%(expressions)s</span><span class=\"s2\">)&quot;</span><span class=\"p\">,</span>\n            <span class=\"o\">**</span><span class=\"n\">extra_context</span>\n        <span class=\"p\">)</span>\n</code></pre></figure>\n<p>För att undvika en SQL-injektionssårbarhet får <code class=\"docutils literal notranslate\"><span class=\"pre\">extra_context</span></code> <a class=\"reference internal\" href=\"#avoiding-sql-injection-in-query-expressions\"><span class=\"std std-ref\">inte innehålla otillförlitlig användarinmatning</span></a> eftersom dessa värden interpoleras in i SQL-strängen i stället för att skickas som frågeparametrar, där databasdrivrutinen skulle undkomma dem.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">*expressions</span></code> är en lista med positionella uttryck som funktionen ska tillämpas på. Uttrycken konverteras till strängar, sammanfogas med <code class=\"docutils literal notranslate\"><span class=\"pre\">arg_joiner</span></code> och interpoleras sedan in i <code class=\"docutils literal notranslate\"><span class=\"pre\">mallen</span></code> som platshållaren <code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code>.</p>\n<p>Positionella argument kan vara uttryck eller Python-värden. Strängar antas vara kolumnreferenser och kommer att packas in i <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> uttryck medan andra värden kommer att packas in i <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code> uttryck.</p>\n<p>De <code class=\"docutils literal notranslate\"><span class=\"pre\">**extra</span></code> kwargs är <code class=\"docutils literal notranslate\"><span class=\"pre\">key=value</span></code> par som kan interpoleras in i <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code> attributet. För att undvika en SQL-injektionssårbarhet, <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> <a class=\"reference internal\" href=\"#avoiding-sql-injection-in-query-expressions\"><span class=\"std std-ref\">får inte innehålla otillförlitlig användarinmatning</span></a> eftersom dessa värden interpoleras in i SQL-strängen i stället för att skickas som frågeparametrar, där databasdrivrutinen skulle undkomma dem.</p>\n<p>Nyckelorden <code class=\"docutils literal notranslate\"><span class=\"pre\">function</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">arg_joiner</span></code> kan användas för att ersätta attribut med samma namn utan att behöva definiera en egen klass. <a class=\"reference internal\" href=\"#output-field\"><span class=\"std std-ref\">output_field</span></a> kan användas för att definiera den förväntade returtypen.</p>\n<aside class=\"admonition-sanitize-input-used-to-configure-a-query-expression admonition\">\n<p class=\"admonition-title\">Sanitize input used to configure a query expression</p>\n<p>Built-in database functions (such as\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/database-functions/#django.db.models.functions.Cast\" title=\"django.db.models.functions.Cast\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Cast</span></code></a>) vary in whether arguments such\nas <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> can be supplied as positional arguments or only by\nkeyword. For <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> and several other cases, the input ultimately\nreaches <code class=\"docutils literal notranslate\"><span class=\"pre\">Func()</span></code> as a keyword argument, so the advice to avoid\nconstructing keyword arguments from untrusted user input applies as equally\nto these arguments as it does to <code class=\"docutils literal notranslate\"><span class=\"pre\">**extra</span></code>.</p>\n</aside>\n</section>\n<section id=\"aggregate-expressions\">\n<h3>uttryck för <code class=\"docutils literal notranslate\"><span class=\"pre\">Aggregate()</span></code><a class=\"heading-anchor\" href=\"#aggregate-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ett aggregatuttryck är ett specialfall av ett <a class=\"reference internal\" href=\"#func-expressions\"><span class=\"std std-ref\">Func()-uttryck</span></a> som informerar frågan om att en <code class=\"docutils literal notranslate\"><span class=\"pre\">GROUP</span> <span class=\"pre\">BY</span></code>-klausul krävs. Alla <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#aggregation-functions\"><span class=\"std std-ref\">aggregate-funktioner</span></a>, som <code class=\"docutils literal notranslate\"><span class=\"pre\">Sum()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">Count()</span></code>, ärver från <code class=\"docutils literal notranslate\"><span class=\"pre\">Aggregate()</span></code>.</p>\n<p>Eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">Aggregate</span></code> är uttryck och omslagsuttryck kan du representera vissa komplexa beräkningar:</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\">Count</span>\n\n<span class=\"n\">Company</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=\"n\">managers_required</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"mi\">4</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_managers&quot;</span><span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>API:et för <code class=\"docutils literal notranslate\"><span class=\"pre\">Aggregate</span></code> är som följer:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate\">\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\">Aggregate</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">expressions</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">distinct</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">filter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order_by</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate.template\">\n<span class=\"sig-name descname\"><span class=\"pre\">template</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate.template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut, i form av en formatsträng, som beskriver den SQL som genereras för detta aggregat. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">'%(function)s(%(distinct)s%(expressions)s)'</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate.function\">\n<span class=\"sig-name descname\"><span class=\"pre\">function</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate.function\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut som beskriver den aggregerade funktion som ska genereras. Specifikt kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">funktionen</span></code> att interpoleras som <code class=\"docutils literal notranslate\"><span class=\"pre\">funktion</span></code> platshållare inom <a class=\"reference internal\" href=\"#django.db.models.Aggregate.template\" title=\"django.db.models.Aggregate.template\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">template</span></code></a>. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate.window_compatible\">\n<span class=\"sig-name descname\"><span class=\"pre\">window_compatible</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate.window_compatible\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> eftersom de flesta aggregerade funktioner kan användas som källuttryck i <a class=\"reference internal\" href=\"#django.db.models.expressions.Window\" title=\"django.db.models.expressions.Window\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Window</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate.allow_distinct\">\n<span class=\"sig-name descname\"><span class=\"pre\">allow_distinct</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate.allow_distinct\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett klassattribut som avgör om denna aggregatfunktion tillåter att ett argument med nyckelordet <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct</span></code> skickas eller inte. Om det är satt till <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> (standard), kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code> att uppstå om <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct=True</span></code> skickas.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate.allow_order_by\">\n<span class=\"sig-name descname\"><span class=\"pre\">allow_order_by</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate.allow_order_by\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"6.0\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<p>A class attribute determining whether or not this aggregate function\nallows passing a <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> keyword argument. If set to <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>\n(default), <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError</span></code> is raised if <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> is passed as a value\nother than <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Aggregate.empty_result_set_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">empty_result_set_value</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Aggregate.empty_result_set_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> eftersom de flesta aggregeringsfunktioner resulterar i <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> när de tillämpas på en tom resultatmängd.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>De positionella argumenten <code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code> kan innehålla uttryck, transformationer av modellfältet eller namn på modellfält. De konverteras till en sträng och används som platshållare för <code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct</span></code> avgör om aggregatfunktionen ska anropas för varje distinkt värde i <code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code> (eller uppsättning värden, för flera <code class=\"docutils literal notranslate\"><span class=\"pre\">expressions</span></code>). Argumentet stöds endast av aggregat som har <a class=\"reference internal\" href=\"#django.db.models.Aggregate.allow_distinct\" title=\"django.db.models.Aggregate.allow_distinct\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">allow_distinct</span></code></a> satt till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> argument takes a <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#q-objects\"><span class=\"std std-ref\">Q object</span></a> that’s\nused to filter the rows that are aggregated. See <a class=\"reference internal\" href=\"/sv/6.1/ref/models/conditional-expressions/#conditional-aggregation\"><span class=\"std std-ref\">Villkorlig aggregering</span></a>\nand <a class=\"reference internal\" href=\"/sv/6.1/topics/db/aggregation/#filtering-on-annotations\"><span class=\"std std-ref\">Filtrering av anteckningar</span></a> for example usage.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> argument behaves similarly to the <code class=\"docutils literal notranslate\"><span class=\"pre\">field_names</span></code> input of the\n<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> function, accepting a field name (with an optional\n<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;-&quot;</span></code> prefix which indicates descending order) or an expression (or a tuple\nor list of strings and/or expressions) that specifies the ordering of the\nelements in the result.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> tar ett värde som kommer att skickas tillsammans med aggregatet till <a class=\"reference internal\" href=\"/sv/6.1/ref/models/database-functions/#django.db.models.functions.Coalesce\" title=\"django.db.models.functions.Coalesce\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Coalesce</span></code></a>. Detta är användbart för att ange ett annat värde som ska returneras än <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> när frågeuppsättningen (eller grupperingen) inte innehåller några poster.</p>\n<p>De <code class=\"docutils literal notranslate\"><span class=\"pre\">**extra</span></code> kwargs är <code class=\"docutils literal notranslate\"><span class=\"pre\">nyckel=värde</span></code>-par som kan interpoleras in i <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code>-attributet.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> argument was added.</p>\n</aside>\n</section>\n<section id=\"creating-your-own-aggregate-functions\">\n<h3>Skapa dina egna aggregerade funktioner<a class=\"heading-anchor\" href=\"#creating-your-own-aggregate-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan också skapa dina egna aggregerade funktioner. Som ett minimum måste du definiera <code class=\"docutils literal notranslate\"><span class=\"pre\">function</span></code>, men du kan också helt anpassa den SQL som genereras. Här är ett kort 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\">Aggregate</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Sum</span><span class=\"p\">(</span><span class=\"n\">Aggregate</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Supports SUM(ALL field).</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;SUM&quot;</span>\n    <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(function)s</span><span class=\"s2\">(</span><span class=\"si\">%(all_values)s%(expressions)s</span><span class=\"s2\">)&quot;</span>\n    <span class=\"n\">allow_distinct</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">arity</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">expression</span><span class=\"p\">,</span> <span class=\"n\">all_values</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">extra</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">expression</span><span class=\"p\">,</span> <span class=\"n\">all_values</span><span class=\"o\">=</span><span class=\"s2\">&quot;ALL &quot;</span> <span class=\"k\">if</span> <span class=\"n\">all_values</span> <span class=\"k\">else</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">extra</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"value-expressions\">\n<h3>uttryck för <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code><a class=\"heading-anchor\" href=\"#value-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Value\">\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\">Value</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code>-objekt representerar den minsta möjliga komponenten i ett uttryck: ett enkelt värde. När du behöver representera värdet av ett heltal, en boolean eller en sträng i ett uttryck, kan du packa in värdet i ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code>.</p>\n<p>Du kommer sällan att behöva använda <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code> direkt. När du skriver uttrycket <code class=\"docutils literal notranslate\"><span class=\"pre\">F('field')</span> <span class=\"pre\">+</span> <span class=\"pre\">1</span></code> omsluter Django implicit <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> i en <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code>, vilket gör att enkla värden kan användas i mer komplexa uttryck. Du kommer att behöva använda <code class=\"docutils literal notranslate\"><span class=\"pre\">Value()</span></code> när du vill skicka en sträng till ett uttryck. De flesta uttryck tolkar ett strängargument som namnet på ett fält, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">Lower('name')</span></code>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> beskriver det värde som ska ingå i uttrycket, t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. Django vet hur man konverterar dessa Python-värden till deras motsvarande databastyp.</p>\n<p>If no <a class=\"reference internal\" href=\"#output-field\"><span class=\"std std-ref\">output_field</span></a> is specified, it will be inferred from\nthe type of the provided <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> for many common types. For example, passing\nan instance of <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code></a> as <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> defaults\n<code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> to <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a>.</p>\n</section>\n<section id=\"expressionwrapper-expressions\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ExpressionWrapper()</span></code> uttryck<a class=\"heading-anchor\" href=\"#expressionwrapper-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.ExpressionWrapper\">\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\">ExpressionWrapper</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.ExpressionWrapper\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ExpressionWrapper</span></code> omger ett annat uttryck och ger tillgång till egenskaper, t.ex. <a class=\"reference internal\" href=\"#output-field\"><span class=\"std std-ref\">output_field</span></a>, som kanske inte är tillgängliga för andra uttryck. <code class=\"docutils literal notranslate\"><span class=\"pre\">ExpressionWrapper</span></code> är nödvändig när man använder aritmetik på <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code>-uttryck med olika typer enligt beskrivningen i <a class=\"reference internal\" href=\"#using-f-with-annotations\"><span class=\"std std-ref\">Använda F() med annotationer</span></a>.</p>\n<aside class=\"admonition-database-casting-not-performed admonition\">\n<p class=\"admonition-title\">Database casting not performed</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ExpressionWrapper</span></code> only sets the output field for the ORM and does not\nperform any database-level casting. To ensure a specific type is returned\nfrom the database, use <a class=\"reference internal\" href=\"/sv/6.1/ref/models/database-functions/#django.db.models.functions.Cast\" title=\"django.db.models.functions.Cast\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Cast</span></code></a> instead.</p>\n</aside>\n</section>\n<section id=\"jsonnull-expression\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">JSONNull()</span></code> expression<a class=\"heading-anchor\" href=\"#jsonnull-expression\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"6.1\">\n<p class=\"version-note-title\">New in Django 6.1</p></aside>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.JSONNull\">\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\">JSONNull</span></span><a class=\"heading-anchor\" href=\"#django.db.models.JSONNull\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Specialized expression to represent JSON scalar <code class=\"docutils literal notranslate\"><span class=\"pre\">null</span></code> on a\n<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>.</p>\n<p>See <a class=\"reference internal\" href=\"/sv/6.1/topics/db/queries/#storing-and-querying-for-none\"><span class=\"std std-ref\">Lagring av och frågor om None</span></a> for usage examples.</p>\n</section>\n<section id=\"conditional-expressions\">\n<h3>Villkorliga uttryck<a class=\"heading-anchor\" href=\"#conditional-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Conditional expressions allow you to use <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#if\" title=\"(in Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(in Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> …\n<a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(in Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> logic in queries. Django natively supports SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">CASE</span></code>\nexpressions. For more details see <a class=\"reference internal\" href=\"/sv/6.1/ref/models/conditional-expressions/\"><span class=\"doc\">Villkorliga uttryck</span></a>.</p>\n</section>\n<section id=\"subquery-expressions\">\n<h3>uttryck för <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery()</span></code><a class=\"heading-anchor\" href=\"#subquery-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Subquery\">\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\">Subquery</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Subquery\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Du kan lägga till en explicit underfråga till en <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> med hjälp av uttrycket <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>.</p>\n<p>Till exempel: för att kommentera varje inlägg med e-postadressen till författaren till den nyaste kommentaren till det inlägget:</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>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">newest</span> <span class=\"o\">=</span> <span class=\"n\">Comment</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\">post</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-created_at&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">newest_commenter_email</span><span class=\"o\">=</span><span class=\"n\">Subquery</span><span class=\"p\">(</span><span class=\"n\">newest</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">1</span><span class=\"p\">]))</span>\n</code></pre></div>\n<p>På PostgreSQL ser SQL ut som:</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=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"p\">(</span>\n<span class=\"w\">    </span><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"n\">U0</span><span class=\"p\">.</span><span class=\"ss\">&quot;email&quot;</span>\n<span class=\"w\">    </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"ss\">&quot;comment&quot;</span><span class=\"w\"> </span><span class=\"n\">U0</span>\n<span class=\"w\">    </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">U0</span><span class=\"p\">.</span><span class=\"ss\">&quot;post_id&quot;</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"k\">ORDER</span><span class=\"w\"> </span><span class=\"k\">BY</span><span class=\"w\"> </span><span class=\"n\">U0</span><span class=\"p\">.</span><span class=\"ss\">&quot;created_at&quot;</span><span class=\"w\"> </span><span class=\"k\">DESC</span><span class=\"w\"> </span><span class=\"k\">LIMIT</span><span class=\"w\"> </span><span class=\"mi\">1</span>\n<span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">AS</span><span class=\"w\"> </span><span class=\"ss\">&quot;newest_commenter_email&quot;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"ss\">&quot;post&quot;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Exemplen i detta avsnitt är utformade för att visa hur man tvingar Django att utföra en underfråga. I vissa fall kan det vara möjligt att skriva ett likvärdigt queryset som utför samma uppgift tydligare eller effektivare.</p>\n</aside>\n<section id=\"referencing-columns-from-the-outer-queryset\">\n<h4>Hänvisning till kolumner från den yttre queryset<a class=\"heading-anchor\" href=\"#referencing-columns-from-the-outer-queryset\"><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.OuterRef\">\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\">OuterRef</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.OuterRef\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Använd <code class=\"docutils literal notranslate\"><span class=\"pre\">OuterRef</span></code> när en queryset i en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code> behöver referera till ett fält från den yttre queryn eller dess transform. Det fungerar som ett <a class=\"reference internal\" href=\"#django.db.models.F\" title=\"django.db.models.F\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">F</span></code></a>-uttryck förutom att kontrollen för att se om det hänvisar till ett giltigt fält inte görs förrän den yttre frågeuppsättningen har lösts upp.</p>\n<p>Instanser av <code class=\"docutils literal notranslate\"><span class=\"pre\">OuterRef</span></code> kan användas tillsammans med nästlade instanser av <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code> för att hänvisa till en innehållande frågeuppsättning som inte är den omedelbara föräldern. Till exempel: skulle denna frågeuppsättning behöva vara inom ett nästlat par av <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>-instanser för att lösas korrekt:</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\">Book</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\">author</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">)))</span>\n</code></pre></div>\n</section>\n<section id=\"limiting-a-subquery-to-a-single-column\">\n<h4>Begränsa en underfrågeställning till en enda kolumn<a class=\"heading-anchor\" href=\"#limiting-a-subquery-to-a-single-column\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Det finns tillfällen då en enda kolumn måste returneras från en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>, t.ex. för att använda en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code> som mål för en <code class=\"docutils literal notranslate\"><span class=\"pre\">__in</span></code>-uppslagning. För att returnera alla kommentarer för inlägg som publicerats under den senaste dagen:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">one_day_ago</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</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\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">posts</span> <span class=\"o\">=</span> <span class=\"n\">Post</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\">published_at__gte</span><span class=\"o\">=</span><span class=\"n\">one_day_ago</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Comment</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\">post__in</span><span class=\"o\">=</span><span class=\"n\">Subquery</span><span class=\"p\">(</span><span class=\"n\">posts</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">)))</span>\n</code></pre></div>\n<p>I det här fallet måste underfrågan använda <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> för att bara returnera en enda kolumn: inläggets primärnyckel.</p>\n</section>\n<section id=\"limiting-the-subquery-to-a-single-row\">\n<h4>Begränsa underfrågeställningen till en enda rad<a class=\"heading-anchor\" href=\"#limiting-the-subquery-to-a-single-row\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För att förhindra att en underfråga returnerar flera rader används en del (<code class=\"docutils literal notranslate\"><span class=\"pre\">[:1]</span></code>) av frågeuppsättningen:</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\">subquery</span> <span class=\"o\">=</span> <span class=\"n\">Subquery</span><span class=\"p\">(</span><span class=\"n\">newest</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">newest_commenter_email</span><span class=\"o\">=</span><span class=\"n\">subquery</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>I det här fallet får subquery bara returnera en enda kolumn <em>och</em> en enda rad: e-postadressen till den senast skapade kommentaren.</p>\n<p>(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> istället för en slice skulle misslyckas eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">OuterRef</span></code> inte kan lösas förrän queryset används inom en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>)</p>\n</section>\n<section id=\"exists-subqueries\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">Existerar()</span></code> underfrågor<a class=\"heading-anchor\" href=\"#exists-subqueries\"><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.Exists\">\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\">Exists</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">queryset</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Exists\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Exists</span></code> är en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>-underklass som använder en SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">EXISTS</span></code>-sats. I många fall kommer den att fungera bättre än en subquery eftersom databasen kan stoppa utvärderingen av subquery när en första matchande rad hittas.</p>\n<p>Till exempel: för att markera varje inlägg med om det har en kommentar från den senaste dagen eller inte:</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\">Exists</span><span class=\"p\">,</span> <span class=\"n\">OuterRef</span>\n<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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">one_day_ago</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</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\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">recent_comments</span> <span class=\"o\">=</span> <span class=\"n\">Comment</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\">post</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">created_at__gte</span><span class=\"o\">=</span><span class=\"n\">one_day_ago</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\">Post</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">recent_comment</span><span class=\"o\">=</span><span class=\"n\">Exists</span><span class=\"p\">(</span><span class=\"n\">recent_comments</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>På PostgreSQL ser SQL ut som:</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=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;published_at&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">EXISTS</span><span class=\"p\">(</span>\n<span class=\"w\">    </span><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"ss\">&quot;a&quot;</span>\n<span class=\"w\">    </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"ss\">&quot;comment&quot;</span><span class=\"w\"> </span><span class=\"n\">U0</span>\n<span class=\"w\">    </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"p\">(</span>\n<span class=\"w\">        </span><span class=\"n\">U0</span><span class=\"p\">.</span><span class=\"ss\">&quot;created_at&quot;</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"n\">YYYY</span><span class=\"o\">-</span><span class=\"n\">MM</span><span class=\"o\">-</span><span class=\"n\">DD</span><span class=\"w\"> </span><span class=\"n\">HH</span><span class=\"p\">:</span><span class=\"n\">MM</span><span class=\"p\">:</span><span class=\"n\">SS</span><span class=\"w\"> </span><span class=\"k\">AND</span>\n<span class=\"w\">        </span><span class=\"n\">U0</span><span class=\"p\">.</span><span class=\"ss\">&quot;post_id&quot;</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span>\n<span class=\"w\">    </span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"k\">LIMIT</span><span class=\"w\"> </span><span class=\"mi\">1</span>\n<span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">AS</span><span class=\"w\"> </span><span class=\"ss\">&quot;recent_comment&quot;</span><span class=\"w\"> </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"ss\">&quot;post&quot;</span>\n</code></pre></div>\n<p>Det är onödigt att tvinga <code class=\"docutils literal notranslate\"><span class=\"pre\">Exists</span></code> att hänvisa till en enda kolumn, eftersom kolumnerna kasseras och ett booleskt resultat returneras. På samma sätt, eftersom ordning är oviktigt inom en SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">EXISTS</span></code> subquery och bara skulle försämra prestanda, tas det automatiskt bort.</p>\n<p>Du kan ställa frågor med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">NOT</span> <span class=\"pre\">EXISTS</span></code> med <code class=\"docutils literal notranslate\"><span class=\"pre\">~Exists()</span></code>.</p>\n</section>\n<section id=\"filtering-on-a-subquery-or-exists-expressions\">\n<h4>Filtrering på ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery()</span></code>- eller <code class=\"docutils literal notranslate\"><span class=\"pre\">Exists()</span></code>-uttryck<a class=\"heading-anchor\" href=\"#filtering-on-a-subquery-or-exists-expressions\"><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\">Subquery()</span></code> som returnerar ett booleskt värde och <code class=\"docutils literal notranslate\"><span class=\"pre\">Exists()</span></code> kan användas som ett <code class=\"docutils literal notranslate\"><span class=\"pre\">villkor</span></code> i <a class=\"reference internal\" href=\"/sv/6.1/ref/models/conditional-expressions/#django.db.models.expressions.When\" title=\"django.db.models.expressions.When\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">When</span></code></a>-uttryck, eller för att direkt filtrera en frågeuppsättning:</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\">recent_comments</span> <span class=\"o\">=</span> <span class=\"n\">Comment</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=\"c1\"># From above</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">Exists</span><span class=\"p\">(</span><span class=\"n\">recent_comments</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Detta säkerställer att subquery inte läggs till i <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code>-kolumnerna, vilket kan leda till bättre prestanda.</p>\n</section>\n<section id=\"using-aggregates-within-a-subquery-expression\">\n<h4>Använda aggregat inom ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>-uttryck<a class=\"heading-anchor\" href=\"#using-aggregates-within-a-subquery-expression\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Aggregat kan användas i en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>, men de kräver en specifik kombination av <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.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.annotate\" title=\"django.db.models.query.QuerySet.annotate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">annotate()</span></code></a> för att grupperingen av subquery ska bli korrekt.</p>\n<p>Förutsatt att båda modellerna har ett <code class=\"docutils literal notranslate\"><span class=\"pre\">längd</span></code>-fält, för att hitta inlägg där inläggslängden är större än den totala längden på alla kombinerade kommentarer:</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\">comments</span> <span class=\"o\">=</span> <span class=\"n\">Comment</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\">post</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;post&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">total_comments</span> <span class=\"o\">=</span> <span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">total</span><span class=\"o\">=</span><span class=\"n\">Sum</span><span class=\"p\">(</span><span class=\"s2\">&quot;length&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;total&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Post</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\">length__gt</span><span class=\"o\">=</span><span class=\"n\">Subquery</span><span class=\"p\">(</span><span class=\"n\">total_comments</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Den inledande <code class=\"docutils literal notranslate\"><span class=\"pre\">filter(...)</span></code> begränsar underfrågan till de relevanta parametrarna. <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> tar bort standard <a class=\"reference internal\" href=\"/sv/6.1/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">ordering</span></code></a> (om någon) på <code class=\"docutils literal notranslate\"><span class=\"pre\">Comment</span></code>-modellen. <code class=\"docutils literal notranslate\"><span class=\"pre\">values('post')</span></code> aggregerar kommentarer efter <code class=\"docutils literal notranslate\"><span class=\"pre\">Post</span></code>. Slutligen utför <code class=\"docutils literal notranslate\"><span class=\"pre\">annotate(...)</span></code> aggregeringen. Den ordning i vilken dessa queryset-metoder tillämpas är viktig. I det här fallet, eftersom underfrågan måste begränsas till en enda kolumn, krävs <code class=\"docutils literal notranslate\"><span class=\"pre\">values('total')</span></code>.</p>\n<p>Detta är det enda sättet att utföra en aggregering inom en <code class=\"docutils literal notranslate\"><span class=\"pre\">Subquery</span></code>, eftersom användning av <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.aggregate\" title=\"django.db.models.query.QuerySet.aggregate\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">aggregate()</span></code></a> försöker utvärdera queryset (och om det finns en <code class=\"docutils literal notranslate\"><span class=\"pre\">OuterRef</span></code> kommer detta inte att vara möjligt att lösa).</p>\n</section>\n</section>\n<section id=\"raw-sql-expressions\">\n<h3>Råa SQL-uttryck<a class=\"heading-anchor\" href=\"#raw-sql-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.RawSQL\">\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\">RawSQL</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">sql</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">params</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.RawSQL\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Ibland kan databasuttryck inte enkelt uttrycka en komplex <code class=\"docutils literal notranslate\"><span class=\"pre\">WHERE</span></code> klausul. I dessa kantfall använder du <code class=\"docutils literal notranslate\"><span class=\"pre\">RawSQL</span></code> -uttrycket. 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.expressions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">RawSQL</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">val</span><span class=\"o\">=</span><span class=\"n\">RawSQL</span><span class=\"p\">(</span><span class=\"s2\">&quot;select col from sometable where othercol = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">param</span><span class=\"p\">,)))</span>\n</code></pre></div>\n<p>Dessa extra uppslagningar kanske inte är portabla till olika databasmotorer (eftersom du uttryckligen skriver SQL-kod) och bryter mot DRY-principen, så du bör undvika dem om möjligt.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">RawSQL</span></code>-uttryck kan också användas som mål för <code class=\"docutils literal notranslate\"><span class=\"pre\">__in</span></code>-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\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">id__in</span><span class=\"o\">=</span><span class=\"n\">RawSQL</span><span class=\"p\">(</span><span class=\"s2\">&quot;select id from sometable where col = </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">param</span><span class=\"p\">,)))</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>För att skydda mot <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/SQL_injection\">SQL injection attacks</a>, måste du undkomma alla parametrar som användaren kan kontrollera genom att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">params</span></code> är ett obligatoriskt argument för att tvinga dig att erkänna att du inte interpolerar din SQL med användartillhandahållna data.</p>\n<p>Du får inte heller använda citattecken för platshållare i SQL-strängen. Det här exemplet är sårbart för SQL-injektion på grund av citaten runt <code class=\"docutils literal notranslate\"><span class=\"pre\">%s</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\">RawSQL</span><span class=\"p\">(</span><span class=\"s2\">&quot;select col from sometable where othercol = &#39;</span><span class=\"si\">%s</span><span class=\"s2\">&#39;&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># unsafe!</span>\n</code></pre></div>\n<p>Du kan läsa mer om hur Djangos <a class=\"reference internal\" href=\"/sv/6.1/topics/security/#sql-injection-protection\"><span class=\"std std-ref\">SQL injection protection</span></a> fungerar.</p>\n</aside>\n</section>\n<section id=\"window-functions\">\n<h3>Fönsterfunktioner<a class=\"heading-anchor\" href=\"#window-functions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Fönsterfunktioner är ett sätt att tillämpa funktioner på partitioner. Till skillnad från en vanlig aggregeringsfunktion som beräknar ett slutresultat för varje uppsättning som definieras av group by, arbetar fönsterfunktioner med <a class=\"reference internal\" href=\"#window-frames\"><span class=\"std std-ref\">ramar</span></a> och partitioner och beräknar resultatet för varje rad.</p>\n<p>Du kan ange flera fönster i samma fråga, vilket i Django ORM skulle motsvara att inkludera flera uttryck i ett <a class=\"reference internal\" href=\"/sv/6.1/topics/db/aggregation/\"><span class=\"doc\">QuerySet.annotate()</span></a>-anrop. ORM använder sig inte av namngivna fönster, utan de är en del av de valda kolumnerna.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.Window\">\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\">Window</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">partition_by</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">order_by</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">frame</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">output_field</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.Window\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.Window.template\">\n<span class=\"sig-name descname\"><span class=\"pre\">template</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.Window.template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">%(expression)s</span> <span class=\"pre\">OVER</span> <span class=\"pre\">(%(window)s)</span></code>. Om endast argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">expression</span></code> anges, kommer window-satsen att vara tom.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Window</span></code> är huvuduttrycket för en <code class=\"docutils literal notranslate\"><span class=\"pre\">OVER</span></code>-sats.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">expression</span></code> är antingen en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/database-functions/#window-functions\"><span class=\"std std-ref\">window function</span></a>, en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#aggregation-functions\"><span class=\"std std-ref\">aggregate function</span></a>, eller ett uttryck som är kompatibelt i en window clause.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">partition_by</span></code> argument accepts an expression or a sequence of\nexpressions (column names should be wrapped in an <code class=\"docutils literal notranslate\"><span class=\"pre\">F</span></code>-object) that control\nthe partitioning of the rows. Partitioning narrows which rows are used to\ncompute the result set.</p>\n<p><a class=\"reference internal\" href=\"#output-field\"><span class=\"std std-ref\">output_field</span></a> anges antingen som ett argument eller genom ett uttryck.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> accepterar ett uttryck som du kan anropa <a class=\"reference internal\" href=\"#django.db.models.Expression.asc\" title=\"django.db.models.Expression.asc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">asc()</span></code></a> och <a class=\"reference internal\" href=\"#django.db.models.Expression.desc\" title=\"django.db.models.Expression.desc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">desc()</span></code></a>, en sträng med ett fältnamn (med ett valfritt prefix <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;-&quot;</span></code> som anger fallande ordning), eller en tupel eller lista med strängar och/eller uttryck. Ordningsföljden styr i vilken ordning uttrycket tillämpas. Om du t.ex. summerar över raderna i en partition är det första resultatet värdet på den första raden, det andra är summan av den första och den andra raden.</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">frame</span></code> parameter specifies which other rows should be used in the\ncomputation. See <a class=\"reference internal\" href=\"#window-frames\"><span class=\"std std-ref\">Ramar</span></a> for details.</p>\n<p>Till exempel: för att kommentera varje film med det genomsnittliga betyget för filmer från samma studio i samma genre och utgivningså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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">Window</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Movie</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\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">expression</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">partition_by</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        <span class=\"n\">order_by</span><span class=\"o\">=</span><span class=\"s2\">&quot;released__year&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</code></pre></div>\n<p>Detta gör att du kan kontrollera om en film har fått bättre eller sämre betyg än sina konkurrenter.</p>\n<p>Du kanske vill använda flera uttryck över samma fönster, dvs. samma partition och ram. Du kan t.ex. ändra det föregående exemplet så att det även inkluderar det bästa och sämsta betyget i varje filmgrupp (samma studio, genre och utgivningsår) genom att använda tre fönsterfunktioner i samma fråga. Partitionen och ordningen från föregående exempel extraheras till en ordbok för att minska upprepning:</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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">Max</span><span class=\"p\">,</span> <span class=\"n\">Min</span><span class=\"p\">,</span> <span class=\"n\">Window</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">window</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;partition_by&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;order_by&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;released__year&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\">Movie</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\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">expression</span><span class=\"o\">=</span><span class=\"n\">Avg</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\">window</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">best</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">expression</span><span class=\"o\">=</span><span class=\"n\">Max</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\">window</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">worst</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">expression</span><span class=\"o\">=</span><span class=\"n\">Min</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\">window</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Filtrering mot fönsterfunktioner stöds så länge som uppslagningar inte är disjunktiva (inte använder <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">XOR</span></code> som en koppling) och mot en frågeuppsättning som utför aggregering.</p>\n<p>Exempelvis stöds inte en fråga som bygger på aggregering och som har ett filter med <code class=\"docutils literal notranslate\"><span class=\"pre\">OR</span></code> mot en fönsterfunktion och ett fält. Om kombinerade predikat tillämpas efter aggregering kan det leda till att rader som normalt inte ingår i grupper inkluderas:</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\">qs</span> <span class=\"o\">=</span> <span class=\"n\">Movie</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\">category_rank</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span><span class=\"n\">Rank</span><span class=\"p\">(),</span> <span class=\"n\">partition_by</span><span class=\"o\">=</span><span class=\"s2\">&quot;category&quot;</span><span class=\"p\">,</span> <span class=\"n\">order_by</span><span class=\"o\">=</span><span class=\"s2\">&quot;-rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">scenes_count</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;actors&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\">Q</span><span class=\"p\">(</span><span class=\"n\">category_rank__lte</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">title__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;Batman&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">qs</span><span class=\"p\">)</span>\n<span class=\"go\">NotImplementedError: Heterogeneous disjunctive predicates against window functions</span>\n<span class=\"go\">are not implemented when performing conditional aggregation.</span>\n</code></pre></div>\n<p>Bland Djangos inbyggda databasbackends stöder MySQL, PostgreSQL och Oracle fönsteruttryck. Stödet för olika funktioner i fönsteruttryck varierar mellan de olika databaserna. Till exempel: kanske alternativen i <a class=\"reference internal\" href=\"#django.db.models.Expression.asc\" title=\"django.db.models.Expression.asc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">asc()</span></code></a> och <a class=\"reference internal\" href=\"#django.db.models.Expression.desc\" title=\"django.db.models.Expression.desc\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">desc()</span></code></a> inte stöds. Konsultera dokumentationen för din databas vid behov.</p>\n<section id=\"frames\">\n<span id=\"window-frames\"></span><h4>Ramar<a class=\"heading-anchor\" href=\"#frames\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För en fönsterram kan du välja antingen en intervallbaserad sekvens av rader eller en vanlig sekvens av rader.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.ValueRange\">\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\">ValueRange</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">start</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">end</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclusion</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.ValueRange\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.ValueRange.frame_type\">\n<span class=\"sig-name descname\"><span class=\"pre\">frame_type</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.ValueRange.frame_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Detta attribut är inställt på <code class=\"docutils literal notranslate\"><span class=\"pre\">'RANGE'</span></code>.</p>\n</dd></dl>\n\n<p>PostgreSQL har begränsat stöd för <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueRange</span></code> och stöder endast användning av standardstart- och slutpunkter, såsom <code class=\"docutils literal notranslate\"><span class=\"pre\">CURRENT</span> <span class=\"pre\">ROW</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">UNBOUNDED</span> <span class=\"pre\">FOLLOWING</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.RowRange\">\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\">RowRange</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">start</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">end</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">exclusion</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.RowRange\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.RowRange.frame_type\">\n<span class=\"sig-name descname\"><span class=\"pre\">frame_type</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.RowRange.frame_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Detta attribut är inställt på <code class=\"docutils literal notranslate\"><span class=\"pre\">'ROWS'</span></code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Båda klasserna returnerar SQL med mallen:</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=\"o\">%</span><span class=\"p\">(</span><span class=\"n\">frame_type</span><span class=\"p\">)</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"k\">BETWEEN</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">start</span><span class=\"p\">)</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">end</span><span class=\"p\">)</span><span class=\"n\">s</span>\n</code></pre></div>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.WindowFrameExclusion\">\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\">WindowFrameExclusion</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.WindowFrameExclusion\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.WindowFrameExclusion.CURRENT_ROW\">\n<span class=\"sig-name descname\"><span class=\"pre\">CURRENT_ROW</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.WindowFrameExclusion.CURRENT_ROW\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.WindowFrameExclusion.GROUP\">\n<span class=\"sig-name descname\"><span class=\"pre\">GROUP</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.WindowFrameExclusion.GROUP\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.WindowFrameExclusion.TIES\">\n<span class=\"sig-name descname\"><span class=\"pre\">TIES</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.WindowFrameExclusion.TIES\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.WindowFrameExclusion.NO_OTHERS\">\n<span class=\"sig-name descname\"><span class=\"pre\">NO_OTHERS</span></span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.WindowFrameExclusion.NO_OTHERS\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n</dd></dl>\n\n<p>Med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">exclusion</span></code> kan du utesluta rader (<a class=\"reference internal\" href=\"#django.db.models.expressions.WindowFrameExclusion.CURRENT_ROW\" title=\"django.db.models.expressions.WindowFrameExclusion.CURRENT_ROW\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">CURRENT_ROW</span></code></a>), grupper (<a class=\"reference internal\" href=\"#django.db.models.expressions.WindowFrameExclusion.GROUP\" title=\"django.db.models.expressions.WindowFrameExclusion.GROUP\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">GROUP</span></code></a>) och band (<a class=\"reference internal\" href=\"#django.db.models.expressions.WindowFrameExclusion.TIES\" title=\"django.db.models.expressions.WindowFrameExclusion.TIES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TIES</span></code></a>) från fönsterramarna i databaser som stöds:</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=\"o\">%</span><span class=\"p\">(</span><span class=\"n\">frame_type</span><span class=\"p\">)</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"k\">BETWEEN</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">start</span><span class=\"p\">)</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">end</span><span class=\"p\">)</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"n\">EXCLUDE</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"p\">(</span><span class=\"n\">exclusion</span><span class=\"p\">)</span><span class=\"n\">s</span>\n</code></pre></div>\n<p>Ramar begränsar de rader som används för att beräkna resultatet. De flyttas från en viss startpunkt till en viss angiven slutpunkt. Ramar kan användas med eller utan partitioner, men det är ofta en bra idé att ange en ordning för fönstret för att säkerställa ett deterministiskt resultat. I en ram är en peer i en ram en rad med ett likvärdigt värde, eller alla rader om det inte finns någon ordningsbestämmelse.</p>\n<p>Standardstartpunkten för en ram är <code class=\"docutils literal notranslate\"><span class=\"pre\">UNBOUNDED</span> <span class=\"pre\">PRECEDING</span></code>, vilket är den första raden i partitionen. Slutpunkten inkluderas alltid explicit i den SQL som genereras av ORM och är som standard <code class=\"docutils literal notranslate\"><span class=\"pre\">UNBOUNDED</span> <span class=\"pre\">FOLLOWING</span></code>. Standardramen omfattar alla rader från partitionen till den sista raden i uppsättningen.</p>\n<p>De accepterade värdena för argumenten <code class=\"docutils literal notranslate\"><span class=\"pre\">start</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">end</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, ett heltal eller noll. Ett negativt heltal för <code class=\"docutils literal notranslate\"><span class=\"pre\">start</span></code> resulterar i <code class=\"docutils literal notranslate\"><span class=\"pre\">N</span> <span class=\"pre\">PRECEDING</span></code>, medan <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> ger <code class=\"docutils literal notranslate\"><span class=\"pre\">UNBOUNDED</span> <span class=\"pre\">PRECEDING</span></code>. I läget <code class=\"docutils literal notranslate\"><span class=\"pre\">ROWS</span></code> kan ett positivt heltal användas för <code class=\"docutils literal notranslate\"><span class=\"pre\">start</span></code>, vilket resulterar i <code class=\"docutils literal notranslate\"><span class=\"pre\">N</span> <span class=\"pre\">FOLLOWING</span></code>. Positiva heltal accepteras för <code class=\"docutils literal notranslate\"><span class=\"pre\">slut</span></code> och resulterar i <code class=\"docutils literal notranslate\"><span class=\"pre\">N</span> <span class=\"pre\">FOLLOWING</span></code>. I läget <code class=\"docutils literal notranslate\"><span class=\"pre\">ROWS</span></code> kan ett negativt heltal användas för <code class=\"docutils literal notranslate\"><span class=\"pre\">end</span></code> vilket resulterar i <code class=\"docutils literal notranslate\"><span class=\"pre\">N</span> <span class=\"pre\">PRECEDING</span></code>. För både <code class=\"docutils literal notranslate\"><span class=\"pre\">start</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">end</span></code> kommer noll att returnera <code class=\"docutils literal notranslate\"><span class=\"pre\">CURRENT</span> <span class=\"pre\">ROW</span></code>.</p>\n<p>Det finns en skillnad i vad <code class=\"docutils literal notranslate\"><span class=\"pre\">CURRENT</span> <span class=\"pre\">ROW</span></code> inkluderar. När det anges i läget <code class=\"docutils literal notranslate\"><span class=\"pre\">ROWS</span></code> börjar eller slutar ramen med den aktuella raden. När den anges i läget <code class=\"docutils literal notranslate\"><span class=\"pre\">RANGE</span></code> startar eller slutar ramen vid den första eller sista peer enligt orderklausulen. Således utvärderar <code class=\"docutils literal notranslate\"><span class=\"pre\">RANGE</span> <span class=\"pre\">CURRENT</span> <span class=\"pre\">ROW</span></code> uttrycket för rader som har samma värde som specificeras av ordningsföljden. Eftersom mallen innehåller både <code class=\"docutils literal notranslate\"><span class=\"pre\">start</span></code>- och <code class=\"docutils literal notranslate\"><span class=\"pre\">slut</span></code>-punkter kan detta uttryckas med:</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\">ValueRange</span><span class=\"p\">(</span><span class=\"n\">start</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om en films ”jämlikar” beskrivs som filmer som släppts av samma studio i samma genre under samma år, kommenterar detta <code class=\"docutils literal notranslate\"><span class=\"pre\">RowRange</span></code>-exempel varje film med det genomsnittliga betyget för filmens två föregående och två efterföljande jämlikar:</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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">RowRange</span><span class=\"p\">,</span> <span class=\"n\">Window</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Movie</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\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">expression</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">partition_by</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        <span class=\"n\">order_by</span><span class=\"o\">=</span><span class=\"s2\">&quot;released__year&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"n\">frame</span><span class=\"o\">=</span><span class=\"n\">RowRange</span><span class=\"p\">(</span><span class=\"n\">start</span><span class=\"o\">=-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om databasen har stöd för det kan du ange start- och slutpunkter baserat på värden för ett uttryck i partitionen. Om fältet <code class=\"docutils literal notranslate\"><span class=\"pre\">released</span></code> i modellen <code class=\"docutils literal notranslate\"><span class=\"pre\">Movie</span></code> lagrar utgivningsmånaden för varje film, anger detta exempel på <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueRange</span></code> för varje film det genomsnittliga betyget för andra filmer som släppts mellan tolv månader före och tolv månader efter varje film:</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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">ValueRange</span><span class=\"p\">,</span> <span class=\"n\">Window</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Movie</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\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Window</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">expression</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">partition_by</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        <span class=\"n\">order_by</span><span class=\"o\">=</span><span class=\"s2\">&quot;released__year&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        <span class=\"n\">frame</span><span class=\"o\">=</span><span class=\"n\">ValueRange</span><span class=\"p\">(</span><span class=\"n\">start</span><span class=\"o\">=-</span><span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"mi\">12</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"technical-information\">\n<h2>Teknisk information<a class=\"heading-anchor\" href=\"#technical-information\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nedan hittar du tekniska implementeringsdetaljer som kan vara användbara för biblioteksförfattare. Det tekniska API:et och exemplen nedan hjälper till att skapa generiska frågeuttryck som kan utöka den inbyggda funktionaliteten som Django tillhandahåller.</p>\n<section id=\"expression-api\">\n<h3>Uttryck API<a class=\"heading-anchor\" href=\"#expression-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Frågeuttryck implementerar <a class=\"reference internal\" href=\"/sv/6.1/ref/models/lookups/#query-expression\"><span class=\"std std-ref\">query expression API</span></a>, men exponerar också ett antal extra metoder och attribut som listas nedan. Alla frågeuttryck måste ärva från <code class=\"docutils literal notranslate\"><span class=\"pre\">Expression()</span></code> eller en relevant underklass.</p>\n<p>När ett frågeuttryck omsluter ett annat uttryck är det ansvarigt för att anropa lämpliga metoder för det omslutna uttrycket.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression\">\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\">Expression</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.allowed_default\">\n<span class=\"sig-name descname\"><span class=\"pre\">allowed_default</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.allowed_default\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck kan användas i <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.Field.db_default\" title=\"django.db.models.Field.db_default\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.db_default</span></code></a>. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.constraint_validation_compatible\">\n<span class=\"sig-name descname\"><span class=\"pre\">constraint_validation_compatible</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.constraint_validation_compatible\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck kan användas under en begränsningsvalidering. Uttryck med <code class=\"docutils literal notranslate\"><span class=\"pre\">constraint_validation_compatible</span></code> inställt på <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> får endast ha ett källuttryck. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.contains_aggregate\">\n<span class=\"sig-name descname\"><span class=\"pre\">contains_aggregate</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.contains_aggregate\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck innehåller ett aggregat och att en <code class=\"docutils literal notranslate\"><span class=\"pre\">GROUP</span> <span class=\"pre\">BY</span></code>-klausul måste läggas till i frågan.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.contains_over_clause\">\n<span class=\"sig-name descname\"><span class=\"pre\">contains_over_clause</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.contains_over_clause\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck innehåller ett <a class=\"reference internal\" href=\"#django.db.models.expressions.Window\" title=\"django.db.models.expressions.Window\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Window</span></code></a>-uttryck. Det används till exempel för att inte tillåta fönsterfunktionsuttryck i frågor som modifierar data.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.filterable\">\n<span class=\"sig-name descname\"><span class=\"pre\">filterable</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.filterable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck kan refereras till i <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\">QuerySet.filter()</span></code></a>. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.window_compatible\">\n<span class=\"sig-name descname\"><span class=\"pre\">window_compatible</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.window_compatible\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck kan användas som källuttryck i <a class=\"reference internal\" href=\"#django.db.models.expressions.Window\" title=\"django.db.models.expressions.Window\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Window</span></code></a>. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.empty_result_set_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">empty_result_set_value</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.empty_result_set_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tells Django which value should be returned when the expression is used\nto apply a function over an empty result set. Defaults to\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/constants.html#NotImplemented\" title=\"(in Python v3.14)\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">NotImplemented</span></code></a> which forces the expression to be computed on\nthe database.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.set_returning\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_returning</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.set_returning\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck innehåller en set-returneringsfunktion, vilket tvingar fram utvärdering av underfrågor. Det används t.ex. för att tillåta vissa Postgres set-returning-funktioner (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">JSONB_PATH_QUERY</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">UNNEST</span></code>, etc.) att hoppa över optimering och utvärderas korrekt när annotationer skapar rader själva. Standardvärde är <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.allows_composite_expressions\">\n<span class=\"sig-name descname\"><span class=\"pre\">allows_composite_expressions</span></span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.allows_composite_expressions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Talar om för Django att detta uttryck tillåter sammansatta uttryck, till exempel för att stödja <a class=\"reference internal\" href=\"/sv/6.1/topics/composite-primary-key/#cpk-and-database-functions\"><span class=\"std std-ref\">sammansatta primärnycklar</span></a>. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.resolve_expression\">\n<span class=\"sig-name descname\"><span class=\"pre\">resolve_expression</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">query</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">allow_joins</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">reuse</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">summarize</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">for_save</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.resolve_expression\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ger möjlighet att göra förbehandling eller validering av uttrycket innan det läggs till i frågan. <code class=\"docutils literal notranslate\"><span class=\"pre\">resolve_expression()</span></code> måste också anropas på alla nästlade uttryck. En <code class=\"docutils literal notranslate\"><span class=\"pre\">copy()</span></code> av <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> bör returneras med alla nödvändiga transformationer.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">query</span></code> är implementeringen av backend-frågan.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">allow_joins</span></code> är en boolean som tillåter eller förnekar användning av joins i frågan.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">reuse</span></code> är en uppsättning återanvändbara joins för scenarier med flera joins.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">summarize</span></code> är en boolean som, när den är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, signalerar att den fråga som beräknas är en terminal aggregerad fråga.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">for_save</span></code> är en boolean som, när den är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, signalerar att den fråga som körs utför en skapelse eller uppdatering.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.get_source_expressions\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_source_expressions</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.get_source_expressions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en ordnad lista med inre uttryck. 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\">Sum</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">get_source_expressions</span><span class=\"p\">()</span>\n<span class=\"go\">[F(&#39;foo&#39;)]</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.set_source_expressions\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_source_expressions</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expressions</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.set_source_expressions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tar emot en lista med uttryck och lagrar dem så att <code class=\"docutils literal notranslate\"><span class=\"pre\">get_source_expressions()</span></code> kan returnera dem.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.relabeled_clone\">\n<span class=\"sig-name descname\"><span class=\"pre\">relabeled_clone</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">change_map</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.relabeled_clone\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en klon (kopia) av <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code>, med eventuella kolumnaliaser ommärkta. Kolumnaliaser byter namn när underförfrågningar skapas. <code class=\"docutils literal notranslate\"><span class=\"pre\">relabeled_clone()</span></code> bör också anropas på alla nästlade uttryck och tilldelas klonen.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">change_map</span></code> är en ordlista som mappar gamla alias till nya alias.</p>\n<p>Exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">relabeled_clone</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">change_map</span><span class=\"p\">):</span>\n    <span class=\"n\">clone</span> <span class=\"o\">=</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n    <span class=\"n\">clone</span><span class=\"o\">.</span><span class=\"n\">expression</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expression</span><span class=\"o\">.</span><span class=\"n\">relabeled_clone</span><span class=\"p\">(</span><span class=\"n\">change_map</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">clone</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.convert_value\">\n<span class=\"sig-name descname\"><span class=\"pre\">convert_value</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">value</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expression</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">connection</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.convert_value\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En hook som gör det möjligt för uttrycket att tvinga <code class=\"docutils literal notranslate\"><span class=\"pre\">värde</span></code> till en mer lämplig typ.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">uttryck</span></code> är detsamma som <code class=\"docutils literal notranslate\"><span class=\"pre\">själv</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.get_group_by_cols\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_group_by_cols</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.get_group_by_cols\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Responsible for returning the list of columns referenced by\nthis expression. <code class=\"docutils literal notranslate\"><span class=\"pre\">get_group_by_cols()</span></code> should be called on any\nnested expressions. <code class=\"docutils literal notranslate\"><span class=\"pre\">F()</span></code> objects, in particular, hold a reference\nto a column.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.asc\">\n<span class=\"sig-name descname\"><span class=\"pre\">asc</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">nulls_first</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">nulls_last</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.asc\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar det uttryck som är klart att sorteras i stigande ordning.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_first</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_last</span></code> definierar hur null-värden sorteras. Se <a class=\"reference internal\" href=\"#using-f-to-sort-null-values\"><span class=\"std std-ref\">Använda F() för att sortera nollvärden</span></a> för exempel på användning.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.desc\">\n<span class=\"sig-name descname\"><span class=\"pre\">desc</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">nulls_first</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">nulls_last</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.desc\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar det uttryck som är klart att sorteras i fallande ordning.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_first</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">nulls_last</span></code> definierar hur null-värden sorteras. Se <a class=\"reference internal\" href=\"#using-f-to-sort-null-values\"><span class=\"std std-ref\">Använda F() för att sortera nollvärden</span></a> för exempel på användning.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.Expression.reverse_ordering\">\n<span class=\"sig-name descname\"><span class=\"pre\">reverse_ordering</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.Expression.reverse_ordering\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> with any modifications required to reverse the sort\norder within an <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span></code> call. As an example, an expression\nimplementing <code class=\"docutils literal notranslate\"><span class=\"pre\">NULLS</span> <span class=\"pre\">LAST</span></code> would change its value to be\n<code class=\"docutils literal notranslate\"><span class=\"pre\">NULLS</span> <span class=\"pre\">FIRST</span></code>. Modifications are only required for expressions that\nimplement sort order like <code class=\"docutils literal notranslate\"><span class=\"pre\">OrderBy</span></code>. This method is called when\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.reverse\" title=\"django.db.models.query.QuerySet.reverse\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">reverse()</span></code></a> is called on a\nqueryset.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"writing-your-own-query-expressions\">\n<span id=\"id7\"></span><h3>Skriva dina egna frågeuttryck<a class=\"heading-anchor\" href=\"#writing-your-own-query-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan skriva dina egna query expression-klasser som använder och kan integreras med andra query expressions. Låt oss gå igenom ett exempel genom att skriva en implementation av SQL-funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">COALESCE</span></code>, utan att använda de inbyggda <a class=\"reference internal\" href=\"#func-expressions\"><span class=\"std std-ref\">Func()-uttrycken</span></a>.</p>\n<p>SQL-funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">COALESCE</span></code> definieras som att den tar en lista med kolumner eller värden. Den returnerar den första kolumnen eller värdet som inte är <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code>.</p>\n<p>Vi börjar med att definiera den mall som ska användas för SQL-generering och en <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code>-metod för att ställa in några attribut:</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\">Expression</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Coalesce</span><span class=\"p\">(</span><span class=\"n\">Expression</span><span class=\"p\">):</span>\n    <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;COALESCE( </span><span class=\"si\">%(expressions)s</span><span class=\"s2\"> )&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">expressions</span><span class=\"p\">,</span> <span class=\"n\">output_field</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">output_field</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">expressions</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;expressions must have at least 2 elements&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">expression</span> <span class=\"ow\">in</span> <span class=\"n\">expressions</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">expression</span><span class=\"p\">,</span> <span class=\"s2\">&quot;resolve_expression&quot;</span><span class=\"p\">):</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%r</span><span class=\"s2\"> is not an Expression&quot;</span> <span class=\"o\">%</span> <span class=\"n\">expression</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expressions</span> <span class=\"o\">=</span> <span class=\"n\">expressions</span>\n</code></pre></div>\n<p>Vi gör en del grundläggande validering av parametrarna, inklusive att kräva minst 2 kolumner eller värden och säkerställa att de är uttryck. Vi kräver <a class=\"reference internal\" href=\"#output-field\"><span class=\"std std-ref\">output_field</span></a> här så att Django vet vilken typ av modellfält som ska tilldelas det slutliga resultatet.</p>\n<p>Nu implementerar vi förbehandling och validering. Eftersom vi inte har någon egen validering vid denna tidpunkt delegerar vi till de nästlade uttrycken:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">resolve_expression</span><span class=\"p\">(</span>\n    <span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">query</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">allow_joins</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">reuse</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">summarize</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">for_save</span><span class=\"o\">=</span><span class=\"kc\">False</span>\n<span class=\"p\">):</span>\n    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">is_summary</span> <span class=\"o\">=</span> <span class=\"n\">summarize</span>\n    <span class=\"k\">for</span> <span class=\"n\">pos</span><span class=\"p\">,</span> <span class=\"n\">expression</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expressions</span><span class=\"p\">):</span>\n        <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">expressions</span><span class=\"p\">[</span><span class=\"n\">pos</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">expression</span><span class=\"o\">.</span><span class=\"n\">resolve_expression</span><span class=\"p\">(</span>\n            <span class=\"n\">query</span><span class=\"p\">,</span> <span class=\"n\">allow_joins</span><span class=\"p\">,</span> <span class=\"n\">reuse</span><span class=\"p\">,</span> <span class=\"n\">summarize</span><span class=\"p\">,</span> <span class=\"n\">for_save</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">c</span>\n</code></pre></div>\n<p>Därefter skriver vi den metod som ansvarar för att generera SQL:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_sql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">,</span> <span class=\"n\">template</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"n\">sql_expressions</span><span class=\"p\">,</span> <span class=\"n\">sql_params</span> <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">expression</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expressions</span><span class=\"p\">:</span>\n        <span class=\"n\">sql</span><span class=\"p\">,</span> <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"n\">compiler</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"n\">expression</span><span class=\"p\">)</span>\n        <span class=\"n\">sql_expressions</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">sql</span><span class=\"p\">)</span>\n        <span class=\"n\">sql_params</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"n\">params</span><span class=\"p\">)</span>\n    <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"n\">template</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">template</span>\n    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;expressions&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;,&quot;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">sql_expressions</span><span class=\"p\">)}</span>\n    <span class=\"k\">return</span> <span class=\"n\">template</span> <span class=\"o\">%</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">sql_params</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_oracle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Example of vendor specific handling (Oracle in this case).</span>\n<span class=\"sd\">    Let&#39;s make the function name lowercase.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">as_sql</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">,</span> <span class=\"n\">template</span><span class=\"o\">=</span><span class=\"s2\">&quot;coalesce( </span><span class=\"si\">%(expressions)s</span><span class=\"s2\"> )&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code> kan stödja anpassade nyckelordsargument, vilket gör att metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">as_vendorname()</span></code> kan åsidosätta data som används för att generera SQL-strängen. Att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code> nyckelordsargument för anpassning är att föredra framför att mutera <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> inom <code class=\"docutils literal notranslate\"><span class=\"pre\">as_vendorname()</span></code>-metoder eftersom det senare kan leda till fel när det körs på olika databasbackends. Om din klass förlitar sig på klassattribut för att definiera data, överväg att tillåta åsidosättningar i din <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code>-metod.</p>\n<p>Vi genererar SQL för vart och ett av <code class=\"docutils literal notranslate\"><span class=\"pre\">uttrycken</span></code> med hjälp av metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler.compile()</span></code> och sammanfogar resultatet med kommatecken. Sedan fylls mallen i med våra data och SQL och parametrar returneras.</p>\n<p>Vi har också definierat en anpassad implementering som är specifik för Oracle-backend. Funktionen <code class=\"docutils literal notranslate\"><span class=\"pre\">as_oracle()</span></code> kommer att anropas istället för <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code> om Oracle-backend används.</p>\n<p>Slutligen implementerar vi resten av de metoder som gör att vårt frågeuttryck kan fungera bra tillsammans med andra frågeuttryck:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_source_expressions</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\">expressions</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">set_source_expressions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">expressions</span><span class=\"p\">):</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expressions</span> <span class=\"o\">=</span> <span class=\"n\">expressions</span>\n</code></pre></div>\n<p>Låt oss se hur det fungerar:</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><span class=\"p\">,</span> <span class=\"n\">Value</span><span class=\"p\">,</span> <span class=\"n\">CharField</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">Company</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\">tagline</span><span class=\"o\">=</span><span class=\"n\">Coalesce</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"p\">[</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;motto&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;ticker_name&quot;</span><span class=\"p\">),</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;description&quot;</span><span class=\"p\">),</span> <span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s2\">&quot;No Tagline&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">CharField</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\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">qs</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\">: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">tagline</span><span class=\"p\">))</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">Google: Do No Evil</span>\n<span class=\"go\">Apple: AAPL</span>\n<span class=\"go\">Yahoo: Internet Company</span>\n<span class=\"go\">Django Software Foundation: No Tagline</span>\n</code></pre></div>\n<section id=\"avoiding-sql-injection\">\n<span id=\"avoiding-sql-injection-in-query-expressions\"></span><h4>Undvika SQL-injektion<a class=\"heading-anchor\" href=\"#avoiding-sql-injection\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Eftersom nyckelordsargumenten i en <code class=\"docutils literal notranslate\"><span class=\"pre\">Func</span></code> för <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__()</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">**extra</span></code>) och <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">**extra_context</span></code>) interpoleras in i SQL-strängen i stället för att skickas som frågeparametrar (där databasdrivrutinen skulle undkomma dem), får de inte innehålla otillförlitlig användarinmatning.</p>\n<p>Om till exempel <code class=\"docutils literal notranslate\"><span class=\"pre\">substring</span></code> är användartillhandahållen, är denna funktion sårbar för SQL-injektion:</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\">Func</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Position</span><span class=\"p\">(</span><span class=\"n\">Func</span><span class=\"p\">):</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;POSITION&quot;</span>\n    <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;</span><span class=\"si\">%(function)s</span><span class=\"s2\">(&#39;</span><span class=\"si\">%(substring)s</span><span class=\"s2\">&#39; in </span><span class=\"si\">%(expressions)s</span><span class=\"s2\">)&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">expression</span><span class=\"p\">,</span> <span class=\"n\">substring</span><span class=\"p\">):</span>\n        <span class=\"c1\"># substring=substring is an SQL injection vulnerability!</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">expression</span><span class=\"p\">,</span> <span class=\"n\">substring</span><span class=\"o\">=</span><span class=\"n\">substring</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Denna funktion genererar en SQL-sträng utan några parametrar. Eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">substring</span></code> skickas till <code class=\"docutils literal notranslate\"><span class=\"pre\">super().__init__()</span></code> som ett nyckelordsargument, interpoleras det till SQL-strängen innan frågan skickas till databasen.</p>\n<p>Här är en korrigerad omskrivning:</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\">Position</span><span class=\"p\">(</span><span class=\"n\">Func</span><span class=\"p\">):</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;POSITION&quot;</span>\n    <span class=\"n\">arg_joiner</span> <span class=\"o\">=</span> <span class=\"s2\">&quot; IN &quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">expression</span><span class=\"p\">,</span> <span class=\"n\">substring</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"n\">substring</span><span class=\"p\">,</span> <span class=\"n\">expression</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">substring</span></code> istället skickas som ett positionellt argument kommer det att skickas som en parameter i databasfrågan.</p>\n</section>\n</section>\n<section id=\"adding-support-in-third-party-database-backends\">\n<h3>Lägga till stöd för databasbackends från tredje part<a class=\"heading-anchor\" href=\"#adding-support-in-third-party-database-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du använder en databasbackend som använder en annan SQL-syntax för en viss funktion kan du lägga till stöd för den genom att apa till en ny metod till funktionens klass.</p>\n<p>Låt oss säga att vi skriver en backend för Microsofts SQL Server som använder SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">LEN</span></code> istället för <code class=\"docutils literal notranslate\"><span class=\"pre\">LENGTH</span></code> för funktionen <a class=\"reference internal\" href=\"/sv/6.1/ref/models/database-functions/#django.db.models.functions.Length\" title=\"django.db.models.functions.Length\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Length</span></code></a>. Vi kommer att apa patch en ny metod som heter <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sqlserver()</span></code> på klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">Length</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Length</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">sqlserver_length</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">as_sql</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">,</span> <span class=\"n\">function</span><span class=\"o\">=</span><span class=\"s2\">&quot;LEN&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">Length</span><span class=\"o\">.</span><span class=\"n\">as_sqlserver</span> <span class=\"o\">=</span> <span class=\"n\">sqlserver_length</span>\n</code></pre></div>\n<p>Du kan också anpassa SQL genom att använda parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">template</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql()</span></code>.</p>\n<p>Vi använder <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sqlserver()</span></code> eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">django.db.connection.vendor</span></code> returnerar <code class=\"docutils literal notranslate\"><span class=\"pre\">sqlserver</span></code> för backend.</p>\n<p>Tredjeparts backends kan registrera sina funktioner i toppnivån <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code>-filen i backend-paketet eller i en toppnivå <code class=\"docutils literal notranslate\"><span class=\"pre\">expressions.py</span></code>-fil (eller paket) som importeras från toppnivån <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__.py</span></code>.</p>\n<p>För användarprojekt som vill patcha den backend som de använder bör den här koden finnas i en <a class=\"reference internal\" href=\"/sv/6.1/ref/applications/#django.apps.AppConfig.ready\" title=\"django.apps.AppConfig.ready\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">AppConfig.ready()</span></code></a>-metod.</p>\n</section>\n</section>","rootId":"query-expressions","toc":[{"title":"Stöd för aritmetik","anchor":"supported-arithmetic","children":[]},{"title":"Utgångsfält","anchor":"output-field","children":[]},{"title":"Några exempel","anchor":"some-examples","children":[]},{"title":"Inbyggda uttryck","anchor":"built-in-expressions","children":[{"title":"F()-uttryck","anchor":"f-expressions","children":[{"title":"Skivning av F()-uttryck","anchor":"slicing-f-expressions","children":[]},{"title":"Undvika tävlingsförhållanden med hjälp av F()","anchor":"avoiding-race-conditions-using-f","children":[]},{"title":"F() assignments are refreshed after Model.save()","anchor":"f-assignments-are-refreshed-after-model-save","children":[]},{"title":"Använda F() i filter","anchor":"using-f-in-filters","children":[]},{"title":"Använda F() med annotationer","anchor":"using-f-with-annotations","children":[]},{"title":"Använda F() för att sortera nollvärden","anchor":"using-f-to-sort-null-values","children":[]},{"title":"Använda F() med logiska operationer","anchor":"using-f-with-logical-operations","children":[]}]},{"title":"Func() uttryck","anchor":"func-expressions","children":[]},{"title":"uttryck för Aggregate()","anchor":"aggregate-expressions","children":[]},{"title":"Skapa dina egna aggregerade funktioner","anchor":"creating-your-own-aggregate-functions","children":[]},{"title":"uttryck för Value()","anchor":"value-expressions","children":[]},{"title":"ExpressionWrapper() uttryck","anchor":"expressionwrapper-expressions","children":[]},{"title":"JSONNull() expression","anchor":"jsonnull-expression","children":[]},{"title":"Villkorliga uttryck","anchor":"conditional-expressions","children":[]},{"title":"uttryck för Subquery()","anchor":"subquery-expressions","children":[{"title":"Hänvisning till kolumner från den yttre queryset","anchor":"referencing-columns-from-the-outer-queryset","children":[]},{"title":"Begränsa en underfrågeställning till en enda kolumn","anchor":"limiting-a-subquery-to-a-single-column","children":[]},{"title":"Begränsa underfrågeställningen till en enda rad","anchor":"limiting-the-subquery-to-a-single-row","children":[]},{"title":"Existerar() underfrågor","anchor":"exists-subqueries","children":[]},{"title":"Filtrering på ett Subquery()- eller Exists()-uttryck","anchor":"filtering-on-a-subquery-or-exists-expressions","children":[]},{"title":"Använda aggregat inom ett Subquery-uttryck","anchor":"using-aggregates-within-a-subquery-expression","children":[]}]},{"title":"Råa SQL-uttryck","anchor":"raw-sql-expressions","children":[]},{"title":"Fönsterfunktioner","anchor":"window-functions","children":[{"title":"Ramar","anchor":"frames","children":[]}]}]},{"title":"Teknisk information","anchor":"technical-information","children":[{"title":"Uttryck API","anchor":"expression-api","children":[]},{"title":"Skriva dina egna frågeuttryck","anchor":"writing-your-own-query-expressions","children":[{"title":"Undvika SQL-injektion","anchor":"avoiding-sql-injection","children":[]}]},{"title":"Lägga till stöd för databasbackends från tredje part","anchor":"adding-support-in-third-party-database-backends","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.1/ref/"},{"docname":"ref/models/index","title":"Modeller","url":"/sv/6.1/ref/models/"}],"prev":{"docname":"ref/models/lookups","title":"API-referens för uppslagning","url":"/sv/6.1/ref/models/lookups/"},"next":{"docname":"ref/models/conditional-expressions","title":"Villkorliga uttryck","url":"/sv/6.1/ref/models/conditional-expressions/"},"formats":{"html":"/sv/6.1/ref/models/expressions/","markdown":"/sv/6.1/ref/models/expressions.md","json":"/sv/6.1/ref/models/expressions.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/models/expressions.txt","official":"https://docs.djangoproject.com/sv/6.1/ref/models/expressions/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}