{"title":"Nathanna Coinníollach","version":"6.0","locale":"ga","docname":"ref/models/conditional-expressions","url":"/ga/6.0/ref/models/conditional-expressions/","canonical":"https://djangodocs.dev/ga/6.0/ref/models/conditional-expressions/","summary":"Conditional expressions let you use if... elif... else logic within filters, annotations, aggregations, and updates.","html":"<h1>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></h1>\n<p>Conditional expressions let you 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 within filters, annotations, aggregations, and updates. A\nconditional expression evaluates a series of conditions for each row of a table\nand returns the matching result expression. Conditional expressions can also be\ncombined and nested like other <a class=\"reference internal\" href=\"/ga/6.0/ref/models/expressions/\"><span class=\"doc\">expressions</span></a>.</p>\n<section id=\"the-conditional-expression-classes\">\n<h2>Na ranganna léirithe coinníollach<a class=\"heading-anchor\" href=\"#the-conditional-expression-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Beidh muid ag úsáid an tsamhail seo a leanas sna samplaí ina dhiaidh sin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> models\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Client</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    REGULAR <span class=\"o\">=</span> <span class=\"s2\">&quot;R&quot;</span>\n    GOLD <span class=\"o\">=</span> <span class=\"s2\">&quot;G&quot;</span>\n    PLATINUM <span class=\"o\">=</span> <span class=\"s2\">&quot;P&quot;</span>\n    ACCOUNT_TYPE_CHOICES <span class=\"o\">=</span> <span class=\"p\">{</span>\n        REGULAR<span class=\"p\">:</span> <span class=\"s2\">&quot;Regular&quot;</span><span class=\"p\">,</span>\n        GOLD<span class=\"p\">:</span> <span class=\"s2\">&quot;Gold&quot;</span><span class=\"p\">,</span>\n        PLATINUM<span class=\"p\">:</span> <span class=\"s2\">&quot;Platinum&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    registered_on <span class=\"o\">=</span> models<span class=\"o\">.</span>DateField<span class=\"p\">()</span>\n    account_type <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>\n        max_length<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        choices<span class=\"o\">=</span>ACCOUNT_TYPE_CHOICES<span class=\"p\">,</span>\n        default<span class=\"o\">=</span>REGULAR<span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"when\">\n<h3><code class=\"docutils literal notranslate\">Cén uaire</code><a class=\"heading-anchor\" href=\"#when\"><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.When\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">When</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">condition<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">then<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>lookups</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.When\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Úsáidtear réad <code class=\"docutils literal notranslate\">Nuair () ``chun coinníoll agus a thoradh a chumhdú le húsáid sa léiriú coinníollach. Tá réad ``When () ``a úsáid cosúil leis an modh: meth: `~django.db.models.query.queryset.filter` a úsáid. Is féidir an coinníoll a shonrú ag baint úsáidea:ref: `field lookups &lt;field-lookups&gt;`, :class: `~django.db.models.q` rudaí, nó: class: `~django.db.Models.Expression` rudaí a bhfuil ``output_field</code> atá a:class: ~django.db.models.booleanfield. Cuirtear an toradh ar fáil ag baint úsáide as an eochairfhocal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>then <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Roinnt samplaí:</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> Q<span class=\"p\">,</span> When\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># String arguments refer to fields; the following two examples are equivalent:</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">,</span> then<span class=\"o\">=</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">,</span> then<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># You can use field lookups in the condition</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    registered_on__gt<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    registered_on__lt<span class=\"o\">=</span>date<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    then<span class=\"o\">=</span><span class=\"s2\">&quot;account_type&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Complex conditions can be created using Q objects</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>Q<span class=\"p\">(</span>name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> Q<span class=\"p\">(</span>name__startswith<span class=\"o\">=</span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">),</span> then<span class=\"o\">=</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Condition can be created using boolean expressions.</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>non_unique_account_type <span class=\"o\">=</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        account_type<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;account_type&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"o\">.</span>exclude<span class=\"p\">(</span>pk<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>    <span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>Exists<span class=\"p\">(</span>non_unique_account_type<span class=\"p\">),</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;non unique&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Condition can be created using lookup expressions.</span>\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<span class=\"p\">,</span> LessThan\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    GreaterThan<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;registered_on&quot;</span><span class=\"p\">),</span> date<span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"gp\">... </span>    <span class=\"o\">&amp;</span> LessThan<span class=\"p\">(</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;registered_on&quot;</span><span class=\"p\">),</span> date<span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    then<span class=\"o\">=</span><span class=\"s2\">&quot;account_type&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Coinnigh i gcuimhne gur féidir le gach ceann de na luachanna seo a bheith ina léiriú.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Ós rud é go bhfuil an argóint eochairfhocal <code class=\"docutils literal notranslate\">an` curtha in áirithe do thoradh an ``When () ``, tá coinbhleacht féideartha ann má tá réimse darb ainm</code> ag a:class: ~django.db.models.model. Is féidir é seo a réiteach ar dhá bhealach:</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>When<span class=\"p\">(</span>then__exact<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> then<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>When<span class=\"p\">(</span>Q<span class=\"p\">(</span>then<span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">),</span> then<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"case\">\n<h3><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Cás ``<a class=\"heading-anchor\" href=\"#case\"><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.Case\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Case</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>cases</em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.Case\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Tá abairt <code class=\"docutils literal notranslate\">Cás () ``cosúil leis an:keyword: `if `... :keyword: `elif`... :keyword: ráiteas `else` i ``Python</code>. Déantar gach <code class=\"docutils literal notranslate\">coinníoll</code> sna rudaí <code class=\"docutils literal notranslate\">Nuair () ``curtha ar fáil a mheas in ord, go dtí go ndéanfaidh duine measúnú ar luach fírinneach. Cuirtear an abairt ``torth</code> ón réad meaitseála <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>When () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ar ais.</p>\n<p>Sampla:</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>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">datetime</span> <span class=\"kn\">import</span> date<span class=\"p\">,</span> timedelta\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> Case<span class=\"p\">,</span> Value<span class=\"p\">,</span> When\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Jane Doe&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>REGULAR<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    registered_on<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">36</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;James Smith&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    registered_on<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Jack Black&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">,</span>\n<span class=\"gp\">... </span>    registered_on<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"mi\">365</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get the discount for each Client based on the account type</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    discount<span class=\"o\">=</span>Case<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">,</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;5%&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">,</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;10%&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        default<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;0%&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values_list<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;discount&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jane Doe&#39;, &#39;0%&#39;), (&#39;James Smith&#39;, &#39;5%&#39;), (&#39;Jack Black&#39;, &#39;10%&#39;)]&gt;</span>\n</code></pre></div>\n<p>Glacann <code class=\"docutils literal notranslate\">Cás () ``le haon líon de chrudaí ``Nuair ()</code> mar argóintí aonair. Cuirtear roghanna eile ar fáil trí argóintí eochairfhocal Mura ndéanann aon cheann de na coinníollacha measúnú ar <code class=\"docutils literal notranslate\">TRUE</code>, ansin cuirtear an abairt a thugtar leis an argóint eochairfhocal <code class=\"docutils literal notranslate\">réamhshocraithe</code> ar ais. Mura gcuirtear argóint <code class=\"docutils literal notranslate\">réamhshocraithe</code> ar fáil, úsáidtear <code class=\"docutils literal notranslate\">None</code>.</p>\n<p>Dá mbeimis ag iarraidh ár bhfiosrú roimhe seo a athrú chun an lascaine a fháil bunaithe ar cé chomh fada agus a bhí an <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Cliant <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>linn, d'fhéadfaimis é sin a dhéanamh ag baint úsáide as cuardaigh:</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>a_month_ago <span class=\"o\">=</span> date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>a_year_ago <span class=\"o\">=</span> date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get the discount for each Client based on the registration date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    discount<span class=\"o\">=</span>Case<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>registered_on__lte<span class=\"o\">=</span>a_year_ago<span class=\"p\">,</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;10%&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>registered_on__lte<span class=\"o\">=</span>a_month_ago<span class=\"p\">,</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;5%&quot;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        default<span class=\"o\">=</span>Value<span class=\"p\">(</span><span class=\"s2\">&quot;0%&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values_list<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;discount&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jane Doe&#39;, &#39;5%&#39;), (&#39;James Smith&#39;, &#39;0%&#39;), (&#39;Jack Black&#39;, &#39;10%&#39;)]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Cuimhnigh go ndéantar na coinníollacha a mheas in ord, mar sin sa sampla thuas faighimid an toradh ceart cé go n-oireann an dara coinníoll le Jane Doe agus Jack Black araon. Oibríonn sé seo díreach cosúil leis an:keyword: if `... :keyword: `elif... :keyword: ráiteas else i <code class=\"docutils literal notranslate\">Python</code>.</p>\n</aside>\n<p>Oibríonn <code class=\"docutils literal notranslate\">Cás () ``freisin i gclásal ``scagaire ()</code>. Mar shampla, chun cliaint óir a chláraigh níos mó ná mí ó shin agus cliaint platanam a chláraigh níos mó ná bliain ó shin a fháil:</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>a_month_ago <span class=\"o\">=</span> date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>a_year_ago <span class=\"o\">=</span> date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    registered_on__lte<span class=\"o\">=</span>Case<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">,</span> then<span class=\"o\">=</span>a_month_ago<span class=\"p\">),</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">,</span> then<span class=\"o\">=</span>a_year_ago<span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span>values_list<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;account_type&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jack Black&#39;, &#39;P&#39;)]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"advanced-queries\">\n<h2>Fiosruithe chun cinn<a class=\"heading-anchor\" href=\"#advanced-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is féidir nathanna coinníollach a úsáid in anótaí, comhiomlánaithe, scagairí, cuardaigh agus nuashonruithe. Is féidir iad a chomhcheangal agus a neadú le nathanna eile freisin. Ligeann sé seo duit ceisteanna coinníollacha cumhachtacha a dhéanamh.</p>\n<section id=\"conditional-update\">\n<h3>Nuashonrú coinníoll<a class=\"heading-anchor\" href=\"#conditional-update\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Abair go dteastaíonn uainn an account_type` a athrú chun dátaí cláraithe a mheaitseáil dátaí cláraithe. Is féidir linn é seo a dhéanamh ag baint úsáide as abairt choinníollach agus an modh:meth: ~django.db.models.query.queryset.update:</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>a_month_ago <span class=\"o\">=</span> date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>a_year_ago <span class=\"o\">=</span> date<span class=\"o\">.</span>today<span class=\"p\">()</span> <span class=\"o\">-</span> timedelta<span class=\"p\">(</span>days<span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Update the account_type for each Client from the registration date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>update<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    account_type<span class=\"o\">=</span>Case<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>registered_on__lte<span class=\"o\">=</span>a_year_ago<span class=\"p\">,</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        When<span class=\"p\">(</span>registered_on__lte<span class=\"o\">=</span>a_month_ago<span class=\"p\">,</span> then<span class=\"o\">=</span>Value<span class=\"p\">(</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        default<span class=\"o\">=</span>Value<span class=\"p\">(</span>Client<span class=\"o\">.</span>REGULAR<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>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>values_list<span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;account_type&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jane Doe&#39;, &#39;G&#39;), (&#39;James Smith&#39;, &#39;R&#39;), (&#39;Jack Black&#39;, &#39;P&#39;)]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"conditional-aggregation\">\n<span id=\"id1\"></span><h3>Comhiomlánú coinníollach<a class=\"heading-anchor\" href=\"#conditional-aggregation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cad a tharlaíonn más mian linn a fháil amach cé mhéad cliant atá ann do gach <code class=\"docutils literal notranslate\">account_type</code>? &lt;aggregation-functions&gt;Is féidir linn an argóint <code class=\"docutils literal notranslate\">scagair</code> de:ref: feidhmeanna comhiomlána` a úsáid chun é seo a bhaint amach:</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\"># Create some more Clients first so we can have something to count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Jean Grey&quot;</span><span class=\"p\">,</span> account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>REGULAR<span class=\"p\">,</span> registered_on<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;James Bond&quot;</span><span class=\"p\">,</span> account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">,</span> registered_on<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    name<span class=\"o\">=</span><span class=\"s2\">&quot;Jane Porter&quot;</span><span class=\"p\">,</span> account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">,</span> registered_on<span class=\"o\">=</span>date<span class=\"o\">.</span>today<span class=\"p\">()</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get counts for each value of account_type</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> Count\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    regular<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span>Q<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>REGULAR<span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    gold<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span>Q<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>GOLD<span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    platinum<span class=\"o\">=</span>Count<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span>Q<span class=\"p\">(</span>account_type<span class=\"o\">=</span>Client<span class=\"o\">.</span>PLATINUM<span class=\"p\">)),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;regular&#39;: 2, &#39;gold&#39;: 1, &#39;platinum&#39;: 3}</span>\n</code></pre></div>\n<p>Táirgeann an comhiomlán seo ceist leis an gcomhréir SQL 2003 <code class=\"docutils literal notranslate\">FILTER WHERE</code> ar bhunachair sonraí a thacaíonn leis:</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=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span> FILTER <span class=\"p\">(</span><span class=\"k\">WHERE</span> account_type<span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"k\">as</span> regular<span class=\"p\">,</span>\n       <span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span> FILTER <span class=\"p\">(</span><span class=\"k\">WHERE</span> account_type<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"k\">as</span> gold<span class=\"p\">,</span>\n       <span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span> FILTER <span class=\"p\">(</span><span class=\"k\">WHERE</span> account_type<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"k\">as</span> platinum\n<span class=\"k\">FROM</span> clients<span class=\"p\">;</span>\n</code></pre></div>\n<p>Ar bhunachair sonraí eile, déantar aithris a dhéanamh air seo ag baint úsáide as ráiteas <code class=\"docutils literal notranslate\">CÁISE</code>:</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=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span> <span class=\"k\">WHEN</span> account_type<span class=\"o\">=</span><span class=\"mi\">1</span> <span class=\"k\">THEN</span> id <span class=\"k\">ELSE</span> <span class=\"k\">null</span><span class=\"p\">)</span> <span class=\"k\">as</span> regular<span class=\"p\">,</span>\n       <span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span> <span class=\"k\">WHEN</span> account_type<span class=\"o\">=</span><span class=\"mi\">2</span> <span class=\"k\">THEN</span> id <span class=\"k\">ELSE</span> <span class=\"k\">null</span><span class=\"p\">)</span> <span class=\"k\">as</span> gold<span class=\"p\">,</span>\n       <span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span> <span class=\"k\">WHEN</span> account_type<span class=\"o\">=</span><span class=\"mi\">3</span> <span class=\"k\">THEN</span> id <span class=\"k\">ELSE</span> <span class=\"k\">null</span><span class=\"p\">)</span> <span class=\"k\">as</span> platinum\n<span class=\"k\">FROM</span> clients<span class=\"p\">;</span>\n</code></pre></div>\n<p>Tá an dá ráiteas SQL coibhéiseach go feidhmiúil ach b'fhéidir go bhfeidhmeoidh an FILTER` níos follasaí feidhmiú níos fearr.</p>\n</section>\n<section id=\"conditional-filter\">\n<h3>Scagaire coinníollach<a class=\"heading-anchor\" href=\"#conditional-filter\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nuair a thugann abairt choinníollach luach boolean ar ais, is féidir é a úsáid go díreach i scagairí. Ciallaíonn sé seo nach gcuirfear é leis na colúin <code class=\"docutils literal notranslate\">SELECT</code>, ach is féidir leat é a úsáid fós chun torthaí a scagadh:</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>non_unique_account_type <span class=\"o\">=</span> <span class=\"p\">(</span>\n<span class=\"gp\">... </span>    Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        account_type<span class=\"o\">=</span>OuterRef<span class=\"p\">(</span><span class=\"s2\">&quot;account_type&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"o\">.</span>exclude<span class=\"p\">(</span>pk<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>    <span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;pk&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Client<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span><span class=\"o\">~</span>Exists<span class=\"p\">(</span>non_unique_account_type<span class=\"p\">))</span>\n</code></pre></div>\n<p>I dtéarmaí SQL, déanann sé meastóireacht ar:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span> <span class=\"p\">...</span>\n<span class=\"k\">FROM</span> client c0\n<span class=\"k\">WHERE</span> <span class=\"k\">NOT</span> <span class=\"k\">EXISTS</span> <span class=\"p\">(</span>\n  <span class=\"k\">SELECT</span> c1<span class=\"p\">.</span>id\n  <span class=\"k\">FROM</span> client c1\n  <span class=\"k\">WHERE</span> c1<span class=\"p\">.</span>account_type <span class=\"o\">=</span> c0<span class=\"p\">.</span>account_type <span class=\"k\">AND</span> <span class=\"k\">NOT</span> c1<span class=\"p\">.</span>id <span class=\"o\">=</span> c0<span class=\"p\">.</span>id\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>","rootId":"conditional-expressions","toc":[{"title":"Na ranganna léirithe coinníollach","anchor":"the-conditional-expression-classes","children":[{"title":"Cén uaire","anchor":"when","children":[]},{"title":"``Cás ``","anchor":"case","children":[]}]},{"title":"Fiosruithe chun cinn","anchor":"advanced-queries","children":[{"title":"Nuashonrú coinníoll","anchor":"conditional-update","children":[]},{"title":"Comhiomlánú coinníollach","anchor":"conditional-aggregation","children":[]},{"title":"Scagaire coinníollach","anchor":"conditional-filter","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/expressions","title":"Nathanna ceisteanna","url":"/ga/6.0/ref/models/expressions/"},"next":{"docname":"ref/models/database-functions","title":"Feidhmeanna Sonraí","url":"/ga/6.0/ref/models/database-functions/"},"formats":{"html":"/ga/6.0/ref/models/conditional-expressions/","markdown":"/ga/6.0/ref/models/conditional-expressions.md","json":"/ga/6.0/ref/models/conditional-expressions.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/models/conditional-expressions.txt","official":"https://docs.djangoproject.com/ga/6.0/ref/models/conditional-expressions/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}