{"title":"Pernyataan Bersyarat","version":"3.1","locale":"id","docname":"ref/models/conditional-expressions","url":"/id/3.1/ref/models/conditional-expressions/","canonical":"https://djangodocs.dev/id/3.1/ref/models/conditional-expressions/","summary":"Conditional expressions let you use if ... elif ... else logic within filters, annotations, aggregations, and updates. A conditional expression evaluates a series…","html":"<h1>Pernyataan Bersyarat<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=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> ... <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> ...\n<a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> logic within filters, annotations, aggregations, and updates. A\nconditional expression evaluates a series of conditions for each row of a\ntable and returns the matching result expression. Conditional expressions can\nalso be combined and nested like other <a class=\"reference internal\" href=\"/id/3.1/ref/models/expressions/\"><span class=\"doc\">expressions</span></a>.</p>\n<section id=\"the-conditional-expression-classes\">\n<h2>Kelas-kelas pernyataan bersyarat<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>Kami akan menggunakan model berikut dalam contoh selanjutnya:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Client</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">REGULAR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;R&#39;</span>\n    <span class=\"n\">GOLD</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;G&#39;</span>\n    <span class=\"n\">PLATINUM</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;P&#39;</span>\n    <span class=\"n\">ACCOUNT_TYPE_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Regular&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Gold&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Platinum&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">registered_on</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">account_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ACCOUNT_TYPE_CHOICES</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"when\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">When</span></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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">When</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">condition</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">then</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">lookups</span></span></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>A <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> object is used to encapsulate a condition and its result for use\nin the conditional expression. Using a <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> object is similar to using\nthe <a class=\"reference internal\" href=\"/id/3.1/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a> method. The condition can\nbe specified using <a class=\"reference internal\" href=\"/id/3.1/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">field lookups</span></a>,\n<a class=\"reference internal\" href=\"/id/3.1/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a> objects, or <a class=\"reference internal\" href=\"/id/3.1/ref/models/expressions/#django.db.models.Expression\" title=\"django.db.models.Expression\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Expression</span></code></a>\nobjects that have an <code class=\"docutils literal notranslate\"><span class=\"pre\">output_field</span></code> that is a\n<a class=\"reference internal\" href=\"/id/3.1/ref/models/fields/#django.db.models.BooleanField\" title=\"django.db.models.BooleanField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BooleanField</span></code></a>. The result is provided using the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">then</span></code> keyword.</p>\n<aside class=\"version-note version-changed\" data-version=\"3.0\">\n<p class=\"version-note-title\">Changed in Django 3.0</p><p>Support for boolean <a class=\"reference internal\" href=\"/id/3.1/ref/models/expressions/#django.db.models.Expression\" title=\"django.db.models.Expression\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Expression</span></code></a> was added.</p>\n</aside>\n<p>Beberapa contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">Q</span><span class=\"p\">,</span> <span class=\"n\">When</span>\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><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</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=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__gt</span><span class=\"o\">=</span><span class=\"n\">date</span><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=\"n\">registered_on__lt</span><span class=\"o\">=</span><span class=\"n\">date</span><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>     <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"s1\">&#39;account_type&#39;</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><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>     <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"s1\">&#39;name&#39;</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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Exists</span><span class=\"p\">,</span> <span class=\"n\">OuterRef</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">non_unique_account_type</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s1\">&#39;account_type&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">Exists</span><span class=\"p\">(</span><span class=\"n\">non_unique_account_type</span><span class=\"p\">),</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;non unique&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Mengingat bahwa setiap nilai-nilai ini dapat berupa sebuah pernyataan.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>Since the <code class=\"docutils literal notranslate\"><span class=\"pre\">then</span></code> keyword argument is reserved for the result of the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code>, there is a potential conflict if a\n<a class=\"reference internal\" href=\"/id/3.1/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Model</span></code></a> has a field named <code class=\"docutils literal notranslate\"><span class=\"pre\">then</span></code>. This can be\nresolved in two ways:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">then__exact</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">then</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">then</span><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><code class=\"docutils literal notranslate\"><span class=\"pre\">Case</span></code><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\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Case</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">cases</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.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>A <code class=\"docutils literal notranslate\"><span class=\"pre\">Case()</span></code> expression is like the <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#if\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> ... <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> ...\n<a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> statement in <code class=\"docutils literal notranslate\"><span class=\"pre\">Python</span></code>. Each <code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code> in the provided\n<code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> objects is evaluated in order, until one evaluates to a\ntruthful value. The <code class=\"docutils literal notranslate\"><span class=\"pre\">result</span></code> expression from the matching <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> object\nis returned.</p>\n<p>Sebuah contoh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span><span class=\"p\">,</span> <span class=\"n\">timedelta</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Case</span><span class=\"p\">,</span> <span class=\"n\">CharField</span><span class=\"p\">,</span> <span class=\"n\">Value</span><span class=\"p\">,</span> <span class=\"n\">When</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jane Doe&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">36</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;James Smith&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jack Black&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">10</span> <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 account type</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">discount</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;5%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;10%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;0%&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">CharField</span><span class=\"p\">(),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;discount&#39;</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><code class=\"docutils literal notranslate\"><span class=\"pre\">Case()</span></code> accepts any number of <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> objects as individual arguments.\nOther options are provided using keyword arguments. If none of the conditions\nevaluate to <code class=\"docutils literal notranslate\"><span class=\"pre\">TRUE</span></code>, then the expression given with the <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> keyword\nargument is returned. If a <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> argument isn't provided, <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> is\nused.</p>\n<p>If we wanted to change our previous query to get the discount based on how long\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> has been with us, we could do so using lookups:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_month_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_year_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">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><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">discount</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_year_ago</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;10%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_month_ago</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;5%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;0%&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">CharField</span><span class=\"p\">(),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;discount&#39;</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\">Catatan</p>\n<p>Remember that the conditions are evaluated in order, so in the above\nexample we get the correct result even though the second condition matches\nboth Jane Doe and Jack Black. This works just like an <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#if\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> ...\n<a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> ... <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(di Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> statement in <code class=\"docutils literal notranslate\"><span class=\"pre\">Python</span></code>.</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Case()</span></code> also works in a <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code> clause. For example, to find gold\nclients that registered more than a month ago and platinum clients that\nregistered more than a year ago:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_month_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_year_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">a_month_ago</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">a_year_ago</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><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;account_type&#39;</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>Permintaan lanjutan<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>Conditional expressions can be used in annotations, aggregations, filters,\nlookups, and updates. They can also be combined and nested with other\nexpressions. This allows you to make powerful conditional queries.</p>\n<section id=\"conditional-update\">\n<h3>Pembaharuan bersyarat<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>Let's say we want to change the <code class=\"docutils literal notranslate\"><span class=\"pre\">account_type</span></code> for our clients to match\ntheir registration dates. We can do this using a conditional expression and the\n<a class=\"reference internal\" href=\"/id/3.1/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">update()</span></code></a> method:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_month_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_year_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">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><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_year_ago</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>             <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_month_ago</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>             <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;account_type&#39;</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>Pengumpulan bersyarat<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>What if we want to find out how many clients there are for each\n<code class=\"docutils literal notranslate\"><span class=\"pre\">account_type</span></code>? We can use the <code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> argument of <a class=\"reference internal\" href=\"/id/3.1/ref/models/querysets/#aggregation-functions\"><span class=\"std std-ref\">aggregate\nfunctions</span></a> to achieve this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Create some more Clients first so we can have something to count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jean Grey&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;James Bond&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jane Porter&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"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=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">regular</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">gold</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">platinum</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><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>This aggregate produces a query with the SQL 2003 <code class=\"docutils literal notranslate\"><span class=\"pre\">FILTER</span> <span class=\"pre\">WHERE</span></code> syntax\non databases that support it:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">FILTER</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">regular</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">FILTER</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">gold</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">FILTER</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">platinum</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">clients</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Pada basisdata lain, ini ditiru menggunakan pernyataan <code class=\"docutils literal notranslate\"><span class=\"pre\">CASE</span></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=\"w\"> </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">regular</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">gold</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">platinum</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">clients</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Dua pernyataan SQL secara kegunaan adalah setara tetapi lebih jelas <code class=\"docutils literal notranslate\"><span class=\"pre\">FILTER</span></code> melakukan lebih baik.</p>\n</section>\n<section id=\"conditional-filter\">\n<h3>Conditional filter<a class=\"heading-anchor\" href=\"#conditional-filter\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"version-note version-added\" data-version=\"3.0\">\n<p class=\"version-note-title\">New in Django 3.0</p></aside>\n<p>When a conditional expression returns a boolean value, it is possible to use it\ndirectly in filters. This means that it will not be added to the <code class=\"docutils literal notranslate\"><span class=\"pre\">SELECT</span></code>\ncolumns, but you can still use it to filter results:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">non_unique_account_type</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s1\">&#39;account_type&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">OuterRef</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"o\">~</span><span class=\"n\">Exists</span><span class=\"p\">(</span><span class=\"n\">non_unique_account_type</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>In SQL terms, that evaluates to:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">client</span><span class=\"w\"> </span><span class=\"n\">c0</span>\n<span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"k\">EXISTS</span><span class=\"w\"> </span><span class=\"p\">(</span>\n<span class=\"w\">  </span><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"n\">c1</span><span class=\"p\">.</span><span class=\"n\">id</span>\n<span class=\"w\">  </span><span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">client</span><span class=\"w\"> </span><span class=\"n\">c1</span>\n<span class=\"w\">  </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">c1</span><span class=\"p\">.</span><span class=\"n\">account_type</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">c0</span><span class=\"p\">.</span><span class=\"n\">account_type</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"k\">NOT</span><span class=\"w\"> </span><span class=\"n\">c1</span><span class=\"p\">.</span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">c0</span><span class=\"p\">.</span><span class=\"n\">id</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>","rootId":"conditional-expressions","toc":[{"title":"Kelas-kelas pernyataan bersyarat","anchor":"the-conditional-expression-classes","children":[{"title":"When","anchor":"when","children":[]},{"title":"Case","anchor":"case","children":[]}]},{"title":"Permintaan lanjutan","anchor":"advanced-queries","children":[{"title":"Pembaharuan bersyarat","anchor":"conditional-update","children":[]},{"title":"Pengumpulan bersyarat","anchor":"conditional-aggregation","children":[]},{"title":"Conditional filter","anchor":"conditional-filter","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/3.1/ref/"},{"docname":"ref/models/index","title":"Model","url":"/id/3.1/ref/models/"}],"prev":{"docname":"ref/models/expressions","title":"Pernyataan Permintaan","url":"/id/3.1/ref/models/expressions/"},"next":{"docname":"ref/models/database-functions","title":"Fungsi Basisdata","url":"/id/3.1/ref/models/database-functions/"},"formats":{"html":"/id/3.1/ref/models/conditional-expressions/","markdown":"/id/3.1/ref/models/conditional-expressions.md","json":"/id/3.1/ref/models/conditional-expressions.json"},"source":"https://github.com/django/django/blob/stable/3.1.x/docs/ref/models/conditional-expressions.txt","official":"https://docs.djangoproject.com/id/3.1/ref/models/conditional-expressions/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}