{"title":"Nathanna ceisteanna","version":"6.0","locale":"ga","docname":"ref/models/expressions","url":"/ga/6.0/ref/models/expressions/","canonical":"https://djangodocs.dev/ga/6.0/ref/models/expressions/","summary":"Déanann nathanna fiosrúcháin cur síos ar luach nó ar ríomh is féidir a úsáid mar chuid de nuashonrú, cruthú, scagadh, ordú de réir, anótáil nó comhiomlán.","html":"<h1>Nathanna ceisteanna<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>Déanann nathanna fiosrúcháin cur síos ar luach nó ar ríomh is féidir a úsáid mar chuid de nuashonrú, cruthú, scagadh, ordú de réir, anótáil nó comhiomlán. Nuair a aschuireann abairt luach boolean, féadfar é a úsáid go díreach i scagairí. Tá roinnt nathanna ionsuite ann (doiciméadaithe thíos) is féidir a úsáid chun cabhrú leat ceisteanna a scríobh. Is féidir nathanna a chomhcheangal, nó i gcásanna áirithe a neadú, chun ríomhanna níos casta a fhoirmiú.</p>\n<section id=\"supported-arithmetic\">\n<h2>Uimhrithíocht tacaithe<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>Tacaíonn Django le diúltú, cur leis, íolrú, iolrú, roinnt, uimhríocht modulo, agus an t-oibreoir cumhachta ar nathanna fiosrúcháin, ag baint úsáide as comhsheasmhainní Python, athróga, agus fiú nathanna eile.</p>\n</section>\n<section id=\"output-field\">\n<span id=\"id1\"></span><h2>Réimse aschuir<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>Tacaíonn go leor de na nathanna doiciméadaithe sa chuid seo le paraiméadar roghnach <code class=\"docutils literal notranslate\">output_field</code>. Má thugtar, luchtálfaidh Django an luach isteach sa réimse sin tar éis é a aisghabháil ón mbunachar sonraí.</p>\n<p>Glacann <code class=\"docutils literal notranslate\">output_field</code> sampla réimse samhail, mar <code class=\"docutils literal notranslate\">IntegerField () ``nó ``BooleanField ()</code>. De ghnáth, ní theastaíonn aon argóintí ón réimse, cosúil le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>max_length <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, ós rud é go mbaineann argóintí réimse le bailíochtú sonraí nach ndéanfar ar luach aschuir an abairt.</p>\n<p>Ní theastaíonn <code class=\"docutils literal notranslate\">output_field</code> ach amháin nuair nach bhfuil Django in ann cineál réimse an torthaí a chinneadh go huathoibríoch, mar shampla nathanna casta a mheascann cineálacha réimse. Mar shampla, teastaíonn réimse aschuir <code class=\"docutils literal notranslate\">DecimalField () ``agus ``FloatField ()</code> a chur leis, cosúil le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>output_field=floatField () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p><code class=\"docutils literal notranslate\">output_field</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\">timedelta</code>, you can create a custom field that\nhandles the conversion, ensuring consistent results across databases. See\n<a class=\"reference internal\" href=\"/ga/6.0/howto/custom-model-fields/\"><span class=\"doc\">Conas réimsí samhail saincheaptha a chruthú</span></a>.</p>\n</section>\n<section id=\"some-examples\">\n<h2>Roinnt samplaí<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=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count<span class=\"p\">,</span> F<span class=\"p\">,</span> Value\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length<span class=\"p\">,</span> Upper\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.lookups</span> <span class=\"kn\">import</span> GreaterThan\n\n<span class=\"go\"># Find companies that have more employees than chairs.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>num_employees__gt<span class=\"o\">=</span>F<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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>num_employees__gt<span class=\"o\">=</span>F<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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>num_employees__gt<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> F<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>company <span class=\"o\">=</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>num_employees__gt<span class=\"o\">=</span>F<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>annotate<span class=\"p\">(</span>chairs_needed<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">)</span> <span class=\"o\">-</span> F<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>first<span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>company<span class=\"o\">.</span>num_employees\n<span class=\"go\">120</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>company<span class=\"o\">.</span>num_chairs\n<span class=\"go\">50</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>company<span class=\"o\">.</span>chairs_needed\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>company <span class=\"o\">=</span> Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Google&quot;</span><span class=\"p\">,</span> ticker<span class=\"o\">=</span>Upper<span class=\"p\">(</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;goog&quot;</span><span class=\"p\">)))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>company<span class=\"o\">.</span>ticker\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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>num_products<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s2\">&quot;products&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>num_products<span class=\"o\">=</span>Count<span class=\"p\">(</span>F<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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>num_offerings<span class=\"o\">=</span>Count<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;products&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> F<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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span>Length<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>asc<span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span>Length<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>desc<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=\"nn\">django.db.models</span> <span class=\"kn\">import</span> CharField\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length\n<span class=\"gp\">&gt;&gt;&gt; </span>CharField<span class=\"o\">.</span>register_lookup<span class=\"p\">(</span>Length<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<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=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Exists<span class=\"p\">,</span> OuterRef\n<span class=\"gp\">&gt;&gt;&gt; </span>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    Exists<span class=\"p\">(</span>Employee<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>company<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">),</span> salary__gt<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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>GreaterThan<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">),</span> F<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>Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    need_chairs<span class=\"o\">=</span>GreaterThan<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">),</span> F<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>Nathanna tógtha<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\">Note</p>\n<p>Sainmhínítear na nathanna seo in django.db.models.expressions` agus <code class=\"docutils literal notranslate\">django.db.models.aggregates</code>, ach ar mhaithe le háisiúlacht bíonn siad ar fáil agus de ghnáth allmhairithe ó:mod: django.db.models.</p>\n</aside>\n<section id=\"f-expressions\">\n<h3>Nathanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () ``<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\">class</span> </em><span class=\"sig-name descname\">F</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>Léiríonn réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>luach réimse samhail, luach claochlaithe réimse samhail, nó colún anótaithe. De bharr sé gur féidir tagairt a dhéanamh do luachanna réimse samhail agus oibríochtaí bunachar sonraí a dhéanamh ag baint úsáide as iad gan iad a tharraingt amach as an mbunachar sonraí isteach i gcuimhne Python.</p>\n<p>Ina áit sin, úsáideann Django an réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>chun abairt SQL a ghiniúint a thugann cur síos ar an oibríocht riachtanach ag leibhéal an bhunachar sonraí.</p>\n<p>Déanaimis triail a bhaint as seo le sampla. De ghnáth, d'fhéadfadh duine rud éigin mar seo a dhéanamh:</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>\nreporter <span class=\"o\">=</span> Reporters<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Tintin&quot;</span><span class=\"p\">)</span>\nreporter<span class=\"o\">.</span>stories_filed <span class=\"o\">+=</span> <span class=\"mi\">1</span>\nreporter<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Anseo, tarraingamar luach <code class=\"docutils literal notranslate\">reporter.stories_filed</code> ón mbunachar sonraí isteach i gcuimhne agus rinneamar é a ionramháil ag baint úsáide as oibreoirí Python eolach, agus ansin shábháil an réad ar ais chuig an mbunachar sonraí. Ach ina ionad sin d'fhéadfaimis a dhéanamh freisin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n\nreporter <span class=\"o\">=</span> Reporters<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Tintin&quot;</span><span class=\"p\">)</span>\nreporter<span class=\"o\">.</span>stories_filed <span class=\"o\">=</span> F<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>\nreporter<span class=\"o\">.</span>save<span class=\"p\">()</span>\n</code></pre></div>\n<p>Cé go bhfuil cuma <code class=\"docutils literal notranslate\">reporter.stories_filed = F ('stories_filed') + 1</code> cosúil le gnáthshannadh luach Python le tréith sampla, i ndáiríre is tógáil SQL é ag cur síos ar oibríocht ar an mbunachar sonraí.</p>\n<p>Nuair a thagann Django le sampla de <code class=\"docutils literal notranslate\">F () ``, a sháraíonn sé na hoibreoirí caighdeánacha Python chun abairt SQL cumhdaithe a chruthú; sa chás seo, ceann a thugann treoir don bhunachar sonraí an réimse bunachar sonraí a léiríonn ``reporter.stories_filed</code> a mhéadú.</p>\n<p>Cibé luach atá nó a bhí ar reporter.stories_filed`, ní fhaigheann Python eolas faoi riamh - déileálann an bunachar sonraí leis go hiomlán. Is é gach rud a dhéanann Python, trí rang <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>Django, an comhréiteach SQL a chruthú chun tagairt a dhéanamh don réimse agus cur síos a dhéanamh ar an oibríocht.</p>\n<p>As well as being used in operations on single instances as above, <code class=\"docutils literal notranslate\">F()</code> can\nbe used with <code class=\"docutils literal notranslate\">update()</code> to perform bulk updates on a <code class=\"docutils literal notranslate\">QuerySet</code>. This\nreduces the two queries we were using above - the <code class=\"docutils literal notranslate\">get()</code> and the\n<a class=\"reference internal\" href=\"/ga/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> - 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>reporter <span class=\"o\">=</span> Reporters<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Tintin&quot;</span><span class=\"p\">)</span>\nreporter<span class=\"o\">.</span>update<span class=\"p\">(</span>stories_filed<span class=\"o\">=</span>F<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=\"/ga/6.0/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\">update()</code></a> 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>Reporter<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>stories_filed<span class=\"o\">=</span>F<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>Dá bhrí sin is féidir le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>buntáistí feidhmíochta a thairiscint trí:</p>\n<ul class=\"simple\">\n<li><p>an bunachar sonraí a fháil, seachas Python, chun obair a dhéanamh</p></li>\n<li><p>laghdú ar líon na gceisteanna a theastaíonn ó oibríochtaí</p></li>\n</ul>\n<section id=\"slicing-f-expressions\">\n<span id=\"slicing-using-f\"></span><h4>Ag sliseadh abairtí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () ``<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>For string-based fields, text-based fields, and\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.ArrayField\" title=\"django.contrib.postgres.fields.ArrayField\"><code class=\"xref py py-class docutils literal notranslate\">ArrayField</code></a>, you can use Python's\narray-slicing syntax. The indices are 0-based. The <code class=\"docutils literal notranslate\">step</code> argument to\n<code class=\"docutils literal notranslate\">slice</code> and negative indexing are not supported. 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=\"c1\"># Replacing a name with a substring of itself.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>writer <span class=\"o\">=</span> Writers<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Priyansh&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>writer<span class=\"o\">.</span>name <span class=\"o\">=</span> F<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>writer<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>writer<span class=\"o\">.</span>name\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=\"id2\"></span><h4>Coinníollacha rása a sheachaint ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () ``<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>Buntáiste úsáideach eile a bhaineann le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ná go seachnaíonn an bunachar sonraí - seachas Python - luach réimse a nuashonrú <em>coinníoll rása</em>.</p>\n<p>Má fhorghníomhaíonn dhá snáithe Python an cód sa chéad shampla thuas, d'fhéadfadh snáithe amháin luach réimse a aisghabháil, a mhéadú agus a shábháil tar éis don duine eile é a aisghabháil ón mbunachar sonraí. Beidh an luach a shábhálann an dara snáithe bunaithe ar an luach bunaidh; caillfear obair an chéad snáithe.</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=\"/ga/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> or <code class=\"docutils literal notranslate\">update()</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\">F()</code> assignments are refreshed after <code class=\"docutils literal notranslate\">Model.save()</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\">F()</code> objects assigned to model fields are refreshed from the database on\n<a class=\"reference internal\" href=\"/ga/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> 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>reporter <span class=\"o\">=</span> Reporters<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s2\">&quot;Tintin&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>reporter<span class=\"o\">.</span>stories_filed <span class=\"o\">=</span> F<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>reporter<span class=\"o\">.</span>save<span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>reporter<span class=\"o\">.</span>stories_filed  <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\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>In previous versions of Django, <code class=\"docutils literal notranslate\">F()</code> objects were not refreshed from the\ndatabase on <a class=\"reference internal\" href=\"/ga/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\">save()</code></a> 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>Ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>i scagairí<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>Tá <code class=\"docutils literal notranslate\">F () ``an-úsáideach freisin i scagairí ``QuerySet</code>, áit a ndéanann siad sraith rudaí a scagadh i gcoinne critéir bunaithe ar a luachanna réimse, seachas ar luachanna Python.</p>\n<p>&lt;using-f-expressions-in-filters&gt;Tá sé seo doiciméadaithe in:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ag baint úsáide as abairtí F () i gceisteanna <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</section>\n<section id=\"using-f-with-annotations\">\n<span id=\"id3\"></span><h4>Ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>le anótaí<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>Is féidir <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a úsáid chun réimsí dinimiciúla a chruthú ar do mhúnlaí trí réimsí éagsúla a chomhcheangal le huimhríocht:</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>company <span class=\"o\">=</span> Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>chairs_needed<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;num_employees&quot;</span><span class=\"p\">)</span> <span class=\"o\">-</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;num_chairs&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Má tá na réimsí atá á gcomhcheangal agat de chineálacha éagsúla beidh ort a rá le Django cén cineál réimse a thabharfar ar ais. Tacaíonn an chuid is mó de na nathanna le :ref: output_field &lt;output-field&gt;`don chás seo, ach ós rud é nach ndéanann ``F () `, beidh ort an abairt a fhilleadh le:class: ExpressionWrapper:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> DateTimeField<span class=\"p\">,</span> ExpressionWrapper<span class=\"p\">,</span> F\n\nTicket<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n    expires<span class=\"o\">=</span>ExpressionWrapper<span class=\"p\">(</span>\n        F<span class=\"p\">(</span><span class=\"s2\">&quot;active_at&quot;</span><span class=\"p\">)</span> <span class=\"o\">+</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;duration&quot;</span><span class=\"p\">),</span> output_field<span class=\"o\">=</span>DateTimeField<span class=\"p\">()</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Nuair a dhéantar tagairt do réimsí coibhneasta mar <code class=\"docutils literal notranslate\">ForeignKey</code>, tugann F ()` an príomhluach seachas samhail samhail:</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>car <span class=\"o\">=</span> Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>built_by<span class=\"o\">=</span>F<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>car<span class=\"o\">.</span>manufacturer\n<span class=\"go\">&lt;Manufacturer: Toyota&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>car<span class=\"o\">.</span>built_by\n<span class=\"go\">3</span>\n</code></pre></div>\n</section>\n<section id=\"using-f-to-sort-null-values\">\n<span id=\"id4\"></span><h4>Ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>chun luachanna neall a shórtáil<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>Úsáid <code class=\"docutils literal notranslate\">F () ``agus an argóint eochairfhocal ``nulls_first</code> nó <code class=\"docutils literal notranslate\">nulls_last</code> to:meth: .expression.asc nô:meth: ~.expression.desc chun ordú luachanna null réimse a rialú. De réir réamhshocrú, braitheann an t-ordú ar do bhunachar sonraí.</p>\n<p>Mar shampla, chun cuideachtaí nár tugadh teagmháil leo a shórtáil (<code class=\"docutils literal notranslate\">last_contacted</code> is null) tar éis cuideachtaí a ndearnadh teagmháil leo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n\nCompany<span class=\"o\">.</span>objects<span class=\"o\">.</span>order_by<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;last_contacted&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>desc<span class=\"p\">(</span>nulls_last<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>Ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>le hoibríochtaí loighciúla<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>Nathanna <code class=\"docutils literal notranslate\">F () ``is féidir aschur ``Booleanfield</code> a dhiúltú go loighciúil leis an oibreoir iompaithe <code class=\"docutils literal notranslate\">~F ()</code>. Mar shampla, chun stádas gníomhachtaithe cuideachtaí a mhalartú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n\nCompany<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>is_active<span class=\"o\">=~</span>F<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=\"id5\"></span><h3>Nathanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Func () ``<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>Is iad abairtí <code class=\"docutils literal notranslate\">Func () ``an bunchineál de na nathanna go léir a mbaineann feidhmeanna bunachar sonraí mar `COALESCE</code> agus <code class=\"docutils literal notranslate\">LOWER</code>, nó comhiomlánacha mar SUM`. Is féidir iad a úsáid go díreach:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F<span class=\"p\">,</span> Func\n\nqueryset<span class=\"o\">.</span>annotate<span class=\"p\">(</span>field_lower<span class=\"o\">=</span>Func<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;field&quot;</span><span class=\"p\">),</span> function<span class=\"o\">=</span><span class=\"s2\">&quot;LOWER&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>nó is féidir iad a úsáid chun leabharlann feidhmeanna bunachar sonraí a thógáil:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Lower</span><span class=\"p\">(</span>Func<span class=\"p\">):</span>\n    function <span class=\"o\">=</span> <span class=\"s2\">&quot;LOWER&quot;</span>\n\n\nqueryset<span class=\"o\">.</span>annotate<span class=\"p\">(</span>field_lower<span class=\"o\">=</span>Lower<span class=\"p\">(</span><span class=\"s2\">&quot;field&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Ach beidh tacar ceisteanna mar thoradh ar an dá chás ina ndéantar anótáil ar gach samhail le tréith breise <code class=\"docutils literal notranslate\">field_lower</code> a tháirgtear, go garbh, ón SQL seo a leanas:</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=\"p\">...</span>\n    <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=\"k\">as</span> <span class=\"ss\">&quot;field_lower&quot;</span>\n</code></pre></div>\n<p>See <a class=\"reference internal\" href=\"/ga/6.0/ref/models/database-functions/\"><span class=\"doc\">Feidhmeanna Sonraí</span></a> for a list of built-in database\nfunctions.</p>\n<p>Is é seo a leanas an API Func`:</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\">class</span> </em><span class=\"sig-name descname\">Func</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</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\">function</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>Tréith aicme a dhéanann cur síos ar an bhfeidhm a ghinteofar. Go sonrach, déanfar an feidhm ``idirphóilte mar shealbhóir an ``feidhmi` laistigh de: attr: teimpléad. Réamhshocraithe go <code class=\"docutils literal notranslate\">None</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\">template</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>Tréith aicme, mar shreang formáide, a chuireann síos ar an SQL a ghintear don fheidhm seo. Réamhshocraithe go <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>'% (function) s (% (expressions) s) '<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>Má tá SQL á thógáil agat cosúil le strftime ('%W', 'date') ``agus má theastaíonn carachtar liteartha ``%` sa cheist, é a cheathrú (<code class=\"docutils literal notranslate\">%%%%%</code>) sa tréith <code class=\"docutils literal notranslate\">teimpléad</code> toisc go ndéantar an sreang idirphóilte dhá uair: uair amháin le linn an teimpléid in as_sql ()` agus uair amháin san idirpholú SQL leis na paraiméadair iarratais sa chúrsóir bunachar sonraí.</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\">arg_joiner</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>Tréith aicme a léiríonn an carachtar a úsáidtear chun páirt a ghlacadh le liosta <code class=\"docutils literal notranslate\">léiritheach</code> le chéile. Réamhshocraithe go <code class=\"docutils literal notranslate\">', '</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\">arity</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>Tréith aicme a léiríonn líon na n-argóintí a nglacann an fheidhm leis. Má shocraítear an tréith seo agus má thugtar an fheidhm le líon difriúil nathanna, ardófar <code class=\"docutils literal notranslate\">TypeError</code>. Réamhshocraithe go <code class=\"docutils literal notranslate\">None</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\">as_sql</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">compiler</em>, <em class=\"sig-param\">connection</em>, <em class=\"sig-param\">function<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">template<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">arg_joiner<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra_context</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>Gineann sé an blúire SQL don fheidhm bhunachar sonraí. Filleann sé tuple <code class=\"docutils literal notranslate\">(sql, params)</code>, áit gurb é sql` an teaghrán SQL, agus params` an liosta nó an tiúpla de pharaiméadair fiosrúcháin.</p>\n<p>Ba chóir do na modhanna <code class=\"docutils literal notranslate\">as_vendor () ``úsáid a bhaint as na paraiméadair</code> feidhm <code class=\"docutils literal notranslate\">, `teimpléad</code>, arg_joiner`, agus aon pharaiméadair <code class=\"docutils literal notranslate\">**extra_context</code> eile chun an SQL a shaincheapadh de réir mar is gá. Mar shampla:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">django/db/samhlacha/feidhmeanna. py</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=\"nc\">ConcatPair</span><span class=\"p\">(</span>Func<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    function <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=\"nf\">as_mysql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> compiler<span class=\"p\">,</span> connection<span class=\"p\">,</span> <span class=\"o\">**</span>extra_context<span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>as_sql<span class=\"p\">(</span>\n            compiler<span class=\"p\">,</span>\n            connection<span class=\"p\">,</span>\n            function<span class=\"o\">=</span><span class=\"s2\">&quot;CONCAT_WS&quot;</span><span class=\"p\">,</span>\n            template<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>extra_context\n        <span class=\"p\">)</span>\n</code></pre></figure>\n<p>Chun leochaileacht insteallta SQL a sheachaint, ní chóir go mbeadh ionchur úsáideora neamhiontaofa ag <code class=\"docutils literal notranslate\">extra_context</code> &lt;avoiding-sql-injection-in-query-expressions&gt;`: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>mar go ndéantar na luachanna seo a idirphóladh isteach sa sreangán SQL seachas a rith mar pharaiméadair fiosrúcháin, áit a n-éalódh tiománaí bunachar sonraí iad.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Is liosta de na nathanna seasaimh a chuirfear i bhfeidhm ar an bhfeidhm é an argóint * sainráitigh `. Déanfar na nathanna a thiontú go teaghráin, a chur le chéile le arg_joiner`, agus ansin idirphóilfear isteach sa teimpléad ``mar shealbhóir áite ``léirithe`.</p>\n<p>Is féidir le hargóintí seasaimh a bheith ina nathanna nó luachanna Python. Glactar leis gur tagairtí colún iad na teaghráin agus fillfear iad in abairtí <code class=\"docutils literal notranslate\">F () ``agus cuirfear luachanna eile fillte in abairtí ``Luach ()</code>.</p>\n<p>Is iad na kwargs <code class=\"docutils literal notranslate\">**extra</code> péirí <code class=\"docutils literal notranslate\">eochair=luach</code> is féidir iad a ionghabháil isteach sa tréith <code class=\"docutils literal notranslate\">teimpléad ``. Chun leochaileacht insteallta SQL a sheachaint, ní chóir go mbeadh ionchur úsáideora neamhion &lt;avoiding-sql-injection-in-query-expressions&gt;taofa ag ``extra</code>: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>mar go ndéantar na luachanna seo a idirphóladh isteach sa sreang SQL seachas a rith mar pharaiméadair cheisteanna, áit a n-éalfadh tiománaí an bunachar sonraí iad.</p>\n<p>Is féidir na heochairfhocail <code class=\"docutils literal notranslate\">feidhm</code>, teimpléad`, agus <code class=\"docutils literal notranslate\">arg_joiner</code> a úsáid chun tréithe an ainm céanna a chur in ionad gan do rang féin a shainiú. :ref: is féidir <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>output_field &lt;output-field&gt;`a úsáid chun an cineál tuairisceáin a bhfuil súil leis a shainiú.</p>\n<aside class=\"admonition-sanitize-input-used-to-configure-a-query-expression admonition\" role=\"note\">\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=\"/ga/6.0/ref/models/database-functions/#django.db.models.functions.Cast\" title=\"django.db.models.functions.Cast\"><code class=\"xref py py-class docutils literal notranslate\">Cast</code></a>) vary in whether arguments such\nas <code class=\"docutils literal notranslate\">output_field</code> can be supplied positionally or only by keyword. For\n<code class=\"docutils literal notranslate\">output_field</code> and several other cases, the input ultimately reaches\n<code class=\"docutils literal notranslate\">Func()</code> as a keyword argument, so the advice to avoid constructing\nkeyword arguments from untrusted user input applies as equally to these\narguments as it does to <code class=\"docutils literal notranslate\">**extra</code>.</p>\n</aside>\n</section>\n<section id=\"aggregate-expressions\">\n<h3>Nathanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Comhiomlán () ``<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>Is cás speisialta é abairt comhiomlán de a:ref: Func () abairt &lt;func-expressions&gt;`a chuireann in iúl don cheist go bhfuil clásal ``GROUP BY` ag teastáil. Tá gach ceann de na feidhmeanna:ref: comhiomlán &lt;aggregation-functions&gt;, cosúil le <code class=\"docutils literal notranslate\">Sum () ``agus ``Count ()</code>, oidhreacht ó <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Comhiomlán () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Ós rud é gur abairtí agus nathanna fillte iad <code class=\"docutils literal notranslate\">Comhiomlán</code>, is féidir leat roinnt ríomhanna casta a léiriú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Count\n\nCompany<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n    managers_required<span class=\"o\">=</span><span class=\"p\">(</span>Count<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> Count<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>Is é seo a leanas an API <code class=\"docutils literal notranslate\">Comhléad</code>:</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\">class</span> </em><span class=\"sig-name descname\">Aggregate</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">distinct<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">order_by<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</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\">template</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>Tréith aicme, mar shreang formáide, a chuireann síos ar an SQL a ghintear don chomhiomlán seo. Réamhshocraithe go <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>'% (function) s (% (difriúil) s% (abairtí) s) '<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</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\">function</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>Tréith aicme a dhéanann cur síos ar an bhfeidhm chomhiomlán a ghinteofar. Go sonrach, déanfar an feidhm ``idirphóilte mar shealbhóir an ``feidhmi` laistigh de: attr: teimpléad. Réamhshocraithe go <code class=\"docutils literal notranslate\">None</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\">window_compatible</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>Réamhshocraithe go <code class=\"docutils literal notranslate\">True</code> ós rud é gur féidir an chuid is mó de na feidhmeanna comhiomlána a úsáid mar an abairt foinse in:class: ~Django.db.Models.Expressions.Window.</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\">allow_distinct</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>Tréith aicme a chinneann cibé an gceadaíonn an fheidhm chomhiomlán seo argóint eochairfhocal “difriúil” a rith nó nach bhfuil. Má tá sé socraithe go <code class=\"docutils literal notranslate\">False</code> (réamhshocraithe), ardaítear <code class=\"docutils literal notranslate\">TypeError</code> má chuirtear <code class=\"docutils literal notranslate\">Distinct=True</code>.</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\">allow_order_by</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\" role=\"note\">\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\">order_by</code> keyword argument. If set to <code class=\"docutils literal notranslate\">False</code>\n(default), <code class=\"docutils literal notranslate\">TypeError</code> is raised if <code class=\"docutils literal notranslate\">order_by</code> is passed as a value\nother than <code class=\"docutils literal notranslate\">None</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\">empty_result_set_value</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>Réamhshocraithe go <code class=\"docutils literal notranslate\">None</code> ós rud é go mbíonn NULL` mar thoradh ar an gcuid is mó de na feidhmeanna comhiomlána nuair a chuirtear i bhfeidhm ar shraith torthaí folamh.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Is féidir leis na hargóintí seasaimh <code class=\"docutils literal notranslate\">léiritheach</code> abairtí, claochruithe an réimse samhail, nó ainmneacha réimsí samhail a bheith san áireamh. Déanfar iad a thiontú go sreang agus úsáidfear iad mar shealbhóir áit <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>léiritheoir` laistigh den teimpléad.</p>\n<p>Cinneann an argóint <code class=\"docutils literal notranslate\">difriúil ``cibé an gcaithfear an fheidhm chomhiomlán a ghairm nó nach bhfuil i gcás gach luach ar leith ``léiritheach</code> (nó tacar luachanna, le haghaidh iolracha <code class=\"docutils literal notranslate\">léiritheach</code>). Ní thacaítear leis an argóint ach ar chomhiomláin a bhfuil: attr: ~Aggregate.allow_Distinct socraithe go <code class=\"docutils literal notranslate\">True</code>.</p>\n<p>Tógann an argóint <code class=\"docutils literal notranslate\">scagair</code> a:class: Q rud `a úsáidtear chun na sraithe &lt;django.db.models.Q&gt;anna atá comhiomlánaithe a scagadh. Féach: ref: `comhiomlánú coinníollach agus:ref: filtering-on-annotations mar shampla úsáid.</p>\n<p>The <code class=\"docutils literal notranslate\">order_by</code> argument behaves similarly to the <code class=\"docutils literal notranslate\">field_names</code> input of the\n<a class=\"reference internal\" href=\"/ga/6.0/ref/models/querysets/#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\">order_by()</code></a> function, accepting a field name (with an optional\n<code class=\"docutils literal notranslate\">&quot;-&quot;</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>Glacann an argóint default` luach a chuirfear in éineacht leis an comhiomlán chuig:class: ~Django.db.Models.Functions.Coalesce. Tá sé seo úsáideach chun luach atá le tabhairt ar ais seachas <code class=\"docutils literal notranslate\">None</code> a shonrú nuair nach bhfuil aon iontrálacha sa tacar fiosrúcháin (nó an ghrúpáil).</p>\n<p>Is iad na kwargs <code class=\"docutils literal notranslate\">**extra</code> péirí <code class=\"docutils literal notranslate\">eochair=luach</code> is féidir iad a ionghabháil isteach sa tréith <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>teimpléad <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>The <code class=\"docutils literal notranslate\">order_by</code> argument was added.</p>\n</aside>\n</section>\n<section id=\"creating-your-own-aggregate-functions\">\n<h3>Do Feidhmeanna Comhiomlánacha féin a<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>Is féidir leat do fheidhmeanna comhiomlána féin a chruthú freisin. Ar a laghad, ní mór duit <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>feidhm <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a shainiú, ach is féidir leat an SQL a ghintear a shaincheapadh go hiomlán freisin. Seo sampla gairid:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Aggregate\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Sum</span><span class=\"p\">(</span>Aggregate<span class=\"p\">):</span>\n    <span class=\"c1\"># Supports SUM(ALL field).</span>\n    function <span class=\"o\">=</span> <span class=\"s2\">&quot;SUM&quot;</span>\n    template <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    allow_distinct <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    arity <span class=\"o\">=</span> <span class=\"mi\">1</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> expression<span class=\"p\">,</span> all_values<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"o\">**</span>extra<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>expression<span class=\"p\">,</span> all_values<span class=\"o\">=</span><span class=\"s2\">&quot;ALL &quot;</span> <span class=\"k\">if</span> all_values <span class=\"k\">else</span> <span class=\"s2\">&quot;&quot;</span><span class=\"p\">,</span> <span class=\"o\">**</span>extra<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"value-expressions\">\n<h3>Nathanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Luach () ``<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\">class</span> </em><span class=\"sig-name descname\">Value</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</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>Léiríonn réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Luach () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an chomhpháirt is lú is féidir de abairt: luach simplí. Nuair is gá duit luach sláimhir, boolean nó sreang a léiriú laistigh de abairt, is féidir leat an luach sin a fhilleadh laistigh de <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>Luach () <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>.</p>\n<p>Is annamh a bheidh ort <code class=\"docutils literal notranslate\">Luach () ``a úsáid go díreach. Nuair a scríobhann tú an abairt ``F ('field') + 1</code>, fillteann Django an <code class=\"docutils literal notranslate\">1</code> go hinneach i <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Luach () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, ag ligean luachanna simplí a úsáid i nathanna níos casta. Beidh ort <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>Luach () <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>a úsáid nuair is mian leat teaghrán a chur chuig abairt. Léirmhíníonn an chuid is mó de na nathanna argóint teaghrán mar ainm réimse, cosúil le <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">``</span></a>Lower ('ainm') <a href=\"#id11\"><span class=\"problematic\" id=\"id12\">`</span></a>.</p>\n<p>Déanann an argóint <code class=\"docutils literal notranslate\">luach</code> cur síos ar an luach atá le cur san áireamh sa abairt, mar shampla <code class=\"docutils literal notranslate\">`1</code>, True`, nó <code class=\"docutils literal notranslate\">None</code>. Tá a fhios ag Django conas na luachanna Python seo a thiontú ina gcineál bunachar sonraí comhfhreag</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\">value</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\">datetime.datetime</code></a> as <code class=\"docutils literal notranslate\">value</code> defaults\n<code class=\"docutils literal notranslate\">output_field</code> to <a class=\"reference internal\" href=\"/ga/6.0/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\">DateTimeField</code></a>.</p>\n</section>\n<section id=\"expressionwrapper-expressions\">\n<h3>Nathanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ExpressionWrapper () ``<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\">class</span> </em><span class=\"sig-name descname\">ExpressionWrapper</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">output_field</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>&lt;output-field&gt;Tá <code class=\"docutils literal notranslate\">ExpressionWrapper</code> timpeall ar abairt eile agus soláthraíonn sé rochtain ar airíonna, mar shampla:ref: output_field `, nach mbeadh ar fáil ar abairtí eile. Tá ``ExpressionWrapper` riachtanach nuair a úsáidtear uimhríocht ar abairtí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>le cineálacha éagsúla mar a thuairiscítear in:ref: using-f-with-annotations.</p>\n<aside class=\"admonition-database-casting-not-performed admonition\" role=\"note\">\n<p class=\"admonition-title\">Database casting not performed</p>\n<p><code class=\"docutils literal notranslate\">ExpressionWrapper</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=\"/ga/6.0/ref/models/database-functions/#django.db.models.functions.Cast\" title=\"django.db.models.functions.Cast\"><code class=\"xref py py-class docutils literal notranslate\">Cast</code></a> instead.</p>\n</aside>\n</section>\n<section id=\"conditional-expressions\">\n<h3>Nathanna coinníollach<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\">if</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\">elif</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\">else</code></a> logic in queries. Django natively supports SQL <code class=\"docutils literal notranslate\">CASE</code>\nexpressions. For more details see <a class=\"reference internal\" href=\"/ga/6.0/ref/models/conditional-expressions/\"><span class=\"doc\">Nathanna Coinníollach</span></a>.</p>\n</section>\n<section id=\"subquery-expressions\">\n<h3>Nathanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Subquest () ``<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\">class</span> </em><span class=\"sig-name descname\">Subquery</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">queryset</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</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>Is féidir leat fo-cheist sainráite a chur le <code class=\"docutils literal notranslate\">QuerySet</code> ag baint úsáide as an abairt <code class=\"docutils literal notranslate\">SubQuery</code>.</p>\n<p>Mar shampla, chun gach post a anótáil le seoladh ríomhphoist údar an trácht is nua ar an bpost sin:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> OuterRef<span class=\"p\">,</span> Subquery\n<span class=\"gp\">&gt;&gt;&gt; </span>newest <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>post<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span>order_by<span class=\"p\">(</span><span class=\"s2\">&quot;-created_at&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>newest_commenter_email<span class=\"o\">=</span>Subquery<span class=\"p\">(</span>newest<span class=\"o\">.</span>values<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>Ar PostgreSQL, tá cuma ar an SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">,</span> <span class=\"p\">(</span>\n    <span class=\"k\">SELECT</span> U0<span class=\"p\">.</span><span class=\"ss\">&quot;email&quot;</span>\n    <span class=\"k\">FROM</span> <span class=\"ss\">&quot;comment&quot;</span> U0\n    <span class=\"k\">WHERE</span> U0<span class=\"p\">.</span><span class=\"ss\">&quot;post_id&quot;</span> <span class=\"o\">=</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=\"k\">ORDER</span> <span class=\"k\">BY</span> U0<span class=\"p\">.</span><span class=\"ss\">&quot;created_at&quot;</span> <span class=\"k\">DESC</span> <span class=\"k\">LIMIT</span> <span class=\"mi\">1</span>\n<span class=\"p\">)</span> <span class=\"k\">AS</span> <span class=\"ss\">&quot;newest_commenter_email&quot;</span> <span class=\"k\">FROM</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\">Note</p>\n<p>Tá na samplaí sa chuid seo deartha chun a thaispeáint conas iallach a chur ar Django focheist a fhorghníomhú. I gcásanna áirithe d'fhéadfadh sé a bheith indéanta tacar ceisteanna coibhéiseach a scríobh a dhéanann an tasc céanna níos soiléire nó níos éifeachtaí.</p>\n</aside>\n<section id=\"referencing-columns-from-the-outer-queryset\">\n<h4>Tagairt do cholúin ón tacar ceisteanna seachtrach<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\">class</span> </em><span class=\"sig-name descname\">OuterRef</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">field</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>Úsáid <code class=\"docutils literal notranslate\">OuterRef</code> nuair is gá le tacar ceisteanna i <code class=\"docutils literal notranslate\">Focheiste</code> tagairt a dhéanamh do réimse ón bhfiosrú seachtrach nó a chlaochlú. Feidhmíonn sé cosúil le léiriú: aicme: F ach amháin nach ndéantar an seiceáil chun a fheiceáil an dtagraíonn sé do réimse bailí go dtí go réitear an tacar ceisteanna seachtrach.</p>\n<p>Féadfar cásanna <code class=\"docutils literal notranslate\">OuterRef</code> a úsáid i gcomhar le cásanna neadaithe de <code class=\"docutils literal notranslate\">Subcheiste</code> chun tagairt a dhéanamh do thacar fiosrúcháin ina bhfuil nach é an tuismitheoir láithreach. Mar shampla, caithfeadh an tacar ceisteanna seo a bheith laistigh de phéire neadaithe cásanna <code class=\"docutils literal notranslate\">Subcheiste</code> chun réiteach i gceart:</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>Book<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>author<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span>OuterRef<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>Focheisteanna a theorannú go colún amháin<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>Tá amanna ann nuair a chaithfear colún amháin a thabhairt ar ais ó <code class=\"docutils literal notranslate\">Subcheiste</code>, mar shampla, chun <code class=\"docutils literal notranslate\">Subcheiste</code> a úsáid mar sprioc chuardaigh <code class=\"docutils literal notranslate\">__in</code>. Chun gach trácht ar phoist a fhoilsíodh laistigh den lá deireanach a thabhairt ar ais:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> timedelta\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>one_day_ago <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>posts <span class=\"o\">=</span> Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>published_at__gte<span class=\"o\">=</span>one_day_ago<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>post__in<span class=\"o\">=</span>Subquery<span class=\"p\">(</span>posts<span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">)))</span>\n</code></pre></div>\n<p>Sa chás seo, ní mór don fho-cheist a úsáid: meth: ~.queryset.values chun colún amháin a thabhairt ar ais: príomh-eochair an phoist.</p>\n</section>\n<section id=\"limiting-the-subquery-to-a-single-row\">\n<h4>An fho-cheist a theorannú go sraith amháin<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>Chun fo-cheist a chosc ó iliomad sraitheanna a thabhairt ar ais, úsáidtear slisnas (<code class=\"docutils literal notranslate\">[:1]</code>) den tacar fiosrúcháin:</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>subquery <span class=\"o\">=</span> Subquery<span class=\"p\">(</span>newest<span class=\"o\">.</span>values<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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>newest_commenter_email<span class=\"o\">=</span>subquery<span class=\"p\">)</span>\n</code></pre></div>\n<p>Sa chás seo, ní mór don fho-cheist ach colún aon* agus* sraith amháin a thabhairt ar ais: seoladh ríomhphoist an trácht is déanaí a cruthaíodh.</p>\n<p>(Teipfeadh ag baint úsáid:Meth: ~.querySet.get in ionad slisnas toisc nach féidir an <code class=\"docutils literal notranslate\">OuterRef</code> a réiteach go dtí go n-úsáidfear an tacar fiosrúcháin laistigh de <code class=\"docutils literal notranslate\">Subcheiste</code>.)</p>\n</section>\n<section id=\"exists-subqueries\">\n<h4>Focheisteanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Tá ann () ``<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\">class</span> </em><span class=\"sig-name descname\">Exists</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">queryset</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>Is fo-aicme <code class=\"docutils literal notranslate\">`Subcheiste</code> é Exists` a úsáideann ráiteas SQL <code class=\"docutils literal notranslate\">EXISTS</code>. I go leor cásanna feidhmeoidh sé níos fearr ná fo-cheist ós rud é go bhfuil an bunachar sonraí in ann stop a chur le meastóireacht ar an bhfo-cheist nuair a aimsítear an chéad tsraith meaitseála.</p>\n<p>Mar shampla, chun gach post a anótáil le cibé an bhfuil trácht aige laistigh den lá deireanach nó nach bhfuil:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Exists<span class=\"p\">,</span> OuterRef\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> timedelta\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"kn\">import</span> timezone\n<span class=\"gp\">&gt;&gt;&gt; </span>one_day_ago <span class=\"o\">=</span> timezone<span class=\"o\">.</span>now<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>recent_comments <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    post<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    created_at__gte<span class=\"o\">=</span>one_day_ago<span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>recent_comment<span class=\"o\">=</span>Exists<span class=\"p\">(</span>recent_comments<span class=\"p\">))</span>\n</code></pre></div>\n<p>Ar PostgreSQL, tá cuma ar an SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span><span class=\"p\">,</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=\"k\">EXISTS</span><span class=\"p\">(</span>\n    <span class=\"k\">SELECT</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"ss\">&quot;a&quot;</span>\n    <span class=\"k\">FROM</span> <span class=\"ss\">&quot;comment&quot;</span> U0\n    <span class=\"k\">WHERE</span> <span class=\"p\">(</span>\n        U0<span class=\"p\">.</span><span class=\"ss\">&quot;created_at&quot;</span> <span class=\"o\">&gt;=</span> YYYY<span class=\"o\">-</span>MM<span class=\"o\">-</span>DD HH<span class=\"p\">:</span>MM<span class=\"p\">:</span>SS <span class=\"k\">AND</span>\n        U0<span class=\"p\">.</span><span class=\"ss\">&quot;post_id&quot;</span> <span class=\"o\">=</span> <span class=\"ss\">&quot;post&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;id&quot;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">LIMIT</span> <span class=\"mi\">1</span>\n<span class=\"p\">)</span> <span class=\"k\">AS</span> <span class=\"ss\">&quot;recent_comment&quot;</span> <span class=\"k\">FROM</span> <span class=\"ss\">&quot;post&quot;</span>\n</code></pre></div>\n<p>Ní gá iallach ar <code class=\"docutils literal notranslate\">Exists</code> tagairt a dhéanamh do cholún amháin, ós rud é go ndéantar na colúin a chaitheamh agus cuirtear toradh boolean ar ais. Ar an gcaoi chéanna, ós rud é nach bhfuil ordú tábhachtach laistigh de fhocheistiú SQL EXISTS agus nach ndéanfadh sé ach feidhmíocht a laghdú, baintear é go huathoibríoch.</p>\n<p>Is féidir leat ceist a dhéanamh ag baint úsáide as <code class=\"docutils literal notranslate\">NOT EXISTS</code> le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>~Exists () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n</section>\n<section id=\"filtering-on-a-subquery-or-exists-expressions\">\n<h4>Scagadh ar nathanna <code class=\"docutils literal notranslate\">Focheist ()</code> nó <code class=\"docutils literal notranslate\">Existents ()</code> `<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>Is féidir <code class=\"docutils literal notranslate\">Subquery () ``a thugann luach boolean agus ``Existents ()</code> a úsáid mar <code class=\"docutils literal notranslate\">coinníoll</code> in:class: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>~django.db.Models.Expressions.When <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>abairtí, nó chun tacar fiosrúcháin a scagadh go díreach:</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>recent_comments <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<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>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>Exists<span class=\"p\">(</span>recent_comments<span class=\"p\">))</span>\n</code></pre></div>\n<p>Cinnteoidh sé seo nach gcuirfear an fo-cheist leis na colúin <code class=\"docutils literal notranslate\">SELECT</code>, rud a d'fhéadfadh feidhmíocht níos fearr a bheith mar thoradh air.</p>\n</section>\n<section id=\"using-aggregates-within-a-subquery-expression\">\n<h4>Ag baint úsáide as comhiomlánaithe laistigh de abairt <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Focheisteanna `<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>Is féidir comhiomláin a úsáid laistigh de <code class=\"docutils literal notranslate\">SubQuery</code>, ach teastaíonn teaglaim shonrach uathu de:meth: ~.queryset.filter, :meth: ~.queryset.values, agus:meth: ~.queryset.annotate chun an grúpáil fo-cheisteanna a chur i gceart.</p>\n<p>Ag glacadh leis go bhfuil réimse <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>fad <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ag an dá mhúnla, chun poist a aimsiú ina bhfuil fad an phoist níos mó ná fad iomlán na dtuairimí comhcheangailte go léir:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> OuterRef<span class=\"p\">,</span> Subquery<span class=\"p\">,</span> Sum\n<span class=\"gp\">&gt;&gt;&gt; </span>comments <span class=\"o\">=</span> Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>post<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span>order_by<span class=\"p\">()</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;post&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>total_comments <span class=\"o\">=</span> comments<span class=\"o\">.</span>annotate<span class=\"p\">(</span>total<span class=\"o\">=</span>Sum<span class=\"p\">(</span><span class=\"s2\">&quot;length&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;total&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Post<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>length__gt<span class=\"o\">=</span>Subquery<span class=\"p\">(</span>total_comments<span class=\"p\">))</span>\n</code></pre></div>\n<p>Cuireann an “scagaire (...)” tosaigh teorainn leis an bhfocheistiú go dtí na paraiméadair ábhartha. Baineann <code class=\"docutils literal notranslate\">order_by () ``an réamhshocraithe:attr: `~Django.db.Models.Options.Ordering` (más ann) ar an tsamhail ``Comment</code>. Comhiomlánann <code class=\"docutils literal notranslate\">luachanna ('post') ``tuairimí le ``Post</code>. Faoi dheireadh, déanann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>annotate (...) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an comhiomlánú. Tá an t-ord ina gcuirtear na modhanna ceisteanna seo i bhfeidhm tábhachtach. Sa chás seo, ós rud é go gcaithfear an fo-cheist a bheith teoranta do cholún amháin, tá gá le luachanna ('iomlán') `.</p>\n<p>Is é seo an t-aon bhealach chun comhiomlánú a dhéanamh laistigh de <code class=\"docutils literal notranslate\">SubQuery</code>, mar a úsáideann: meth: ~.queryset.aggregate iarracht an tacar ceisteanna a mheas (agus má tá <code class=\"docutils literal notranslate\">OuterRef</code> ann, ní féidir é seo a réiteach).</p>\n</section>\n</section>\n<section id=\"raw-sql-expressions\">\n<h3>Nathanna amh SQL<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\">class</span> </em><span class=\"sig-name descname\">RawSQL</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">sql</em>, <em class=\"sig-param\">params</em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</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>Uaireanta ní féidir le nathanna bunachar sonraí clásal casta <code class=\"docutils literal notranslate\">WHERE</code> a chur in iúl go héasca. Sna cásanna imeall seo, bain úsáid as an abairt <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Rawsql`. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models.expressions</span> <span class=\"kn\">import</span> RawSQL\n<span class=\"gp\">&gt;&gt;&gt; </span>queryset<span class=\"o\">.</span>annotate<span class=\"p\">(</span>val<span class=\"o\">=</span>RawSQL<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>param<span class=\"p\">,)))</span>\n</code></pre></div>\n<p>B'fhéidir nach mbeidh na cuardaigh breise seo iniompartha d'innill bhunachar sonraí éagsúla (toisc go bhfuil cód SQL á scríobh go sainráite agat) agus sáraíonn tú prionsabal DRY, mar sin ba cheart duit iad a sheachaint más féidir.</p>\n<p>Is féidir nathanna <code class=\"docutils literal notranslate\">Rawsql</code> a úsáid freisin mar sprioc scagairí <code class=\"docutils literal notranslate\">__in</code>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>queryset<span class=\"o\">.</span>filter<span class=\"p\">(</span>id__in<span class=\"o\">=</span>RawSQL<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>param<span class=\"p\">,)))</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Chun cosaint a dhéanamh ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ionsaithe insteallta SQL <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>_ &lt; <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/SQL_injection\">https://en.wikipedia.org/wiki/SQL_injection</a>&gt;, ní mór duit éalú aon pharaiméadair is féidir leis an úsáideoir a rialú trí <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>params' a úsáid. Is argóint riachtanach é <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>params' chun iallach ort a admháil nach bhfuil tú ag idirphóiriú do SQL le sonraí a sholáthraíonn an úsáideoir.</p>\n<p>Ní mór duit sealbhóirí áiteanna a lua sa teaghrán SQL freisin. Tá an sampla seo leochaileach do instealladh SQL mar gheall ar na luachana timpeall <code class=\"docutils literal notranslate\">%s</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>RawSQL<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>&lt;sql-injection-protection&gt;Is féidir leat tuilleadh a léamh faoin gcaoi a n-oibríonn Django's:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Cosaint insteallta SQL <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</aside>\n</section>\n<section id=\"window-functions\">\n<h3>Feidhmeanna fuinn<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>Soláthraíonn feidhmeanna fuinneoige bealach chun feidhmeanna a chur i bhfeidhm ar Murab ionann agus gnáthfheidhm chomhiomlánaithe a ríomhaíonn toradh deiridh do gach tacar a shainmhíníonn an grúpa ag, oibríonn feidhmeanna fuinneoige ar:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>frámaí &lt;window-frames&gt;`agus deighiltí, agus ríomhaíonn siad an toradh do gach sraith.</p>\n<p>Is féidir leat fuinneoga iolracha a shonrú san fhiosrúchán céanna a bheadh i Django ORM comhionann le nathanna iolracha a áireamh in a:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Query&lt;/topics/db/aggregation&gt; Set.annotate () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>glao. Ní úsáideann an ORM fuinneoga ainmnithe, ina ionad sin tá siad mar chuid de na colúin roghnaithe.</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\">class</span> </em><span class=\"sig-name descname\">Window</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">partition_by<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">order_by<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">frame<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">output_field<span class=\"o\">=</span><span class=\"default_value\">None</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\">template</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>Réamhshocraithe go <code class=\"docutils literal notranslate\">% (abairt) s OVER (% (window) s) `. Mura gcuirtear ach an argóint ``léirithe</code> ar fáil, beidh clásal na fuinneoige bán.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Is é an rang <code class=\"docutils literal notranslate\">Windows ``an príomh-abairt do chlásal ``OVER</code>.</p>\n<p>Is é an argóint <code class=\"docutils literal notranslate\">léirithe</code> a: ref: feidhm fuinneog `&lt;window-functions&gt;, an:ref: `feidhm chomhiomlán, nó abairt atá comhoiriúnach i gclá &lt;aggregation-functions&gt;sal fuinneoige.</p>\n<p>The <code class=\"docutils literal notranslate\">partition_by</code> argument accepts an expression or a sequence of\nexpressions (column names should be wrapped in an <code class=\"docutils literal notranslate\">F</code>-object) that control\nthe partitioning of the rows. Partitioning narrows which rows are used to\ncompute the result set.</p>\n<p>Sonraítear an:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>output_field &lt;output-field&gt;`mar argóint nó leis an abairt.</p>\n<p>Glacann an argóint order_by` le abairt ar féidir leat glao:meth: ~django.db.models.expression.asc agus:meth: ~django.db.models.expression.desc, teaghrán ainm réimse (le réimír roghnach <code class=\"docutils literal notranslate\">” -&quot;</code> a léiríonn ord íslitheach), nó liosta teaghráin agus/nó nathanna. Rialaíonn an t-ordú an t-ord ina gcuirtear an abairt i bhfeidhm. Mar shampla, má chuireann tú suim thar na sraitheanna i ndeighilt, is é an chéad toradh luach an chéad shraith, is é an dara ceann suim den chéad agus an dara sraith.</p>\n<p>The <code class=\"docutils literal notranslate\">frame</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\">Frámaí</span></a> for details.</p>\n<p>Mar shampla, chun anótáil a dhéanamh ar gach scannán leis an meánrátáil do na scannáin ag an stiúideo céanna sa seánra agus sa bhliain scaoilte céanna:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Avg<span class=\"p\">,</span> F<span class=\"p\">,</span> Window\n<span class=\"gp\">&gt;&gt;&gt; </span>Movie<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    avg_rating<span class=\"o\">=</span>Window<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        expression<span class=\"o\">=</span>Avg<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        partition_by<span class=\"o\">=</span><span class=\"p\">[</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        order_by<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>Ligeann sé seo duit seiceáil an bhfuil scannán a rátáil níos fearr nó níos measa ná a phiaraí.</p>\n<p>B'fhéidir gur mhaith leat nathanna iolracha a chur i bhfeidhm thar an bhfuinneog chéanna, ie, an deighilt agus an fráma céanna. Mar shampla, d'fhéadfá an sampla roimhe seo a mhodhnú chun an rátáil is fearr agus is measa a áireamh i ngrúpa gach scannáin (an stiúideo céanna, an seánra agus an bhliain scaoilte céanna) trí fheidhm fuinneoige a úsáid san fhiosrú céanna. Baintear an deighilt agus an t-ordú ón sampla roimhe seo isteach i bhfoclóir chun athrá a laghdú:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Avg<span class=\"p\">,</span> F<span class=\"p\">,</span> Max<span class=\"p\">,</span> Min<span class=\"p\">,</span> Window\n<span class=\"gp\">&gt;&gt;&gt; </span>window <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>F<span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> F<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>Movie<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    avg_rating<span class=\"o\">=</span>Window<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        expression<span class=\"o\">=</span>Avg<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"o\">**</span>window<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    best<span class=\"o\">=</span>Window<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        expression<span class=\"o\">=</span>Max<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"o\">**</span>window<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span>    worst<span class=\"o\">=</span>Window<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        expression<span class=\"o\">=</span>Min<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"o\">**</span>window<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>Tacaítear le scagadh i gcoinne feidhmeanna fuinneoige chomh fada agus nach bhfuil cuardaigh díghníomhach (gan úsáid OR` nó <code class=\"docutils literal notranslate\">XOR</code> mar chónascaire) agus i gcoinne tacar cheisteanna a dhéanann comhiomlánú.</p>\n<p>Mar shampla, ní thacaítear le ceist a bhraitheann ar chomhiomlánú agus a bhfuil scagaire <code class=\"docutils literal notranslate\">Or</code> -ED aige i gcoinne feidhm fuinneoige agus réimse. D'fhéadfadh go gcuirfí sraitheanna a eisiamh ó ghrúpaí de ghnáth a chur san áireamh iar-chomhiomlánú réamhchóga comhcheang</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>qs <span class=\"o\">=</span> Movie<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    category_rank<span class=\"o\">=</span>Window<span class=\"p\">(</span>Rank<span class=\"p\">(),</span> partition_by<span class=\"o\">=</span><span class=\"s2\">&quot;category&quot;</span><span class=\"p\">,</span> order_by<span class=\"o\">=</span><span class=\"s2\">&quot;-rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    scenes_count<span class=\"o\">=</span>Count<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>filter<span class=\"p\">(</span>Q<span class=\"p\">(</span>category_rank__lte<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">|</span> Q<span class=\"p\">(</span>title__contains<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>qs<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>I measc cúltaca bunachar sonraí ionsuite Django, tacaíonn MySQL, PostgreSQL, agus Oracle nathanna fuinneoige. Athraíonn tacaíocht do ghnéithe éagsúla léirithe fuinneoige i measc na mbun Mar shampla, ní fhéadfar tacú leis na roghanna in:meth: ~Django.db.Models.Expression.asc agus:meth: ~Django.db.Models.Expression.desc. Téigh i gcomhairle leis na cáipéisíocht do do bhunachar sonraí</p>\n<section id=\"frames\">\n<span id=\"window-frames\"></span><h4>Frámaí<a class=\"heading-anchor\" href=\"#frames\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Maidir le fráma fuinneoige, is féidir leat seicheamh sraitheanna bunaithe ar raon nó gnáthseicheamh sraitheanna a roghnú.</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\">class</span> </em><span class=\"sig-name descname\">ValueRange</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">start<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">end<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">exclusion<span class=\"o\">=</span><span class=\"default_value\">None</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\">frame_type</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>Tá an tréith seo socraithe go <code class=\"docutils literal notranslate\">'RANGE</code>.</p>\n</dd></dl>\n\n<p>Tá tacaíocht theoranta ag PostgreSQL do ValueRange` agus ní thacaíonn sé ach le húsáid na bpointí tosaigh agus deiridh caighdeánacha, mar shampla <code class=\"docutils literal notranslate\">CURRENT ROW</code> agus <code class=\"docutils literal notranslate\">UNBOUNDED FOLLOWING</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\">class</span> </em><span class=\"sig-name descname\">RowRange</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">start<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">end<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">exclusion<span class=\"o\">=</span><span class=\"default_value\">None</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\">frame_type</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>Tá an tréith seo socraithe go <code class=\"docutils literal notranslate\">'ROWS'</code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Tugann an dá rang SQL ar ais leis an teimpléad:</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>frame_type<span class=\"p\">)</span>s <span class=\"k\">BETWEEN</span> <span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">start</span><span class=\"p\">)</span>s <span class=\"k\">AND</span> <span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">end</span><span class=\"p\">)</span>s\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\">class</span> </em><span class=\"sig-name descname\">WindowFrameExclusion</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\">CURRENT_ROW</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\">GROUP</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\">TIES</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\">NO_OTHERS</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>Ceadaíonn an argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>eisiamh <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>sraitheanna (:attr: ~WindowFrameExclusion.current_row), grúpaí (:attr: ~WindowFrameExclusion.group), agus ceangail (:attr: ~WindowFrameExclusion.ties) a eisiamh ó na frámaí fuinneoige ar bhunachar sonraí tacaithe:</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>frame_type<span class=\"p\">)</span>s <span class=\"k\">BETWEEN</span> <span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">start</span><span class=\"p\">)</span>s <span class=\"k\">AND</span> <span class=\"o\">%</span><span class=\"p\">(</span><span class=\"k\">end</span><span class=\"p\">)</span>s EXCLUDE <span class=\"o\">%</span><span class=\"p\">(</span>exclusion<span class=\"p\">)</span>s\n</code></pre></div>\n<p>Cuimsíonn frámaí na sraitheanna a úsáidtear chun an toradh a ríomh. Aistríonn siad ó phointe tosaigh éigin go pointe deiridh sonraithe éigin. Is féidir frámaí a úsáid le deighiltí agus gan deighiltí, ach is minic gur smaoineamh maith é ordú na fuinneoige a shonrú chun toradh cinntitheach a chinntiú. I bhfráma, is é piaraí i bhfráma ina chéile le luach coibhéiseach, nó gach sraitheanna mura bhfuil clásal ordaithe i láthair.</p>\n<p>Is é an pointe tosaigh réamhshocraithe le haghaidh fráma ná <code class=\"docutils literal notranslate\">UNBOUNDED PRESEING</code> arb é an chéad tsraith den dheighilt. Cuirtear an pointe deiridh san áireamh go sainráite i gcónaí sa SQL a ghineann an ORM agus de réir réamhshocraithe é “FOLLOWING UNBOUNDED”. Cuimsíonn an fráma réamhshocraithe gach sraitheanna ón deighilt go dtí an tsraith deireanach sa tacar.</p>\n<p>Is iad na luachanna a nglactar leis do na hargóintí <code class=\"docutils literal notranslate\">tús ``agus ``deireadh</code> ná <code class=\"docutils literal notranslate\">None</code>, sláimhir, nó nialas. Mar thoradh ar shláimhir dhiúltach do <code class=\"docutils literal notranslate\">tosaithe</code> bíonn <code class=\"docutils literal notranslate\">N ROIMH ROIMH</code> mar thoradh ar <code class=\"docutils literal notranslate\">``None</code> ROIMH `ROIMH NEAMHTHEANNA`. I mód <code class=\"docutils literal notranslate\">ROWS`, is féidir sláimhir dhearfach a úsáid le haghaidh ``tús ``mar thoradh ar ``N FOLLOWING</code>. Glactar le sláimhreacha dearfacha le haghaidh <code class=\"docutils literal notranslate\">deireadh ``agus bíonn `N FOLLOWING</code> mar thoradh air. I mód <code class=\"docutils literal notranslate\">ROWS`, is féidir sláimhir dhiúltach a úsáid le haghaidh ``deireadh ``mar thoradh air sin ``N ROIMH</code>. Maidir le <code class=\"docutils literal notranslate\">tosa</code> agus <code class=\"docutils literal notranslate\">deireadh ``araon, fillfidh nialas ``CURRENT ROW</code>.</p>\n<p>Tá difríocht ann maidir leis an méid a chuimsíonn <code class=\"docutils literal notranslate\">CURRENT ROW</code>. Nuair a shonraítear i mód <code class=\"docutils literal notranslate\">ROWS`, tosaíonn nó críochnaíonn an fráma leis an tsraith reatha. Nuair a shonraítear i mód “RANGE”, tosaíonn nó críochnaíonn an fráma ag an gcéad piara nó an piara deireanach de réir an chlásal ordaithe. Dá bhrí sin, déanann `RANGE CURRENT ROW` measúnú ar an abairt do shraitheanna a bhfuil an luach céanna acu a shonraítear leis an ordú. Toisc go n-áirítear sa teimpléad na pointí ``tosaithe</code> agus <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>deireadh <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>araon, féadfar é seo a chur in iúl le:</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>ValueRange<span class=\"p\">(</span>start<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> end<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Má dhéantar cur síos ar “phiaraí” scannáin mar scannáin a d'eisigh an stiúideo céanna sa seánra céanna sa bhliain chéanna, déanann an sampla <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Rowrange` seo anótáil gach scannán le meán-rátáil dhá phiaraí roimhe seo agus beirt phiaraí scannáin seo a leanas:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Avg<span class=\"p\">,</span> F<span class=\"p\">,</span> RowRange<span class=\"p\">,</span> Window\n<span class=\"gp\">&gt;&gt;&gt; </span>Movie<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    avg_rating<span class=\"o\">=</span>Window<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        expression<span class=\"o\">=</span>Avg<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        partition_by<span class=\"o\">=</span><span class=\"p\">[</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        order_by<span class=\"o\">=</span><span class=\"s2\">&quot;released__year&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        frame<span class=\"o\">=</span>RowRange<span class=\"p\">(</span>start<span class=\"o\">=-</span><span class=\"mi\">2</span><span class=\"p\">,</span> end<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>Má thacaíonn an bunachar sonraí leis, is féidir leat na pointí tosaigh agus deiridh a shonrú bunaithe ar luachanna léirithe sa dheighilt. Má stóráil réimse <code class=\"docutils literal notranslate\">scaoil</code> den tsamhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Scannán <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>mhí scaoilte gach scannáin, déanann an sampla <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>ValueRange` seo anótáil gach scannán le meánrátáil piaraí scannáin a eisíodh idir dhá mhí dhéag roimh agus dhá mhí dhá tar éis gach scannán:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Avg<span class=\"p\">,</span> F<span class=\"p\">,</span> ValueRange<span class=\"p\">,</span> Window\n<span class=\"gp\">&gt;&gt;&gt; </span>Movie<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    avg_rating<span class=\"o\">=</span>Window<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        expression<span class=\"o\">=</span>Avg<span class=\"p\">(</span><span class=\"s2\">&quot;rating&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        partition_by<span class=\"o\">=</span><span class=\"p\">[</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;studio&quot;</span><span class=\"p\">),</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;genre&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        order_by<span class=\"o\">=</span><span class=\"s2\">&quot;released__year&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        frame<span class=\"o\">=</span>ValueRange<span class=\"p\">(</span>start<span class=\"o\">=-</span><span class=\"mi\">12</span><span class=\"p\">,</span> end<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>Eolas Teicniúil<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>Anseo thíos gheobhaidh tú sonraí feidhme teicniúla a d'fhéadfadh a bheith úsáideach d'údair leabharlainne Cuideoidh an API teicniúil agus na samplaí thíos le nathanna ceisteanna cineálacha a chruthú ar féidir leo an fheidhmiúlacht ionsuite a sholáthraíonn Django</p>\n<section id=\"expression-api\">\n<h3>API léiriú<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>Cuireann nathanna fiosrúcháin an: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>abairt fiosraithe API &lt;query-expression&gt;`i bhfeidhm, ach nochtann roinnt modhanna agus tréithe breise atá liostaithe thíos freisin. Caithfidh gach abairt fiosrúcháin a oidhreacht ó <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>Expression () <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>nó ó fho-aicme ábhartha.</p>\n<p>Nuair a fhilleann abairt fiosrúcháin abairt eile, tá sé freagrach as na modhanna cuí a ghlaoch ar an abairt fillte.</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\">class</span> </em><span class=\"sig-name descname\">Expression</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\">allowed_default</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>Insíonn sé le Django gur féidir an abairt seo a úsáid in:attr: Field.db_default. Réamhshocraithe go <code class=\"docutils literal notranslate\">False</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\">constraint_validation_compatible</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>Insíonn sé le Django gur féidir an abairt seo a úsáid le linn bailíochtú srianta. Ní mór ach abairt foinse amháin a bheith ag abhairtí le <code class=\"docutils literal notranslate\">restricint_validation_compatible</code> atá socraithe go <code class=\"docutils literal notranslate\">False</code>. Réamhshocraithe go <code class=\"docutils literal notranslate\">True</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\">contains_aggregate</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>Insíonn sé le Django go bhfuil comhiomlán sa abairt seo agus gur gá clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>GROUP BY <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a chur leis an gceist.</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\">contains_over_clause</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>Insíonn sé le Django go bhfuil a: aicme: ~Django.db.Models.Expressions.Window léiriú sa abairt seo. Úsáidtear é, mar shampla, chun nathanna feidhme fuinneoige a dhícheadú i gceisteanna a mhodhnóidh sonraí.</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\">filterable</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>Insíonn sé le Django gur féidir tagairt a thabhairt don abairt seo in:meth: .querySet.filter. Réamhshocraithe go <code class=\"docutils literal notranslate\">True</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\">window_compatible</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>Insíonn sé le Django gur féidir an abairt seo a úsáid mar an abairt foinse in:class: ~Django.db.Models.Expressions.Window. Réamhshocraithe go <code class=\"docutils literal notranslate\">False</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\">empty_result_set_value</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\">NotImplemented</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\">set_returning</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><aside class=\"version-note version-added\" data-version=\"5.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>Tells Django that this expression contains a set-returning function,\nenforcing subquery evaluation. It's used, for example, to allow some\nPostgres set-returning functions (e.g. <code class=\"docutils literal notranslate\">JSONB_PATH_QUERY</code>,\n<code class=\"docutils literal notranslate\">UNNEST</code>, etc.) to skip optimization and be properly evaluated when\nannotations spawn rows themselves. Defaults to <code class=\"docutils literal notranslate\">False</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\">allows_composite_expressions</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><aside class=\"version-note version-added\" data-version=\"5.2\" role=\"note\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>Tells Django that this expression allows composite expressions, for\nexample, to support <a class=\"reference internal\" href=\"/ga/6.0/topics/composite-primary-key/#cpk-and-database-functions\"><span class=\"std std-ref\">composite primary keys</span></a>. Defaults to <code class=\"docutils literal notranslate\">False</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\">resolve_expression</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">query<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">allow_joins<span class=\"o\">=</span><span class=\"default_value\">True</span></em>, <em class=\"sig-param\">reuse<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">summarize<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">for_save<span class=\"o\">=</span><span class=\"default_value\">False</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>Soláthraíonn sé deis aon réamhphróiseáil nó bailíochtú an abairt a dhéanamh sula gcuirtear é leis an bhfiosrú. Ní mór <code class=\"docutils literal notranslate\">resolve_expression () ``a ghlaoch freisin ar aon nathanna neadaithe. Ba chóir ``cóip () ``de ``féin</code> a thabhairt ar ais le haon claochlú riachtanach.</p>\n<p>Is é <code class=\"docutils literal notranslate\">fiosraithe</code> cur i bhfeidhm na ceisteanna cúltaca.</p>\n<p>Is boolean é allow_joins` a cheadaíonn nó a dhiúltaíonn úsáid comhpháirteanna sa cheist.</p>\n<p>Is sraith de chomhpháirteanna in-athúsáidte é <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>athúsáid` le haghaidh cásanna ilcheangailte.</p>\n<p>Is boolean é <code class=\"docutils literal notranslate\">achoimre ``a thugann comharthaíocht, nuair a dhéanann ``True</code>, gur ceist chomhiomlán críochfoirt é an cheist atá á ríomh.</p>\n<p>Is boolean é <code class=\"docutils literal notranslate\">for_save</code> a thugann comharthaíocht, nuair a dhéanann <code class=\"docutils literal notranslate\">True</code>, go bhfuil an ceist atá á fhorghníomhú ag déanamh cruthú nó nuashonrú.</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\">get_source_expressions</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>Tugann liosta ordaithe de nathanna istigh ar ais. Mar shampla:</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>Sum<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span>get_source_expressions<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\">set_source_expressions</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expressions</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>Tógann sé liosta nathanna agus stóráilíonn sé iad ionas gur féidir le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_source_expressions () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>iad a thabhairt ar ais.</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\">relabeled_clone</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">change_map</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>Tugann clón (cóip) de <code class=\"docutils literal notranslate\">féin</code> ar ais, le haon ainmneacha colún athlipéadaithe. Athainmnítear ainmneacha colún nuair a chruthaítear fo-cheisteanna. Ba chóir <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>relabeled_clone () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a ghlaoch freisin ar aon nathanna neadaithe agus a shannadh don chlón.</p>\n<p>Is foclóir é <code class=\"docutils literal notranslate\">change_map</code> a mhapáil sean-ainmneacha chuig ainmneacha nua.</p>\n<p>Sampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">relabeled_clone</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> change_map<span class=\"p\">):</span>\n    clone <span class=\"o\">=</span> copy<span class=\"o\">.</span>copy<span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n    clone<span class=\"o\">.</span>expression <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>expression<span class=\"o\">.</span>relabeled_clone<span class=\"p\">(</span>change_map<span class=\"p\">)</span>\n    <span class=\"k\">return</span> clone\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\">convert_value</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">value</em>, <em class=\"sig-param\">expression</em>, <em class=\"sig-param\">connection</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>Crúca a ligeann don abairt “luach” a chur i gcrích níos oiriúnaí.</p>\n<p>Tá <code class=\"docutils literal notranslate\">léirithe</code> mar an gcéanna le <code class=\"docutils literal notranslate\">féin</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\">get_group_by_cols</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\">get_group_by_cols()</code> should be called on any\nnested expressions. <code class=\"docutils literal notranslate\">F()</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\">asc</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">nulls_first<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">nulls_last<span class=\"o\">=</span><span class=\"default_value\">None</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>Filleann sé an abairt atá réidh le sórtáil in ord ardaitheach.</p>\n<p>Sainmhíníonn <code class=\"docutils literal notranslate\">nulls_first</code> agus <code class=\"docutils literal notranslate\">nulls_last</code> conas a shórtáiltear luachanna null. Féach:ref: using-f-to-sort-null-values mar shampla úsáid.</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\">desc</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">nulls_first<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">nulls_last<span class=\"o\">=</span><span class=\"default_value\">None</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>Filleann sé an abairt atá réidh le sórtáil in ord íslitheach.</p>\n<p>Sainmhíníonn <code class=\"docutils literal notranslate\">nulls_first</code> agus <code class=\"docutils literal notranslate\">nulls_last</code> conas a shórtáiltear luachanna null. Féach:ref: using-f-to-sort-null-values mar shampla úsáid.</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\">reverse_ordering</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\">self</code> with any modifications required to reverse the sort\norder within an <code class=\"docutils literal notranslate\">order_by</code> call. As an example, an expression\nimplementing <code class=\"docutils literal notranslate\">NULLS LAST</code> would change its value to be\n<code class=\"docutils literal notranslate\">NULLS FIRST</code>. Modifications are only required for expressions that\nimplement sort order like <code class=\"docutils literal notranslate\">OrderBy</code>. This method is called when\n<a class=\"reference internal\" href=\"/ga/6.0/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\">reverse()</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=\"id6\"></span><h3>Scríobh do chuid Nathanna Fiosrúcháin<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>Is féidir leat d'aicmí léirithe fiosrúcháin féin a scríobh a úsáideann nathanna fiosrúcháin eile agus is féidir leo comhtháthú leo. &lt;func-expressions&gt;Déanaimis céim trí shampla trí chur i bhfeidhm an fheidhm <code class=\"docutils literal notranslate\">COALESCE</code> SQL a scríobh, gan na nathanna ionsuite: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Func () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a úsáid.</p>\n<p>Sainmhínítear an fheidhm SQL COALESCE` mar liosta de cholúin nó luachanna a ghlacadh. Cuirfidh sé an chéad cholún nó an luach ar ais nach <code class=\"docutils literal notranslate\">NULL</code>.</p>\n<p>Tosóimid tríd an teimpléad atá le húsáid le haghaidh giniúint SQL agus modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>__init__ () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a shainiú chun roinnt tréithe a shocrú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Expression\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Coalesce</span><span class=\"p\">(</span>Expression<span class=\"p\">):</span>\n    template <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=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> expressions<span class=\"p\">,</span> output_field<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>output_field<span class=\"o\">=</span>output_field<span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span>expressions<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> expression <span class=\"ow\">in</span> expressions<span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span>expression<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> expression<span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>expressions <span class=\"o\">=</span> expressions\n</code></pre></div>\n<p>Déanaimid roinnt bailíochtú bunúsach ar na paraiméadair, lena n-áirítear 2 cholún nó luach ar a laghad a éileamh, agus a chinntiú gur nathanna iad Táimid ag iarraidh:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>output_field &lt;output-field&gt;`anseo ionas go mbeidh a fhios ag Django cén cineál réimse samhail chun an toradh deiridh a shannadh dó.</p>\n<p>Anois cuirimid an réamhphróiseáil agus bailíochtú i bhfeidhm. Ós rud é nach bhfuil aon cheann dár mbailíochtú féin againn ag an bpointe seo, tarmligimid chuig na nathanna neadaithe:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">resolve_expression</span><span class=\"p\">(</span>\n    <span class=\"bp\">self</span><span class=\"p\">,</span> query<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> allow_joins<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> reuse<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> summarize<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> for_save<span class=\"o\">=</span><span class=\"kc\">False</span>\n<span class=\"p\">):</span>\n    c <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>copy<span class=\"p\">()</span>\n    c<span class=\"o\">.</span>is_summary <span class=\"o\">=</span> summarize\n    <span class=\"k\">for</span> pos<span class=\"p\">,</span> expression <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span>expressions<span class=\"p\">):</span>\n        c<span class=\"o\">.</span>expressions<span class=\"p\">[</span>pos<span class=\"p\">]</span> <span class=\"o\">=</span> expression<span class=\"o\">.</span>resolve_expression<span class=\"p\">(</span>\n            query<span class=\"p\">,</span> allow_joins<span class=\"p\">,</span> reuse<span class=\"p\">,</span> summarize<span class=\"p\">,</span> for_save\n        <span class=\"p\">)</span>\n    <span class=\"k\">return</span> c\n</code></pre></div>\n<p>Ansin, scríobhaimid an modh atá freagrach as an SQL a ghiniúint:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">as_sql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> compiler<span class=\"p\">,</span> connection<span class=\"p\">,</span> template<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    sql_expressions<span class=\"p\">,</span> sql_params <span class=\"o\">=</span> <span class=\"p\">[],</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> expression <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span>expressions<span class=\"p\">:</span>\n        sql<span class=\"p\">,</span> params <span class=\"o\">=</span> compiler<span class=\"o\">.</span>compile<span class=\"p\">(</span>expression<span class=\"p\">)</span>\n        sql_expressions<span class=\"o\">.</span>append<span class=\"p\">(</span>sql<span class=\"p\">)</span>\n        sql_params<span class=\"o\">.</span>extend<span class=\"p\">(</span>params<span class=\"p\">)</span>\n    template <span class=\"o\">=</span> template <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span>template\n    data <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>join<span class=\"p\">(</span>sql_expressions<span class=\"p\">)}</span>\n    <span class=\"k\">return</span> template <span class=\"o\">%</span> data<span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span>sql_params<span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">as_oracle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> compiler<span class=\"p\">,</span> connection<span class=\"p\">):</span>\n    <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>as_sql<span class=\"p\">(</span>compiler<span class=\"p\">,</span> connection<span class=\"p\">,</span> template<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>Is féidir le modhanna <code class=\"docutils literal notranslate\">as_sql () ``tacú le hargóintí saincheaptha eochairfhocal, rud a ligeann do mhodhanna ``as_vendorname ()</code> sonraí a úsáidtear chun an teaghrán SQL a ghiniúint a shárú. Is fearr argóintí eochairfhocal <code class=\"docutils literal notranslate\">as_sql () ``a úsáid le haghaidh saincheaptha ná ``self</code> a athrú laistigh de mhodhanna as_vendorname ()` mar is féidir earráidí a bheith mar thoradh ar an dara ceann agus iad ag rith ar chúlpháirteanna éagsúla bunachar sonraí. Má bhíonn do rang ag brath ar thréithe ranga chun sonraí a shainiú, smaoinigh ar sháraitheanna a cheadú i do mhodh as_sql () `.</p>\n<p>Gineann muid an SQL do gach ceann de na “léirithe” tríd an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>compiler.compiler.compiler () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a úsáid, agus cuirimid an toradh in éineacht le camóga. Ansin líontar an teimpléad lenár sonraí agus cuirtear an SQL agus na paraiméadair ar ais.</p>\n<p>Tá cur i bhfeidhm saincheaptha sainmhínithe againn freisin atá sonrach don chúlcheann Oracle. Glaofar an fheidhm <code class=\"docutils literal notranslate\">as_oracle () ``in ionad ``as_sql ()</code> má tá cúltaca Oracle in úsáid.</p>\n<p>Faoi dheireadh, cuirimid an chuid eile de na modhanna i bhfeidhm a ligeann dár léiriú ceisteanna imirt go deas le nathanna ceisteanna eile:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">get_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>expressions\n\n\n<span class=\"k\">def</span> <span class=\"nf\">set_source_expressions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> expressions<span class=\"p\">):</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span>expressions <span class=\"o\">=</span> expressions\n</code></pre></div>\n<p>Feicfimid conas a oibríonn sé:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F<span class=\"p\">,</span> Value<span class=\"p\">,</span> CharField\n<span class=\"gp\">&gt;&gt;&gt; </span>qs <span class=\"o\">=</span> Company<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    tagline<span class=\"o\">=</span>Coalesce<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"p\">[</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;motto&quot;</span><span class=\"p\">),</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;ticker_name&quot;</span><span class=\"p\">),</span> F<span class=\"p\">(</span><span class=\"s2\">&quot;description&quot;</span><span class=\"p\">),</span> Value<span class=\"p\">(</span><span class=\"s2\">&quot;No Tagline&quot;</span><span class=\"p\">)],</span>\n<span class=\"gp\">... </span>        output_field<span class=\"o\">=</span>CharField<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> c <span class=\"ow\">in</span> qs<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>c<span class=\"o\">.</span>name<span class=\"p\">,</span> c<span class=\"o\">.</span>tagline<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>Instealladh SQL a sheachaint<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>Ós rud é go ndéantar argóintí eochairfhocal <code class=\"docutils literal notranslate\">Func</code> do __init__ () ``(``**extra_context`)`` (<code class=\"docutils literal notranslate\">**extra_context</code>) idirphóilte isteach sa teaghrán SQL seachas a rith mar pharaiméadair cheistiúcháin (áit a n-éalfadh an tiománaí bunachar sonraí iad), ní mór ionchur úsáideora neamhiontaofa iontu.</p>\n<p>Mar shampla, má sholáthraítear <code class=\"docutils literal notranslate\">foshraithe</code> ón úsáideoir, tá an fheidhm seo leochaileach do instealladh 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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Func\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Position</span><span class=\"p\">(</span>Func<span class=\"p\">):</span>\n    function <span class=\"o\">=</span> <span class=\"s2\">&quot;POSITION&quot;</span>\n    template <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=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> expression<span class=\"p\">,</span> substring<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>expression<span class=\"p\">,</span> substring<span class=\"o\">=</span>substring<span class=\"p\">)</span>\n</code></pre></div>\n<p>Gineann an fheidhm seo teaghrán SQL gan aon pharaiméadair. Ós rud é go gcuirtear <code class=\"docutils literal notranslate\">foshraithe</code> ar aghaidh chuig <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>super (). __init__ () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>mar argóint eochairfhocal, déantar é a idirphóladh isteach sa teaghrán SQL sula seoltar an cheist chuig an mbunachar sonraí.</p>\n<p>Seo athscríobh ceartaithe:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">Position</span><span class=\"p\">(</span>Func<span class=\"p\">):</span>\n    function <span class=\"o\">=</span> <span class=\"s2\">&quot;POSITION&quot;</span>\n    arg_joiner <span class=\"o\">=</span> <span class=\"s2\">&quot; IN &quot;</span>\n\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> expression<span class=\"p\">,</span> substring<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>substring<span class=\"p\">,</span> expression<span class=\"p\">)</span>\n</code></pre></div>\n<p>Le “foshraitheacht” a rith mar argóint seasaimh ina ionad sin, cuirfear ar aghaidh mar pharaiméadar san fhiosrúchán bunachar sonraí.</p>\n</section>\n</section>\n<section id=\"adding-support-in-third-party-database-backends\">\n<h3>Tacaíocht a chur i gcúltaca bunachar sonraí tríú<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>Má tá cúltaca bunachar sonraí á úsáid agat a úsáideann comhréir SQL difriúil le haghaidh feidhm áirithe, is féidir leat tacaíocht a chur leis trí mhoncaí modh nua a phaiteáil ar rang na feidhme.</p>\n<p>Abair go bhfuilimid ag scríobh cúltaca do Freastalaí SQL Microsoft a úsáideann an SQL <code class=\"docutils literal notranslate\">LEN</code> in ionad <code class=\"docutils literal notranslate\">LENGTH</code> don fheidhme:class: ~functions.LENGTH. Déanfaimid moncaí modh nua ar a dtugtar <code class=\"docutils literal notranslate\">as_sqlserver () ``a phaisteáil ar an rang ``Length</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=\"nn\">django.db.models.functions</span> <span class=\"kn\">import</span> Length\n\n\n<span class=\"k\">def</span> <span class=\"nf\">sqlserver_length</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> compiler<span class=\"p\">,</span> connection<span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>as_sql<span class=\"p\">(</span>compiler<span class=\"p\">,</span> connection<span class=\"p\">,</span> function<span class=\"o\">=</span><span class=\"s2\">&quot;LEN&quot;</span><span class=\"p\">)</span>\n\n\nLength<span class=\"o\">.</span>as_sqlserver <span class=\"o\">=</span> sqlserver_length\n</code></pre></div>\n<p>Is féidir leat an SQL a shaincheapadh freisin ag baint úsáide as an paraiméadar <code class=\"docutils literal notranslate\">teimpléad</code> de as_sql () `.</p>\n<p>Úsáidimid <code class=\"docutils literal notranslate\">as_sqlserver () ``toisc go bhfilleann ``django.db.connection.vendor</code> <code class=\"docutils literal notranslate\">sqlserver</code> don chúltaca.</p>\n<p>Is féidir le cúltaca tríú páirtí a gcuid feidhmeanna a chlárú i gcomhad <code class=\"docutils literal notranslate\">__init__.py</code> barr leibhéal an phacáiste cúltaca nó i gcomhad <code class=\"docutils literal notranslate\">expressions.py</code> barr leibhéal (nó pacáiste) a allmhairítear ón leibhéal barr <code class=\"docutils literal notranslate\">__init__.py</code>.</p>\n<p>&lt;django.apps.AppConfig.ready&gt;Maidir le tionscadail úsáideora atá ag iarraidh an cúltaca atá á úsáid acu a phaiseáil, ba chóir go mbeadh an cód seo i modh: meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>AppConfig.ready () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</section>\n</section>","rootId":"query-expressions","toc":[{"title":"Uimhrithíocht tacaithe","anchor":"supported-arithmetic","children":[]},{"title":"Réimse aschuir","anchor":"output-field","children":[]},{"title":"Roinnt samplaí","anchor":"some-examples","children":[]},{"title":"Nathanna tógtha","anchor":"built-in-expressions","children":[{"title":"Nathanna ``F () ``","anchor":"f-expressions","children":[{"title":"Ag sliseadh abairtí ``F () ``","anchor":"slicing-f-expressions","children":[]},{"title":"Coinníollacha rása a sheachaint ag baint úsáide as ``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":"Ag baint úsáide as ``F () ``i scagairí","anchor":"using-f-in-filters","children":[]},{"title":"Ag baint úsáide as ``F () ``le anótaí","anchor":"using-f-with-annotations","children":[]},{"title":"Ag baint úsáide as ``F () ``chun luachanna neall a shórtáil","anchor":"using-f-to-sort-null-values","children":[]},{"title":"Ag baint úsáide as ``F () ``le hoibríochtaí loighciúla","anchor":"using-f-with-logical-operations","children":[]}]},{"title":"Nathanna ``Func () ``","anchor":"func-expressions","children":[]},{"title":"Nathanna ``Comhiomlán () ``","anchor":"aggregate-expressions","children":[]},{"title":"Do Feidhmeanna Comhiomlánacha féin a","anchor":"creating-your-own-aggregate-functions","children":[]},{"title":"Nathanna ``Luach () ``","anchor":"value-expressions","children":[]},{"title":"Nathanna ``ExpressionWrapper () ``","anchor":"expressionwrapper-expressions","children":[]},{"title":"Nathanna coinníollach","anchor":"conditional-expressions","children":[]},{"title":"Nathanna ``Subquest () ``","anchor":"subquery-expressions","children":[{"title":"Tagairt do cholúin ón tacar ceisteanna seachtrach","anchor":"referencing-columns-from-the-outer-queryset","children":[]},{"title":"Focheisteanna a theorannú go colún amháin","anchor":"limiting-a-subquery-to-a-single-column","children":[]},{"title":"An fho-cheist a theorannú go sraith amháin","anchor":"limiting-the-subquery-to-a-single-row","children":[]},{"title":"Focheisteanna ``Tá ann () ``","anchor":"exists-subqueries","children":[]},{"title":"Scagadh ar nathanna Focheist () nó Existents () `","anchor":"filtering-on-a-subquery-or-exists-expressions","children":[]},{"title":"Ag baint úsáide as comhiomlánaithe laistigh de abairt ``Focheisteanna `","anchor":"using-aggregates-within-a-subquery-expression","children":[]}]},{"title":"Nathanna amh SQL","anchor":"raw-sql-expressions","children":[]},{"title":"Feidhmeanna fuinn","anchor":"window-functions","children":[{"title":"Frámaí","anchor":"frames","children":[]}]}]},{"title":"Eolas Teicniúil","anchor":"technical-information","children":[{"title":"API léiriú","anchor":"expression-api","children":[]},{"title":"Scríobh do chuid Nathanna Fiosrúcháin","anchor":"writing-your-own-query-expressions","children":[{"title":"Instealladh SQL a sheachaint","anchor":"avoiding-sql-injection","children":[]}]},{"title":"Tacaíocht a chur i gcúltaca bunachar sonraí tríú","anchor":"adding-support-in-third-party-database-backends","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Tagairt API","url":"/ga/6.0/ref/"},{"docname":"ref/models/index","title":"Samhla","url":"/ga/6.0/ref/models/"}],"prev":{"docname":"ref/models/lookups","title":"Tagairt API cuardaigh","url":"/ga/6.0/ref/models/lookups/"},"next":{"docname":"ref/models/conditional-expressions","title":"Nathanna Coinníollach","url":"/ga/6.0/ref/models/conditional-expressions/"},"formats":{"html":"/ga/6.0/ref/models/expressions/","markdown":"/ga/6.0/ref/models/expressions.md","json":"/ga/6.0/ref/models/expressions.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/models/expressions.txt","official":"https://docs.djangoproject.com/ga/6.0/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"]}