{"title":"Conas cuardaigh saincheaptha a scríobh","version":"6.0","locale":"ga","docname":"howto/custom-lookups","url":"/ga/6.0/howto/custom-lookups/","canonical":"https://djangodocs.dev/ga/6.0/howto/custom-lookups/","summary":"Cuireann Django <field-lookups>réimse leathan de: ref: cuardaigh ionsuite `ar fáil le haghaidh scagadh (mar shampla, ``cruth` agus `` icontains`). Míníonn an…","html":"<h1>Conas cuardaigh saincheaptha a scríobh<a class=\"heading-anchor\" href=\"#how-to-write-custom-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Cuireann Django &lt;field-lookups&gt;réimse leathan de: ref: cuardaigh ionsuite `ar fáil le haghaidh scagadh (mar shampla, ``cruth` agus <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>icontains`). Míníonn an doiciméadú seo conas cuardaigh saincheaptha a scríobh agus conas obair na gcuardaigh atá ann cheana a athrú. Le haghaidh tagairtí API de chuardaigh, féach an:doc: /ref/models/lookups.</p>\n<section id=\"a-lookup-example\">\n<h2>Sampla cuardaigh<a class=\"heading-anchor\" href=\"#a-lookup-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tosaímid le cuardach beag saincheaptha. Scríobhfaimid cuardach saincheaptha <code class=\"docutils literal notranslate\"><span class=\"pre\">ne</span></code> a oibríonn os coinne <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>cruinn `. Aistreoidh <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>Author.Objects.Filter (name__ne='Jack') <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>go dtí an SQL:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"ss\">&quot;author&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;name&quot;</span><span class=\"w\"> </span><span class=\"o\">&lt;&gt;</span><span class=\"w\"> </span><span class=\"s1\">&#39;Jack&#39;</span>\n</code></pre></div>\n<p>Tá an SQL seo neamhspleách ar chúltaca, mar sin ní gá dúinn a bheith buartha faoi bhunachair sonraí éagsúla.</p>\n<p>Tá dhá chéim ann chun an obair seo a dhéanamh. Ar dtús ní mór dúinn an cuardach a chur i bhfeidhm, ansin ní mór dúinn a insint do Django faoi:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Lookup</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">NotEqual</span><span class=\"p\">(</span><span class=\"n\">Lookup</span><span class=\"p\">):</span>\n    <span class=\"n\">lookup_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ne&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_sql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">):</span>\n        <span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">lhs_params</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process_lhs</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">)</span>\n        <span class=\"n\">rhs</span><span class=\"p\">,</span> <span class=\"n\">rhs_params</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process_rhs</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">)</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"n\">lhs_params</span> <span class=\"o\">+</span> <span class=\"n\">rhs_params</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> &lt;&gt; </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">),</span> <span class=\"n\">params</span>\n</code></pre></div>\n<p>Chun an cuardach <code class=\"docutils literal notranslate\"><span class=\"pre\">NoteQual</span></code> a chlárú beidh orainn glaoch ar register_lookup` ar an rang réimse a theastaíonn uainn go mbeadh an cuardach ar fáil dó. Sa chás seo, bíonn ciall ag an cuardach ar gach fo-aicme <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Field`, mar sin cláraímid é le <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>Field` go díreach:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Field</span>\n\n<span class=\"n\">Field</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">NotEqual</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir clárú cuardaigh a dhéanamh freisin ag baint úsáide as patrún maisitheora:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Field</span>\n\n\n<span class=\"nd\">@Field</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">NotEqualLookup</span><span class=\"p\">(</span><span class=\"n\">Lookup</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Is féidir linn <code class=\"docutils literal notranslate\"><span class=\"pre\">foo__ne</span></code> a úsáid anois le haghaidh aon réimse <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code>. Beidh ort a chinntiú go dtarlaíonn an clárú seo sula ndéanann tú iarracht aon cheisteanna a chruthú ag baint úsáide as. D'fhéadfá an cur i bhfeidhm a chur i gcomhad <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py`,</span> <span class=\"pre\">nó</span> <span class=\"pre\">an</span> <span class=\"pre\">cuardach</span> <span class=\"pre\">a</span> <span class=\"pre\">chlárú</span> <span class=\"pre\">sa</span> <span class=\"pre\">mhodh</span> <span class=\"pre\">``ready</span> <span class=\"pre\">()</span> <span class=\"pre\">``de</span> <span class=\"pre\">`AppConfig</span></code>.</p>\n<p>Ag breathnú níos dlúithe ar an gcur i bhfeidhm, is é lookup_name` an chéad tréith riachtanach. Ligeann sé seo don ORM tuiscint a fháil ar conas <code class=\"docutils literal notranslate\"><span class=\"pre\">name__ne</span></code> a léirmhíniú agus <code class=\"docutils literal notranslate\"><span class=\"pre\">NoteQual</span></code> a úsáid chun an SQL a ghiniúint. De réir choinbhinsiúin, is teaghráin bheaga iad na hainmneacha seo i gcónaí nach bhfuil ach litreacha ann, ach is é an t-aon cheanglas crua ná nach gcaithfidh an teaghrán <code class=\"docutils literal notranslate\"><span class=\"pre\">__</span></code> a bheith ann.</p>\n<p>Ansin ní mór dúinn an modh <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql</span></code> a shainiú. Tógann sé seo réad <code class=\"docutils literal notranslate\"><span class=\"pre\">SQLCompiler</span></code>, ar a dtugtar <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler</span></code>, agus an nasc gníomhach bunachar sonraí. Ní dhéantar rudaí SQLCompiler` a dhoiciméadú, ach is é an t-aon rud a chaithfimid a bheith ar eolas fúthu ná go bhfuil modh <code class=\"docutils literal notranslate\"><span class=\"pre\">compileáil</span> <span class=\"pre\">()</span> <span class=\"pre\">``acu</span> <span class=\"pre\">a</span> <span class=\"pre\">thugann</span> <span class=\"pre\">tuple</span> <span class=\"pre\">ina</span> <span class=\"pre\">bhfuil</span> <span class=\"pre\">teaghrán</span> <span class=\"pre\">SQL,</span> <span class=\"pre\">agus</span> <span class=\"pre\">na</span> <span class=\"pre\">paraiméadair</span> <span class=\"pre\">atá</span> <span class=\"pre\">le</span> <span class=\"pre\">hidirphóladh</span> <span class=\"pre\">isteach</span> <span class=\"pre\">sa</span> <span class=\"pre\">sreang</span> <span class=\"pre\">sin.</span> <span class=\"pre\">I</span> <span class=\"pre\">bhformhór</span> <span class=\"pre\">na</span> <span class=\"pre\">gcásanna,</span> <span class=\"pre\">ní</span> <span class=\"pre\">gá</span> <span class=\"pre\">duit</span> <span class=\"pre\">é</span> <span class=\"pre\">a</span> <span class=\"pre\">úsáid</span> <span class=\"pre\">go</span> <span class=\"pre\">díreach</span> <span class=\"pre\">agus</span> <span class=\"pre\">is</span> <span class=\"pre\">féidir</span> <span class=\"pre\">leat</span> <span class=\"pre\">é</span> <span class=\"pre\">a</span> <span class=\"pre\">chur</span> <span class=\"pre\">ar</span> <span class=\"pre\">aghaidh</span> <span class=\"pre\">chuig</span> <span class=\"pre\">``process_lhs</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``process_rhs</span> <span class=\"pre\">()</span></code>.</p>\n<p>Oibríonn <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> i gcoinne dhá luach, lhs` agus <code class=\"docutils literal notranslate\"><span class=\"pre\">rhs</span></code>, ag seasamh ar thaobh na láimhe clé agus ar dheis. &lt;query-expression&gt;Is tagairt réimse é an taobh na láimhe clé de ghnáth, ach is féidir é a bheith ina rud ar bith a chur i bhfeidhm an:ref: abairt fiosraithe API `. Is é an lámh dheis an luach a thugann an t-úsáideoir. Sa sampla ``Author.Objects.Filter (name__ne='Jack') `, is tagairt é an taobh clé don réimse <code class=\"docutils literal notranslate\"><span class=\"pre\">ainm</span></code> den tsamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Author</span> <span class=\"pre\">``,</span> <span class=\"pre\">agus</span> <span class=\"pre\">``Jack'</span></code> is é an taobh na láimhe deise.</p>\n<p>Glaoimid ar <code class=\"docutils literal notranslate\"><span class=\"pre\">process_lhs</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">process_rhs</span></code> chun iad a thiontú ina luachanna a theastaíonn uainn le haghaidh SQL ag baint úsáide as an réad <code class=\"docutils literal notranslate\"><span class=\"pre\">compiler</span></code> a thuairiscítear roimhe seo. Tugann na modhanna seo tuples ina bhfuil roinnt SQL agus na paraiméadair atá le hidirphóladh isteach sa SQL sin, díreach mar is gá dúinn filleadh ónár modh as_sql`. Sa sampla thuas, filleann <code class=\"docutils literal notranslate\"><span class=\"pre\">process_lhs</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">('&quot;údar”.</span> <span class=\"pre\">ainm&quot;',</span> <span class=\"pre\">[])</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``process_rhs</span></code> filleann`` ('&quot;%s&quot;', ['Jack']) <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>. Sa sampla seo ní raibh aon pharaiméadair ann don taobh clé, ach bheadh sé seo ag brath ar an réad atá againn, mar sin ní mór dúinn iad a áireamh sna paraiméadair a fhilleann muid fós.</p>\n<p>Faoi dheireadh, déanaimid na codanna a chomhcheangal i abairt SQL le &lt;&gt;`, agus soláthraímid na paraiméadair go léir don cheist. Ansin cuirimid tuple ar ais ina bhfuil an teaghrán SQL a ghintear agus na paraiméadair.</p>\n</section>\n<section id=\"a-transformer-example\">\n<h2>Sampla claochladáin<a class=\"heading-anchor\" href=\"#a-transformer-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá an cuardach saincheaptha thuas iontach, ach i gcásanna áirithe b'fhéidir gur mhaith leat a bheith in ann cuardaigh a shlánú le chéile. Mar shampla, is dóigh linn go bhfuilimid ag tógáil feidhmchlár áit ar mhaith linn úsáid a bhaint as an oibreoir <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span> <span class=\"pre\">()</span> <span class=\"pre\">``.</span> <span class=\"pre\">Tá</span> <span class=\"pre\">samhail</span> <span class=\"pre\">``Turgnamh</span></code> againn a thaifeadann luach tosaigh, luach deiridh, agus an t-athrú (tús - deireadh). Ba mhaith linn gach turgnamh a fháil nuair a bhí an t-athrú cothrom le méid áirithe (Experiment.Objects.filter (change__abs = 27) `), nó nuair nár sháraigh sé méid áirithe (<code class=\"docutils literal notranslate\"><span class=\"pre\">Experiment.Objects.Filter</span> <span class=\"pre\">(change__abs__lt=27)</span></code>).</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Tá an sampla seo dírithe beagán, ach léiríonn sé go deas an raon feidhmiúlachta atá indéanta ar bhealach neamhspleách cúltaca bunachar sonraí, agus gan feidhmiúlacht a dhúbailt cheana féin i Django.</p>\n</aside>\n<p>Tosóimid trí chlaochladán <code class=\"docutils literal notranslate\"><span class=\"pre\">Absolutevalue</span></code> a scríobh. Úsáidfidh sé seo an fheidhm SQL <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ABS () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>chun an luach a athrú roimh chomparáid:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Transform</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AbsoluteValue</span><span class=\"p\">(</span><span class=\"n\">Transform</span><span class=\"p\">):</span>\n    <span class=\"n\">lookup_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;abs&quot;</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ABS&quot;</span>\n</code></pre></div>\n<p>Ansin, déanaimis é a chlárú le haghaidh <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">IntegerField</span>\n\n<span class=\"n\">IntegerField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">AbsoluteValue</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir linn anois na ceisteanna a bhí againn roimhe seo a rith. Ghinfidh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Experiment.Objects.Filter (change__abs = 27) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an SQL seo a leanas:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">ABS</span><span class=\"p\">(</span><span class=\"ss\">&quot;experiments&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;change&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">27</span>\n</code></pre></div>\n<p>Trí <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> a úsáid in ionad <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> ciallaíonn sé go bhfuilimid in ann cuardaigh breise a shlánú ina dhiaidh sin. Mar sin, ginfidh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Experiment.Objects.filter (change__abs__lt = 27) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an SQL seo a leanas:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">ABS</span><span class=\"p\">(</span><span class=\"ss\">&quot;experiments&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;change&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"mi\">27</span>\n</code></pre></div>\n<p>Tabhair faoi deara, i gcás nach bhfuil aon chuardach eile sonraithe ann, léirmhíníonn Django <code class=\"docutils literal notranslate\"><span class=\"pre\">change__abs</span> <span class=\"pre\">=</span> <span class=\"pre\">27</span></code> mar <code class=\"docutils literal notranslate\"><span class=\"pre\">change__abs__exact=27</span></code>.</p>\n<p>Ligeann sé seo freisin an toradh a úsáid i gclásail <code class=\"docutils literal notranslate\"><span class=\"pre\">ORDER</span> <span class=\"pre\">BY</span></code> agus DISTINCT ON`. Mar shampla <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Experiment.Objects.Order_by ('change__abs') <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>gineann:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">ORDER</span><span class=\"w\"> </span><span class=\"k\">BY</span><span class=\"w\"> </span><span class=\"k\">ABS</span><span class=\"p\">(</span><span class=\"ss\">&quot;experiments&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;change&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">ASC</span>\n</code></pre></div>\n<p>Agus ar bhunachair sonraí a thacaíonn le réimsí ar leith (mar shampla PostgreSQL), gineann <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Experiment.Objects.Distinct ('change__abs') <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">DISTINCT</span><span class=\"w\"> </span><span class=\"k\">ON</span><span class=\"w\"> </span><span class=\"k\">ABS</span><span class=\"p\">(</span><span class=\"ss\">&quot;experiments&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;change&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Agus tú ag lorg cé na cuardaigh atá incheadaithe tar éis an <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform`</span> <span class=\"pre\">`a</span> <span class=\"pre\">chur</span> <span class=\"pre\">i</span> <span class=\"pre\">bhfeidhm,</span> <span class=\"pre\">úsáideann</span> <span class=\"pre\">Django</span> <span class=\"pre\">an</span> <span class=\"pre\">tréith</span> <span class=\"pre\">``output_field`.</span> <span class=\"pre\">Ní</span> <span class=\"pre\">raibh</span> <span class=\"pre\">gá</span> <span class=\"pre\">dúinn</span> <span class=\"pre\">é</span> <span class=\"pre\">seo</span> <span class=\"pre\">a</span> <span class=\"pre\">shonrú</span> <span class=\"pre\">anseo</span> <span class=\"pre\">mar</span> <span class=\"pre\">níor</span> <span class=\"pre\">athraigh</span> <span class=\"pre\">sé,</span> <span class=\"pre\">ach</span> <span class=\"pre\">ag</span> <span class=\"pre\">glacadh</span> <span class=\"pre\">go</span> <span class=\"pre\">raibh</span> <span class=\"pre\">“AbsoluteValue”</span> <span class=\"pre\">á</span> <span class=\"pre\">chur</span> <span class=\"pre\">i</span> <span class=\"pre\">bhfeidhm</span> <span class=\"pre\">ar</span> <span class=\"pre\">réimse</span> <span class=\"pre\">éigin</span> <span class=\"pre\">a</span> <span class=\"pre\">léiríonn</span> <span class=\"pre\">cineál</span> <span class=\"pre\">níos</span> <span class=\"pre\">casta</span> <span class=\"pre\">(mar</span> <span class=\"pre\">shampla</span> <span class=\"pre\">pointe</span> <span class=\"pre\">i</span> <span class=\"pre\">gcoibhneas</span> <span class=\"pre\">le</span> <span class=\"pre\">bunús,</span> <span class=\"pre\">nó</span> <span class=\"pre\">uimhir</span> <span class=\"pre\">chasta)</span> <span class=\"pre\">ansin</span> <span class=\"pre\">b'fhéidir</span> <span class=\"pre\">gur</span> <span class=\"pre\">theastaigh</span> <span class=\"pre\">uainn</span> <span class=\"pre\">a</span> <span class=\"pre\">shonrú</span> <span class=\"pre\">go</span> <span class=\"pre\">dtugann</span> <span class=\"pre\">an</span> <span class=\"pre\">claochlú</span> <span class=\"pre\">cineál</span> <span class=\"pre\">`Floatfield`</span> <span class=\"pre\">le</span> <span class=\"pre\">haghaidh</span> <span class=\"pre\">tuilleadh</span> <span class=\"pre\">cuardaigh.</span> <span class=\"pre\">Is</span> <span class=\"pre\">féidir</span> <span class=\"pre\">é</span> <span class=\"pre\">seo</span> <span class=\"pre\">a</span> <span class=\"pre\">dhéanamh</span> <span class=\"pre\">trí</span> <span class=\"pre\">thréith</span> <span class=\"pre\">``output_field</span></code> a chur leis an gclaochlú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FloatField</span><span class=\"p\">,</span> <span class=\"n\">Transform</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AbsoluteValue</span><span class=\"p\">(</span><span class=\"n\">Transform</span><span class=\"p\">):</span>\n    <span class=\"n\">lookup_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;abs&quot;</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;ABS&quot;</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">output_field</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">FloatField</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Cinntíonn sé seo go n-iompraíonn cuardaigh breise mar <code class=\"docutils literal notranslate\"><span class=\"pre\">abs__lte</span></code> mar a dhéanfaidís do <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Floatfield <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n</section>\n<section id=\"writing-an-efficient-abs-lt-lookup\">\n<h2>Cuardach éifeachtach <code class=\"docutils literal notranslate\"><span class=\"pre\">abs__lt</span></code> a scríobh<a class=\"heading-anchor\" href=\"#writing-an-efficient-abs-lt-lookup\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Agus an cuardach 'abs' scríofa thuas á úsáid agat, ní úsáidfidh an SQL a tháirgtear innéacsanna go héifeachtúil i gcásanna áirithe. Go háirithe, nuair a úsáidimid <code class=\"docutils literal notranslate\"><span class=\"pre\">change__abs__lt=27</span></code>, tá sé seo comhionann le <code class=\"docutils literal notranslate\"><span class=\"pre\">change__gt=-27</span></code> AGUS <code class=\"docutils literal notranslate\"><span class=\"pre\">change__lt=27</span></code>. (Maidir leis an gcás <code class=\"docutils literal notranslate\"><span class=\"pre\">lte</span></code> d'fhéadfaimis an SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">BETWEEN</span></code> a úsáid).</p>\n<p>Mar sin ba mhaith linn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Experiment.Objects.filter (change__abs__lt = 27) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an SQL seo a leanas a ghiniúint:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">..</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"ss\">&quot;experiments&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;change&quot;</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"mi\">27</span><span class=\"w\"> </span><span class=\"k\">AND</span><span class=\"w\"> </span><span class=\"ss\">&quot;experiments&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;change&quot;</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"mi\">27</span>\n</code></pre></div>\n<p>Is é seo a leanas an cur chun feidhme:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Lookup</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AbsoluteValueLessThan</span><span class=\"p\">(</span><span class=\"n\">Lookup</span><span class=\"p\">):</span>\n    <span class=\"n\">lookup_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;lt&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_sql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">):</span>\n        <span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">lhs_params</span> <span class=\"o\">=</span> <span class=\"n\">compiler</span><span class=\"o\">.</span><span class=\"n\">compile</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">lhs</span><span class=\"o\">.</span><span class=\"n\">lhs</span><span class=\"p\">)</span>\n        <span class=\"n\">rhs</span><span class=\"p\">,</span> <span class=\"n\">rhs_params</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process_rhs</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">)</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"n\">lhs_params</span> <span class=\"o\">+</span> <span class=\"n\">rhs_params</span> <span class=\"o\">+</span> <span class=\"n\">lhs_params</span> <span class=\"o\">+</span> <span class=\"n\">rhs_params</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> &lt; </span><span class=\"si\">%s</span><span class=\"s2\"> AND </span><span class=\"si\">%s</span><span class=\"s2\"> &gt; -</span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">,</span> <span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">),</span> <span class=\"n\">params</span>\n\n\n<span class=\"n\">AbsoluteValue</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">AbsoluteValueLessThan</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Tá cúpla rud suntasach ar siúl. Ar dtús, níl <code class=\"docutils literal notranslate\"><span class=\"pre\">Absolutevaluelessthan</span></code> ag glaoch ar <code class=\"docutils literal notranslate\"><span class=\"pre\">process_lhs</span> <span class=\"pre\">()</span> <span class=\"pre\">``.</span> <span class=\"pre\">Ina</span> <span class=\"pre\">áit</span> <span class=\"pre\">sin</span> <span class=\"pre\">scipeann</span> <span class=\"pre\">sé</span> <span class=\"pre\">claochlú</span> <span class=\"pre\">na</span> <span class=\"pre\">`lhs</span></code> arna dhéanamh ag <code class=\"docutils literal notranslate\"><span class=\"pre\">AbsoluteValue</span></code> agus úsáideann sé an lhs` bunaidh. Is é sin, ba mhaith linn “turgnaimh” a fháil.” athraigh “<code class=\"docutils literal notranslate\"><span class=\"pre\">ní</span> <span class=\"pre\">``ABS</span> <span class=\"pre\">(“turgnaimh”.”</span> <span class=\"pre\">athrú”)</span> <span class=\"pre\">``.</span> <span class=\"pre\">Tá</span> <span class=\"pre\">tagairt</span> <span class=\"pre\">dhíreach</span> <span class=\"pre\">do</span> <span class=\"pre\">`self.lhs.lhs</span></code> sábháilte mar ní féidir rochtain a fháil ar <code class=\"docutils literal notranslate\"><span class=\"pre\">AbsoluteValuelessthan</span></code> ach ón gcuardach <code class=\"docutils literal notranslate\"><span class=\"pre\">AbsoluteValue</span></code>, is é sin an lhs` is sampla de AbsoluteValue` i gcónaí.</p>\n<p>Tabhair faoi deara freisin toisc go n-úsáidtear an dá thaobh arís agus arís agus arís eile sa cheist go gcaithfidh lhs_params` agus rhs_params` a bheith sna paramaí arís agus arís eile.</p>\n<p>Déanann an cheist deiridh an t-inbhrú (<code class=\"docutils literal notranslate\"><span class=\"pre\">27</span></code> go -27`) go díreach sa bhunachar sonraí. Is é an chúis atá leis seo a dhéanamh ná más rud éigin eile é an <code class=\"docutils literal notranslate\"><span class=\"pre\">self.rhs</span></code> seachas luach slámhshláir simplí (mar shampla tagairt <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>F () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>) ní féidir linn na claochlú a dhéanamh i Python.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Déanta na fírinne, d'fhéadfaí an chuid is mó de na cuardaigh le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>__abs <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a chur i bhfeidhm mar cheisteanna raon mar seo, agus ar fhormhór na gcúltaca bunachar sonraí is dóichí go mbeidh sé níos ciallmhaire é sin a dhéanamh mar is féidir leat úsáid a bhaint as na hinnéacsanna. Mar sin féin le PostgreSQL b'fhéidir gur mhaith leat innéacs a chur leis ar <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>abs (athrú) <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>a ligfeadh na ceisteanna seo a bheith an-éifeachtach.</p>\n</aside>\n</section>\n<section id=\"a-bilateral-transformer-example\">\n<h2>Sampla claochladáin déthaobh<a class=\"heading-anchor\" href=\"#a-bilateral-transformer-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is é an sampla <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>AbsoluteValue` a phléamar roimhe seo ná claochlú a bhaineann leis an taobh clé den chuardach. D'fhéadfadh go mbeadh roinnt cásanna ann inar mian leat an claochlú a chur i bhfeidhm ar an taobh clé agus ar an taobh deise araon. Mar shampla, más mian leat tacar fiosrúcháin a scagadh bunaithe ar chomhionannas an taobh clé agus na láimhe deise go neamhíogair do roinnt feidhm SQL.</p>\n<p>Déanaimis scrúdú ar chlaochlú cás-neamh-íogair Níl an claochlú seo an-úsáideach go praiticiúil toisc go dtagann dornán cuardaigh cás-neamh-íogair ionsuite le Django cheana féin, ach beidh sé ina léiriú deas ar chlaochlú déthaobhacha ar bhealach agnasach bunachar sonraí.</p>\n<p>Sainmhínímid claochladán <code class=\"docutils literal notranslate\"><span class=\"pre\">Uppercase</span></code> a úsáideann an fheidhm SQL <code class=\"docutils literal notranslate\"><span class=\"pre\">UPPER</span> <span class=\"pre\">()</span> <span class=\"pre\">``chun</span> <span class=\"pre\">na</span> <span class=\"pre\">luachanna</span> <span class=\"pre\">a</span> <span class=\"pre\">athrú</span> <span class=\"pre\">roimh</span> <span class=\"pre\">chomparáid.</span> <span class=\"pre\">Sainmhínímid:</span> <span class=\"pre\">attr:</span> <span class=\"pre\">`déthaobhach</span> <span class=\"pre\">=</span> <span class=\"pre\">Fíor</span> <span class=\"pre\">&lt;django.db.models.Transform.bilateral&gt;`chun</span> <span class=\"pre\">a</span> <span class=\"pre\">léiriú</span> <span class=\"pre\">gur</span> <span class=\"pre\">chóir</span> <span class=\"pre\">go</span> <span class=\"pre\">mbeadh</span> <span class=\"pre\">feidhm</span> <span class=\"pre\">ag</span> <span class=\"pre\">an</span> <span class=\"pre\">gclaochlú</span> <span class=\"pre\">seo</span> <span class=\"pre\">le</span> <span class=\"pre\">`lhs</span></code> agus rhs` araon:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Transform</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UpperCase</span><span class=\"p\">(</span><span class=\"n\">Transform</span><span class=\"p\">):</span>\n    <span class=\"n\">lookup_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;upper&quot;</span>\n    <span class=\"n\">function</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;UPPER&quot;</span>\n    <span class=\"n\">bilateral</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n</code></pre></div>\n<p>Ansin, déanaimis é a chlárú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CharField</span><span class=\"p\">,</span> <span class=\"n\">TextField</span>\n\n<span class=\"n\">CharField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">UpperCase</span><span class=\"p\">)</span>\n<span class=\"n\">TextField</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">UpperCase</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Anois, ginfidh an tacar ceisteanna <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Author.Objects.Filter (name__upper=&quot;doe”) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ceist neamh-íogair cás mar seo:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"p\">...</span><span class=\"w\"> </span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"k\">UPPER</span><span class=\"p\">(</span><span class=\"ss\">&quot;author&quot;</span><span class=\"p\">.</span><span class=\"ss\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">UPPER</span><span class=\"p\">(</span><span class=\"s1\">&#39;doe&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"writing-alternative-implementations-for-existing-lookups\">\n<h2>Forfheidhmithe malartacha a scríobh le haghaidh cuardaigh atá ann<a class=\"heading-anchor\" href=\"#writing-alternative-implementations-for-existing-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Uaireanta éilíonn díoltóirí bunachar sonraí éagsúla SQL éagsúla don oibríocht chéanna. Mar shampla seo athscríobhfaimid cur i bhfeidhm saincheaptha do MySQL don oibreoir NotEqual. In ionad <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;&gt;</span></code> beimid ag úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">!=</span></code> oibreoir. (Tabhair faoi deara i ndáiríre go dtacaíonn beagnach gach bunachar sonraí leis an dá cheann, lena n-áirítear na bunachair shonraí oifigiúla go léir a fhaigheann tacaíocht ó Django).</p>\n<p>Is féidir linn an t-iompar ar chúltaca ar leith a athrú trí fho-aicme de NoteQual` a chruthú le modh as_mysql`:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MySQLNotEqual</span><span class=\"p\">(</span><span class=\"n\">NotEqual</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">as_mysql</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">extra_context</span><span class=\"p\">):</span>\n        <span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">lhs_params</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process_lhs</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">)</span>\n        <span class=\"n\">rhs</span><span class=\"p\">,</span> <span class=\"n\">rhs_params</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">process_rhs</span><span class=\"p\">(</span><span class=\"n\">compiler</span><span class=\"p\">,</span> <span class=\"n\">connection</span><span class=\"p\">)</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"n\">lhs_params</span> <span class=\"o\">+</span> <span class=\"n\">rhs_params</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;</span><span class=\"si\">%s</span><span class=\"s2\"> != </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">lhs</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">),</span> <span class=\"n\">params</span>\n\n\n<span class=\"n\">Field</span><span class=\"o\">.</span><span class=\"n\">register_lookup</span><span class=\"p\">(</span><span class=\"n\">MySQLNotEqual</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ansin is féidir linn é a chlárú le <code class=\"docutils literal notranslate\"><span class=\"pre\">Field`.</span> <span class=\"pre\">Tógann</span> <span class=\"pre\">sé</span> <span class=\"pre\">in</span> <span class=\"pre\">áit</span> <span class=\"pre\">an</span> <span class=\"pre\">aicme</span> <span class=\"pre\">bunaidh</span> <span class=\"pre\">``NoteQual</span></code> mar tá an lookup_name` céanna aige.</p>\n<p>Agus ceist á thiomsú, féachann Django ar dtús modhanna <code class=\"docutils literal notranslate\"><span class=\"pre\">as_%s%</span> <span class=\"pre\">connection.vendor</span></code>, agus ansin titeann sé ar ais chuig <code class=\"docutils literal notranslate\"><span class=\"pre\">as_sql</span></code>. Is iad na hainmneacha díoltóra do na cúltaca ionsuite ná sqlite`, postgresql`, <code class=\"docutils literal notranslate\"><span class=\"pre\">oracle</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">mysql</span></code>.</p>\n</section>\n<section id=\"how-django-determines-the-lookups-and-transforms-which-are-used\">\n<h2>Conas a chinneann Django na cuardaigh agus na hathshruithe a úsáidtear<a class=\"heading-anchor\" href=\"#how-django-determines-the-lookups-and-transforms-which-are-used\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>I gcásanna áirithe b'fhéidir gur mhaith leat a athrú go dinimiciúil cén <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> nó <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> ar ais bunaithe ar an ainm a chuirtear isteach, seachas é a shocrú. Mar shampla, d'fhéadfá réimse a bheith agat a stóráilíonn comhordanáidí nó gné treallach, agus ba mhaith leat comhréir mar .filter (coords__x7=4) `a cheadú chun na rudaí a thabhairt ar ais ina bhfuil luach 4 ag an 7ú comhordú. D'fhonn é seo a dhéanamh, dhéanfá ``get_lookup` a shárú le rud éigin mar:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CoordinatesField</span><span class=\"p\">(</span><span class=\"n\">Field</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_lookup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">lookup_name</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">lookup_name</span><span class=\"o\">.</span><span class=\"n\">startswith</span><span class=\"p\">(</span><span class=\"s2\">&quot;x&quot;</span><span class=\"p\">):</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">dimension</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">lookup_name</span><span class=\"o\">.</span><span class=\"n\">removeprefix</span><span class=\"p\">(</span><span class=\"s2\">&quot;x&quot;</span><span class=\"p\">))</span>\n            <span class=\"k\">except</span> <span class=\"ne\">ValueError</span><span class=\"p\">:</span>\n                <span class=\"k\">pass</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">get_coordinate_lookup</span><span class=\"p\">(</span><span class=\"n\">dimension</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_lookup</span><span class=\"p\">(</span><span class=\"n\">lookup_name</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ansin shainmhíníodh <code class=\"docutils literal notranslate\"><span class=\"pre\">get_coordinate_lookup</span></code> go cuí chun fo-aicme <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> a thabhairt ar ais a dhéileálann luach ábhartha <code class=\"docutils literal notranslate\"><span class=\"pre\">tois</span></code>.</p>\n<p>Tá modh ainmnithe mar an gcéanna ar a dtugtar <code class=\"docutils literal notranslate\"><span class=\"pre\">get_transformer</span> <span class=\"pre\">()</span> <span class=\"pre\">``.</span> <span class=\"pre\">Ba</span> <span class=\"pre\">chóir</span> <span class=\"pre\">go</span> <span class=\"pre\">gcuirfeadh</span> <span class=\"pre\">``get_lookup</span> <span class=\"pre\">()</span> <span class=\"pre\">``fo-aicme</span> <span class=\"pre\">``Lookup</span></code> a thabhairt ar ais i gcónaí, agus <code class=\"docutils literal notranslate\"><span class=\"pre\">get_transformer</span> <span class=\"pre\">()</span></code> fo-aicme <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code>. Tá sé tábhachtach a mheabhrú gur féidir rudaí Transform' a scagadh tuilleadh orthu, agus ní féidir rudaí ``Lookup`.</p>\n<p>Agus tú ag scagadh, mura bhfuil ach ainm cuardaigh amháin fágtha le réiteach, cuirfimid ag lorg <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code>. Má tá ainmneacha iolracha ann, cuardóidh sé <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform`</span> <span class=\"pre\">`.</span> <span class=\"pre\">Sa</span> <span class=\"pre\">chás</span> <span class=\"pre\">nach</span> <span class=\"pre\">bhfuil</span> <span class=\"pre\">ach</span> <span class=\"pre\">ainm</span> <span class=\"pre\">amháin</span> <span class=\"pre\">ann</span> <span class=\"pre\">agus</span> <span class=\"pre\">nach</span> <span class=\"pre\">bhfaightear</span> <span class=\"pre\">``Lookup</span></code>, cuirimid ag lorg <code class=\"docutils literal notranslate\"><span class=\"pre\">Transform</span></code> agus ansin an cuardach <code class=\"docutils literal notranslate\"><span class=\"pre\">`cruth</span></code> ar an Transform` sin. Críochnaíonn gach seicheamh glaonna le <code class=\"docutils literal notranslate\"><span class=\"pre\">Lookup</span></code> i gcónaí. Chun soiléiriú:</p>\n<ul class=\"simple\">\n<li><p>Glaofar <code class=\"docutils literal notranslate\"><span class=\"pre\">.filter</span> <span class=\"pre\">(myfield__mylookup)</span> <span class=\"pre\">```myfield.get_lookup</span> <span class=\"pre\">('mylookup')</span></code>.</p></li>\n<li><p>Tabharfaidh .filter (myfield__mytransform__mylookup) ``glaoch ar ``myfield.get_transformer ('mytransformer')`, agus ansin <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>mytransform.get_lookup ('mylookup') <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p></li>\n<li><p>Glaofar <code class=\"docutils literal notranslate\"><span class=\"pre\">.filter</span> <span class=\"pre\">(myfield__mytransformer)</span> <span class=\"pre\">``ar</span> <span class=\"pre\">dtús</span> <span class=\"pre\">``myfield.get_lookup</span> <span class=\"pre\">('mytransformer')</span></code>, a theipeann air, mar sin tithfidh sé ar ais ar <code class=\"docutils literal notranslate\"><span class=\"pre\">myfield.get_transformer</span> <span class=\"pre\">('mytransformer')</span> <span class=\"pre\">``agus</span> <span class=\"pre\">ansin</span> <span class=\"pre\">``mytransform.get_lookup</span> <span class=\"pre\">('éacht')</span></code>.</p></li>\n</ul>\n</section>","rootId":"how-to-write-custom-lookups","toc":[{"title":"Sampla cuardaigh","anchor":"a-lookup-example","children":[]},{"title":"Sampla claochladáin","anchor":"a-transformer-example","children":[]},{"title":"Cuardach éifeachtach abs__lt a scríobh","anchor":"writing-an-efficient-abs-lt-lookup","children":[]},{"title":"Sampla claochladáin déthaobh","anchor":"a-bilateral-transformer-example","children":[]},{"title":"Forfheidhmithe malartacha a scríobh le haghaidh cuardaigh atá ann","anchor":"writing-alternative-implementations-for-existing-lookups","children":[]},{"title":"Conas a chinneann Django na cuardaigh agus na hathshruithe a úsáidtear","anchor":"how-django-determines-the-lookups-and-transforms-which-are-used","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Treoracha conas","url":"/ga/6.0/howto/"}],"prev":{"docname":"howto/writing-migrations","title":"Conas imirce bunachar sonraí a chruthú","url":"/ga/6.0/howto/writing-migrations/"},"next":{"docname":"howto/outputting-csv","title":"Conas aschur CSV a chruthú","url":"/ga/6.0/howto/outputting-csv/"},"formats":{"html":"/ga/6.0/howto/custom-lookups/","markdown":"/ga/6.0/howto/custom-lookups.md","json":"/ga/6.0/howto/custom-lookups.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/howto/custom-lookups.txt","official":"https://docs.djangoproject.com/ga/6.0/howto/custom-lookups/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}