{"title":"Bailíochtú foirm agus réimse","version":"6.0","locale":"ga","docname":"ref/forms/validation","url":"/ga/6.0/ref/forms/validation/","canonical":"https://djangodocs.dev/ga/6.0/ref/forms/validation/","summary":"Tarlaíonn bailíochtú foirme nuair a ghlantar na sonraí. Más mian leat an próiseas seo a shaincheapadh, tá áiteanna éagsúla ann chun athruithe a dhéanamh…","html":"<h1>Bailíochtú foirm agus réimse<a class=\"heading-anchor\" href=\"#form-and-field-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tarlaíonn bailíochtú foirme nuair a ghlantar na sonraí. Más mian leat an próiseas seo a shaincheapadh, tá áiteanna éagsúla ann chun athruithe a dhéanamh, agus gach ceann acu ag freastal ar chuspóir difriúil. Reáchtáiltear trí chineál modhanna glantacháin le linn próiseála foirme. De ghnáth déantar iad seo a fhorghníomhú nuair a ghlaonn tú ar an modh <code class=\"docutils literal notranslate\">is_valid () ``ar fhoirm. Tá rudaí eile ann a d'fhéadfadh glanadh agus bailíochtú a spreagadh freisin (rochtain a fháil ar an tréith ``earráidí ``nó glaoch ar `full_clean ()</code> go díreach), ach de ghnáth ní bheidh siad ag teastáil.</p>\n<p>Go ginearálta, is féidir le haon mhodh glantacháin <code class=\"docutils literal notranslate\">ValidationError` a ardú má tá fadhb ann leis na sonraí atá á phróiseáil aige, ag cur an fhaisnéis ábhartha chuig an tógálaí ``ValidationError`. :ref: `Féach thíos &lt;raising-validation-error&gt;`le haghaidh an dea-chleachtas maidir le ``ValidationError</code> a ardú. Mura n-ardaítear aon <code class=\"docutils literal notranslate\">ValidationError</code>, ba cheart don modh na sonraí glanta (normalaithe) a thabhairt ar ais mar réad Python.</p>\n<p>Is féidir an chuid is mó de bhailíochtú a dhéanamh ag baint úsáide as bailíodóirí `_ - cúntóirí is féidir a athúsáid. Is feidhmeanna (nó glaonna) iad bailíochtóirí a thógann argóint amháin agus a ardaíonn ``ValidationError` ar ionchur neamhbhailí. Déantar bailíochtóirí a reáchtáil tar éis modhanna <code class=\"docutils literal notranslate\">to_python</code> agus <code class=\"docutils literal notranslate\">validate</code> an réimse a ghlaoch.</p>\n<p>Roinntear bailíochtú foirme ina roinnt céimeanna, ar féidir iad a shaincheapadh nó a shárú:</p>\n<ul>\n<li><p>Is é an modh <code class=\"docutils literal notranslate\">to_python () ``ar `Réimse</code> an chéad chéim i ngach bailíochtú. Cuireann sé an luach ar chineál sonraí ceart agus ardaíonn sé <code class=\"docutils literal notranslate\">ValidationError</code> mura féidir é sin a dhéanamh. Glacann an modh seo leis an luach amh ón ngiuirléid agus filleann sé an luach tiontaithe ar ais. Mar shampla, iompróidh <code class=\"docutils literal notranslate\">Floatfield</code> na sonraí ina float` Python nó ardóidh <code class=\"docutils literal notranslate\">ValidationError</code>.</p></li>\n<li><p>Láimhseálann an modh <code class=\"docutils literal notranslate\">validate () ``ar `Réimse</code> bailíochtú réamh-shonrach nach bhfuil oiriúnach do bhailíochtóir. Tógann sé luach a cuireadh iallach ar chineál sonraí ceart agus ardaíonn sé <code class=\"docutils literal notranslate\">ValidationError</code> ar aon earráid. Ní thugann an modh seo aon rud ar ais agus níor cheart dó an luach a athrú. Ba chóir duit é a shárú chun loighic bhailíochtaithe nach féidir leat nó nach dteastaíonn uait bailíochtóir a chur isteach.</p></li>\n<li><p>Ritheann an modh <code class=\"docutils literal notranslate\">run_validators () ``ar `Réimse</code> bailíochtóirí uile an réimse agus comhiomlánann sé na hearráidí go léir ina <code class=\"docutils literal notranslate\">ValidationError</code> amháin. Níor chóir go gcaithfidh tú an modh seo a shárú.</p></li>\n<li><p>Tá an modh <code class=\"docutils literal notranslate\">clean () ``ar fho-aicme ``Field</code> freagrach as <code class=\"docutils literal notranslate\">to_python ()</code>, validate () `, agus <code class=\"docutils literal notranslate\">run_validators ()</code> a reáchtáil san ord ceart agus a n-earráidí a iomadú. Má ardaíonn aon cheann de na modhanna, ag am ar bith, ValidationError, stopann an bailíochtú agus ardaítear an earráid sin. Tugann an modh seo na sonraí glan ar ais, a chuirtear isteach ansin isteach i bhfoclóir <code class=\"docutils literal notranslate\">cleaned_data</code> na foirme.</p></li>\n<li><p>&lt;fieldname&gt;Glaítear ar an modh <code class=\"docutils literal notranslate\">clean_ () `ar fho-aicme foirme -- ina gcuirtear ainm tréith réim &lt;fieldname&gt;se na foirme in ionad ``</code>. Déanann an modh seo aon ghlanadh atá sonrach don tréith áirithe sin, nach mbaineann leis an gcineál réimse atá ann. Ní chuirtear an modh seo ar bith paraiméadair. Beidh ort luach an réimse a fheiceáil suas i self.cleaned_data ``agus cuimhnigh gur réad Python é ag an bpointe seo, ní an teaghrán bunaidh a chuirtear isteach san fhoirm (beidh sé i ``cleaned_data` toisc gur ghlanadh an modh réimse ginearálta <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>clean () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>thuas, na sonraí cheana féin).</p>\n<p>Mar shampla, dá dteastaíonn uait a bhailíochtú go raibh ábhar <code class=\"docutils literal notranslate\">charfield</code> ar a dtugtar <code class=\"docutils literal notranslate\">serialnumber</code> uathúil, bheadh clean_serialnumber () ``an áit cheart chun é seo a dhéanamh. Ní theastaíonn réimse ar leith uait (is `Charfield é), ach teastaíonn píosa bailíochtaithe atá sonrach le réimse foirme uait agus, b'fhéidir, na sonraí a ghlananach/normalú.</p>\n<p>Cuireann luach tuairisceáin an mhodha seo in ionad an luach atá ann cheana i cleaned_data `, mar sin caithfidh sé a bheith luach an réimse ó cleaned_data` (fiú mura n-athraigh an modh seo é) nó luach nua glantaithe.</p>\n</li>\n<li><p>Is féidir le modh <code class=\"docutils literal notranslate\">clean () ``an fho-aicme foirme bailíochtú a dhéanamh a éilíonn rochtain ar réimsí iolracha foirme. Seo an áit a bhféadfá seiceálacha a chur isteach mar “má sholáthraítear réimse ``A</code>, caithfidh seoladh ríomhphoist bailí a bheith i réimse <code class=\"docutils literal notranslate\">B</code>”. Is féidir leis an modh seo foclóir go hiomlán difriúil a thabhairt ar ais más mian leis, a úsáidfear mar an <code class=\"docutils literal notranslate\">cleaned_data</code>.</p>\n<p>Ós rud é go bhfuil na modhanna bailíochtaithe réimse á reáchtáil faoin am a dtugtar <code class=\"docutils literal notranslate\">clean () ``, tá rochtain agat freisin ar thréith ``earráidí</code> na foirme ina bhfuil na hearráidí go léir a ardaítear trí ghlanadh réimsí aonair.</p>\n<p>Note that any errors raised by your <a class=\"reference internal\" href=\"/ga/6.0/ref/forms/api/#django.forms.Form.clean\" title=\"django.forms.Form.clean\"><code class=\"xref py py-meth docutils literal notranslate\">Form.clean()</code></a> override will not\nbe associated with any field in particular. They go into a special\n&quot;field&quot; (called <code class=\"docutils literal notranslate\">__all__</code>), which you can access via the\n<a class=\"reference internal\" href=\"/ga/6.0/ref/forms/api/#django.forms.Form.non_field_errors\" title=\"django.forms.Form.non_field_errors\"><code class=\"xref py py-meth docutils literal notranslate\">non_field_errors()</code></a> method if you need to. If you\nwant to attach errors to a specific field in the form, you need to call\n<a class=\"reference internal\" href=\"/ga/6.0/ref/forms/api/#django.forms.Form.add_error\" title=\"django.forms.Form.add_error\"><code class=\"xref py py-meth docutils literal notranslate\">add_error()</code></a>.</p>\n<p>Tabhair faoi deara freisin go bhfuil breithnithe speisialta ann agus an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>clean () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>de fho-aicme <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>ModelForm <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>a shárú. (féach an:ref: <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">`</span></a>Doiciméadú ModelForm &lt;overriding-modelform-clean-method&gt;`le haghaidh tuilleadh eolais)</p>\n</li>\n</ul>\n<p>These methods are run in the order given above, one field at a time. That is,\nfor each field in the form (in the order they are declared in the form\ndefinition), the <code class=\"docutils literal notranslate\">Field.clean()</code> method (or its override) is run, then\n<code class=\"docutils literal notranslate\">clean_&lt;fieldname&gt;()</code>. Finally, once those two methods are run for every\nfield, the <a class=\"reference internal\" href=\"/ga/6.0/ref/forms/api/#django.forms.Form.clean\" title=\"django.forms.Form.clean\"><code class=\"xref py py-meth docutils literal notranslate\">Form.clean()</code></a> method, or its override, is executed whether\nor not the previous methods have raised errors.</p>\n<p>Tá samplaí de gach ceann de na modhanna seo ar fáil thíos.</p>\n<p>Mar a luadh, is féidir le haon cheann de na modhanna seo <code class=\"docutils literal notranslate\">Error Validationer</code> a ardú. Maidir le haon réimse, má ardaíonn an modh <code class=\"docutils literal notranslate\">Field.clean () ```Error validation</code>, ní ghlaofar aon mhodh glantacháin réimsiú-shonrach. Mar sin féin, déantar na modhanna glantacháin do gach réimse atá fágtha i bhfeidhm fós.</p>\n<section id=\"raising-validationerror\">\n<span id=\"raising-validation-error\"></span><h2>“Earráid Bailíochtaithe” a ardú<a class=\"heading-anchor\" href=\"#raising-validationerror\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>D'fhonn teachtaireachtaí earráide a dhéanamh solúbtha agus éasca le frithdhíriú, smaoinigh ar na treoirlínte</p>\n<ul>\n<li><p>Soláthar earráid tuairisciúil <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>cód <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>don tógálaí:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Good</span>\nValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value&quot;</span><span class=\"p\">),</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;invalid&quot;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Bad</span>\nValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n</li>\n<li><p>Ná cuir athróga isteach sa teachtaireacht; bain úsáid as sealbhóirí agus argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>params' an tógálaí:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Good</span>\nValidationError<span class=\"p\">(</span>\n    _<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value: </span><span class=\"si\">%(value)s</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n    params<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;value&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;42&quot;</span><span class=\"p\">},</span>\n<span class=\"p\">)</span>\n\n<span class=\"c1\"># Bad</span>\nValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span> <span class=\"o\">%</span> value<span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p>Úsáid eochracha mapála in ionad formáidiú suímh. Cuireann sé seo ar chumas na hathróga a chur in aon ord nó iad a fhágáil ar fad agus an teachtaireacht á athscríobh:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Good</span>\nValidationError<span class=\"p\">(</span>\n    _<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value: </span><span class=\"si\">%(value)s</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n    params<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;value&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;42&quot;</span><span class=\"p\">},</span>\n<span class=\"p\">)</span>\n\n<span class=\"c1\"># Bad</span>\nValidationError<span class=\"p\">(</span>\n    _<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n    params<span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s2\">&quot;42&quot;</span><span class=\"p\">,),</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</li>\n<li><p>Fill an teachtaireacht le <code class=\"docutils literal notranslate\">gettext</code> chun aistriúchán a chumasú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Good</span>\nValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value&quot;</span><span class=\"p\">))</span>\n\n<span class=\"c1\"># Bad</span>\nValidationError<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n<p>Ag cur é ar fad le chéile:</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\">raise</span> ValidationError<span class=\"p\">(</span>\n    _<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value: </span><span class=\"si\">%(value)s</span><span class=\"s2\">&quot;</span><span class=\"p\">),</span>\n    code<span class=\"o\">=</span><span class=\"s2\">&quot;invalid&quot;</span><span class=\"p\">,</span>\n    params<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;value&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;42&quot;</span><span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Is gá go háirithe na treoirlínte seo a leanúint má scríobhann tú foirmeacha in-athúsáidte, réimsí foirme</p>\n<p>Cé nach mholtar, má tá tú ag deireadh an slabhra bailíochtaithe (ie do mhodh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>glan () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>foirm) agus má tá a fhios agat nach gcaithfidh tú <em>riam</em> do theachtaireacht earráide a shárú is féidir leat an rud is lú fós a roghnú:</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>ValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Invalid value: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span> <span class=\"o\">%</span> value<span class=\"p\">)</span>\n</code></pre></div>\n<p>&lt;django.forms.Form.errors.as_json () &gt;Baineann na modhanna: Meth: Form.errors.as_data () agus:meth: Form.error&lt;django.forms.Form.errors.as_data () &gt; s.as_json () leas mór as <code class=\"docutils literal notranslate\">ValidationError</code>s atá le feiceáil go hiomlán (le hainm <code class=\"docutils literal notranslate\">cód `agus foclóir `params</code>).</p>\n<section id=\"raising-multiple-errors\">\n<h3>Earráidí iomadúla a ardú<a class=\"heading-anchor\" href=\"#raising-multiple-errors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má aimsíonn tú earráidí iolracha le linn modh glantacháin agus má theastaíonn uait iad go léir a chomharthú chuig an aighdeoir foirme, is féidir liosta earráidí a chur ar aghaidh chuig an tógálaí ValidationError.</p>\n<p>Mar atá thuas, moltar liosta de chásanna <code class=\"docutils literal notranslate\">ValidationError</code> a rith le <code class=\"docutils literal notranslate\">cód ``\\ s agus `params</code> ach oibreoidh liosta teaghráin freisin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"c1\"># Good</span>\n<span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        ValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Error 1&quot;</span><span class=\"p\">),</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;error1&quot;</span><span class=\"p\">),</span>\n        ValidationError<span class=\"p\">(</span>_<span class=\"p\">(</span><span class=\"s2\">&quot;Error 2&quot;</span><span class=\"p\">),</span> code<span class=\"o\">=</span><span class=\"s2\">&quot;error2&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n<span class=\"p\">)</span>\n\n<span class=\"c1\"># Bad</span>\n<span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        _<span class=\"p\">(</span><span class=\"s2\">&quot;Error 1&quot;</span><span class=\"p\">),</span>\n        _<span class=\"p\">(</span><span class=\"s2\">&quot;Error 2&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"using-validation-in-practice\">\n<h2>Bailíochtú a úsáid i gcleachtas<a class=\"heading-anchor\" href=\"#using-validation-in-practice\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Mhínigh na hailt roimhe seo conas a oibríonn bailíochtú i gcoitinne le haghaidh Ós rud é go bhféadfadh sé a bheith níos éasca uaireanta rudaí a chur i bhfeidhm trí gach gné atá in úsáid a fheiceáil, seo sraith samplaí beaga a úsáideann gach ceann de na gnéithe roimhe seo.</p>\n<section id=\"using-validators\">\n<span id=\"validators\"></span><h3>Bailíochtóirí a úsáid<a class=\"heading-anchor\" href=\"#using-validators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tacaíonn réimsí foirme (agus samhail) Django le húsáid feidhmeanna fóntais agus ranganna ar a dtugtar bailíochtóirí. Is réad nó feidhm inghlaonta é bailíochtaitheoir a thógann luach agus nach dtugann aon rud ar ais má tá an luach bailí nó má ardaíonn a:exc: ~django.core.exceptions.validationError mura bhfuil. Is féidir iad seo a chur chuig tógálaí réimse, trí argóint <code class=\"docutils literal notranslate\">validators ``an réimse, nó a shainiú ar aicme:class: `~django.forms.field` féin leis an tréith ``default_validators</code>.</p>\n<p>Is féidir bailíochtóirí a úsáid chun luachanna taobh istigh den réimse a bhailíochtú, déanaimis féachaint ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Slugfield` Django:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"kn\">import</span> validators\n<span class=\"kn\">from</span> <span class=\"nn\">django.forms</span> <span class=\"kn\">import</span> CharField\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SlugField</span><span class=\"p\">(</span>CharField<span class=\"p\">):</span>\n    default_validators <span class=\"o\">=</span> <span class=\"p\">[</span>validators<span class=\"o\">.</span>validate_slug<span class=\"p\">]</span>\n</code></pre></div>\n<p>Mar a fheiceann tú, is <code class=\"docutils literal notranslate\">Charfield` é ``Slugfield</code> le bailíochtóir saincheaptha a bhailíochnaíonn go gcloíonn an téacs curtha isteach do roinnt rialacha carachtar. Is féidir é seo a dhéanamh freisin ar an sainmhíniú allamuigh mar sin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>slug <span class=\"o\">=</span> forms<span class=\"o\">.</span>SlugField<span class=\"p\">()</span>\n</code></pre></div>\n<p>atá coibhéiseach le:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>slug <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>validators<span class=\"o\">=</span><span class=\"p\">[</span>validators<span class=\"o\">.</span>validate_slug<span class=\"p\">])</span>\n</code></pre></div>\n<p>Common cases such as validating against an email or a regular expression can be\nhandled using existing validator classes available in Django. For example,\n<code class=\"docutils literal notranslate\">validators.validate_slug</code> is an instance of\na <a class=\"reference internal\" href=\"/ga/6.0/ref/validators/#django.core.validators.RegexValidator\" title=\"django.core.validators.RegexValidator\"><code class=\"xref py py-class docutils literal notranslate\">RegexValidator</code></a> constructed with the first\nargument being the pattern: <code class=\"docutils literal notranslate\">^[-a-zA-Z0-9_]+\\Z</code>. See the section on\n<a class=\"reference internal\" href=\"/ga/6.0/ref/validators/\"><span class=\"doc\">writing validators</span></a> to see a list of what is already\navailable and for an example of how to write a validator.</p>\n</section>\n<section id=\"form-field-default-cleaning\">\n<h3>Glanadh réamhshocraithe réimse<a class=\"heading-anchor\" href=\"#form-field-default-cleaning\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Déanaimis réimse foirme saincheaptha a chruthú ar dtús a bhailíochnaíonn a ionchur ná sreang ina bhfuil seoltaí ríomhphoist scartha le camóg. Breathnaíonn an rang iomlán mar seo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.validators</span> <span class=\"kn\">import</span> validate_email\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MultiEmailField</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Field<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">to_python</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> value<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Normalize data to a list of strings.&quot;&quot;&quot;</span>\n        <span class=\"c1\"># Return an empty list if no input was given.</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> value<span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[]</span>\n        <span class=\"k\">return</span> value<span class=\"o\">.</span>split<span class=\"p\">(</span><span class=\"s2\">&quot;,&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">validate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> value<span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;Check if value consists only of valid emails.&quot;&quot;&quot;</span>\n        <span class=\"c1\"># Use the parent&#39;s handling of required fields, etc.</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>validate<span class=\"p\">(</span>value<span class=\"p\">)</span>\n        <span class=\"k\">for</span> email <span class=\"ow\">in</span> value<span class=\"p\">:</span>\n            validate_email<span class=\"p\">(</span>email<span class=\"p\">)</span>\n</code></pre></div>\n<p>Beidh na modhanna seo á reáchtáil ag gach foirm a úsáideann an réimse seo sula bhféadfar aon rud eile a dhéanamh le sonraí an réimse. Is glanadh é seo atá sonrach don chineál seo réimse, beag beann ar an gcaoi a n-úsáidtear é ina dhiaidh sin.</p>\n<p>Cruthaímid <code class=\"docutils literal notranslate\">Foirm Teagmhála</code> chun a thaispeáint conas a úsáideann tú an réimse seo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    subject <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    message <span class=\"o\">=</span> forms<span class=\"o\">.</span>CharField<span class=\"p\">()</span>\n    contact_email <span class=\"o\">=</span> forms<span class=\"o\">.</span>EmailField<span class=\"p\">()</span>\n    recipients <span class=\"o\">=</span> MultiEmailField<span class=\"p\">()</span>\n    urgent <span class=\"o\">=</span> forms<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>required<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Úsáid <code class=\"docutils literal notranslate\">Multiemailfield</code> cosúil le haon réimse foirme eile. Nuair a ghlaofar an modh <code class=\"docutils literal notranslate\">is_valid () ``ar an bhfoirm, reáchtálfar an modh ``multiemailfield.clean ()</code> mar chuid den phróiseas glantacháin agus glaóidh sé, ina dhiaidh sin, na modhanna saincheaptha <code class=\"docutils literal notranslate\">to_python () ``agus ``validate ()</code>.</p>\n</section>\n<section id=\"cleaning-a-specific-field-attribute\">\n<h3>Glanadh tréith réimse ar leith<a class=\"heading-anchor\" href=\"#cleaning-a-specific-field-attribute\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Continuing on from the previous example, suppose that in our <code class=\"docutils literal notranslate\">ContactForm</code>,\nwe want to make sure that the <code class=\"docutils literal notranslate\">recipients</code> field only contains addresses that\nare <code class=\"docutils literal notranslate\">&#64;example.com</code>. This is validation that is specific to our form, so we\ndon't want to put it into the general <code class=\"docutils literal notranslate\">MultiEmailField</code> class. Instead, we\nwrite a cleaning method that operates on the <code class=\"docutils literal notranslate\">recipients</code> field, like so:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ValidationError\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    <span class=\"c1\"># Everything as before.</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">clean_recipients</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        data <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>cleaned_data<span class=\"p\">[</span><span class=\"s2\">&quot;recipients&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">all</span><span class=\"p\">(</span>email<span class=\"o\">.</span>endswith<span class=\"p\">(</span><span class=\"s2\">&quot;@example.com&quot;</span><span class=\"p\">)</span> <span class=\"k\">for</span> email <span class=\"ow\">in</span> data<span class=\"p\">):</span>\n            <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span><span class=\"s2\">&quot;All recipients must be @example.com.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Always return a value to use as the new cleaned data, even if</span>\n        <span class=\"c1\"># this method didn&#39;t change it.</span>\n        <span class=\"k\">return</span> data\n</code></pre></div>\n</section>\n<section id=\"cleaning-and-validating-fields-that-depend-on-each-other\">\n<span id=\"validating-fields-with-clean\"></span><h3>Réimsí a ghlanadh agus a bhailíochtú atá ag brath ar a chéile<a class=\"heading-anchor\" href=\"#cleaning-and-validating-fields-that-depend-on-each-other\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Suppose we add another requirement to our contact form: if the <code class=\"docutils literal notranslate\">urgent</code> field\nis <code class=\"docutils literal notranslate\">True</code>, the <code class=\"docutils literal notranslate\">subject</code> must contain <code class=\"docutils literal notranslate\">&quot;help&quot;</code>. We are performing\nvalidation on more than one field at a time, so the form's <a class=\"reference internal\" href=\"/ga/6.0/ref/forms/api/#django.forms.Form.clean\" title=\"django.forms.Form.clean\"><code class=\"xref py py-meth docutils literal notranslate\">clean()</code></a>\nmethod is a good spot to do this. Notice that we are talking about the\n<code class=\"docutils literal notranslate\">clean()</code> method on the form here, whereas earlier we were writing a\n<code class=\"docutils literal notranslate\">clean()</code> method on a field. It's important to keep the field and form\ndifference clear when working out where to validate things. Fields are single\ndata points, forms are a collection of fields.</p>\n<p>Faoin am a dtugtar modh <code class=\"docutils literal notranslate\">clean () ``ar an bhfoirm, beidh na modhanna glan réimse aonair go léir á reáchtáil (an dá chuid roimhe seo), mar sin déanfar ``self.cleaned_data</code> daonra le haon sonraí a tháinig maireachtáil go dtí seo. Mar sin ní mór duit cuimhneamh freisin a cheadú go mb'fhéidir nár mhair na réimsí atá tú ag iarraidh a bhailíochtú sna seiceálacha réimse aonair tosaigh.</p>\n<p>Tá dhá bhealach ann chun aon earráidí ón gcéim seo a thuairisciú. Is dócha gurb é an modh is coitianta an earráid a thaispeáint ag barr na foirme. Chun earráid den sórt sin a chruthú, is féidir leat <code class=\"docutils literal notranslate\">ValidationError</code> a ardú ón modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>clean () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"kn\">import</span> ValidationError\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    <span class=\"c1\"># Everything as before.</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        cleaned_data <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>clean<span class=\"p\">()</span>\n        urgent <span class=\"o\">=</span> cleaned_data<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;urgent&quot;</span><span class=\"p\">)</span>\n        subject <span class=\"o\">=</span> cleaned_data<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> urgent <span class=\"ow\">and</span> subject<span class=\"p\">:</span>\n            <span class=\"c1\"># Only do something if both fields are valid so far.</span>\n            <span class=\"k\">if</span> <span class=\"s2\">&quot;help&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> subject<span class=\"p\">:</span>\n                <span class=\"k\">raise</span> ValidationError<span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;Must put &#39;help&#39; in the subject for urgent requests.&quot;</span>\n                <span class=\"p\">)</span>\n</code></pre></div>\n<p>Sa chód seo, má ardaítear an earráid bailíochtaithe, taispeánfaidh an fhoirm teachtaireacht earráide ag barr na foirme (de ghnáth) ag cur síos ar an bhfadhb. Is earráidí neamh-réimse iad earráidí den sórt sin, a thaispeántar sa teimpléad le <code class=\"docutils literal notranslate\">{{form.non_field_errors}}</code>.</p>\n<p>Cinntíonn an glao chuig <code class=\"docutils literal notranslate\">super () .clean () ``sa chód samplaí go gcoinnítear aon loighic bailíochtaithe i ranganna tuismitheoirí. Má tá foirm eile ag d'oidhreacht nach gcuireann foclóir ``cleaned_data ``ar ais ina modh ``clean ()</code> (is roghnach é sin a dhéanamh), ansin ná sannadh <code class=\"docutils literal notranslate\">cleaned_data</code> do thoradh an ghlaonna <code class=\"docutils literal notranslate\">super () ``agus bain úsáid as ``self.cleaned_data</code> ina ionad:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>clean<span class=\"p\">()</span>\n    urgent <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span>cleaned_data<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;urgent&quot;</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>The second approach for reporting validation errors might involve assigning the\nerror message to one of the fields. In this case, let's assign an error message\nto both the &quot;subject&quot; and &quot;urgent&quot; rows in the form display. Be careful when\ndoing this in practice, since it can lead to confusing form output. We're\nshowing what is possible here and leaving it up to you and your designers to\nwork out what works effectively in your particular situation. Our new code\n(replacing the previous sample) looks like 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=\"kn\">from</span> <span class=\"nn\">django</span> <span class=\"kn\">import</span> forms\n\n\n<span class=\"k\">class</span> <span class=\"nc\">ContactForm</span><span class=\"p\">(</span>forms<span class=\"o\">.</span>Form<span class=\"p\">):</span>\n    <span class=\"c1\"># Everything as before.</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        cleaned_data <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span>clean<span class=\"p\">()</span>\n        urgent <span class=\"o\">=</span> cleaned_data<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;urgent&quot;</span><span class=\"p\">)</span>\n        subject <span class=\"o\">=</span> cleaned_data<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> urgent <span class=\"ow\">and</span> subject <span class=\"ow\">and</span> <span class=\"s2\">&quot;help&quot;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> subject<span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>add_error<span class=\"p\">(</span>\n                <span class=\"s2\">&quot;subject&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Must put &#39;help&#39; in the subject for urgent requests.&quot;</span>\n            <span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span>add_error<span class=\"p\">(</span>\n                <span class=\"s2\">&quot;urgent&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Must not mark urgent unless &#39;help&#39; is in the subject.&quot;</span>\n            <span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir leis an dara argóint de <code class=\"docutils literal notranslate\">add_error () ``a bheith ina shreang, nó b'fhéidir mar shampla de ``ValidationError</code>. Féach:ref: raising-validation-error le haghaidh tuilleadh sonraí. Tabhair faoi deara go mbaineann <code class=\"docutils literal notranslate\">add_error () ``an réimse go huathoibríoch ó ``cleaned_data</code>.</p>\n</section>\n</section>","rootId":"form-and-field-validation","toc":[{"title":"“Earráid Bailíochtaithe” a ardú","anchor":"raising-validationerror","children":[{"title":"Earráidí iomadúla a ardú","anchor":"raising-multiple-errors","children":[]}]},{"title":"Bailíochtú a úsáid i gcleachtas","anchor":"using-validation-in-practice","children":[{"title":"Bailíochtóirí a úsáid","anchor":"using-validators","children":[]},{"title":"Glanadh réamhshocraithe réimse","anchor":"form-field-default-cleaning","children":[]},{"title":"Glanadh tréith réimse ar leith","anchor":"cleaning-a-specific-field-attribute","children":[]},{"title":"Réimsí a ghlanadh agus a bhailíochtú atá ag brath ar a chéile","anchor":"cleaning-and-validating-fields-that-depend-on-each-other","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Tagairt API","url":"/ga/6.0/ref/"},{"docname":"ref/forms/index","title":"Foirmeacha","url":"/ga/6.0/ref/forms/"}],"prev":{"docname":"ref/forms/widgets","title":"Giuirléidí","url":"/ga/6.0/ref/forms/widgets/"},"next":{"docname":"ref/logging","title":"Logáil","url":"/ga/6.0/ref/logging/"},"formats":{"html":"/ga/6.0/ref/forms/validation/","markdown":"/ga/6.0/ref/forms/validation.md","json":"/ga/6.0/ref/forms/validation.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/forms/validation.txt","official":"https://docs.djangoproject.com/ga/6.0/ref/forms/validation/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}