{"title":"Creat seiceála an chórais","version":"6.1","locale":"ga","docname":"topics/checks","url":"/ga/6.1/topics/checks/","canonical":"https://djangodocs.dev/ga/6.1/topics/checks/","summary":"Is sraith seiceálacha statacha é creat seiceála an chórais chun tionscadail Django a bhailíochtú. Braithíonn sé fadhbanna coitianta agus soláthraíonn sé leideanna…","html":"<span id=\"system-check-framework\"></span><h1>Creat seiceála an chórais<a class=\"heading-anchor\" href=\"#module-django.core.checks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Is sraith seiceálacha statacha é creat seiceála an chórais chun tionscadail Django a bhailíochtú. Braithíonn sé fadhbanna coitianta agus soláthraíonn sé leideanna maidir le conas iad a shocrú. Tá an creat inleathnaithe ionas gur féidir leat do sheiceálacha féin a chur leis go héasca.</p>\n<p>Is féidir seiceálacha a spreagadh go sainráite tríd an ordú:djadmin: check. Cuirtear seiceálacha a spreagadh go hiontach roimh fhormhór na n-orduithe, lena n-áirítear: djadmin: runserver agus:djadmin: migrate. Ar chúiseanna feidhmíochta, ní reáchtáiltear seiceálacha mar chuid den chruach WSGI a úsáidtear in imscaradh. Más gá duit seiceálacha córais a reáchtáil ar do fhreastalaí imscartha, spreag iad go sainráite ag baint úsáide as: djadmin: check.</p>\n<p>Cuirfidh earráidí tromchúiseacha cosc ar orduithe Django (mar shampla: djadmin: runserver) ó rith ar chor ar bith. Tuairiscítear mionfhadhbanna don chonsól. Má rinne tú iniúchadh ar chúis rabhaidh agus má tá tú sásta neamhaird a dhéanamh air, is féidir leat rabhaidh sonracha a cheilt ag baint úsáide as an socrú: setting: SILENCED_SYSTEM_CHECKS i do chomhad socruithe tionscadail.</p>\n<p>Is féidir liosta iomlán de na seiceálacha go léir is féidir le Django a ardú a fháil in:doc: Tagairt seiceála córas &lt;/ref/checks&gt;.</p>\n<section id=\"writing-your-own-checks\">\n<h2>Do sheiceálacha féin a scríobh<a class=\"heading-anchor\" href=\"#writing-your-own-checks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá an creat solúbtha agus tugann sé deis duit feidhmeanna a scríobh a dhéanann aon chineál eile seiceála a d'fhéadfadh a bheith ag teastáil uait. Seo a leanas feidhm sheiceála stub sampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.checks</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Error</span><span class=\"p\">,</span> <span class=\"n\">register</span>\n\n\n<span class=\"nd\">@register</span><span class=\"p\">()</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">example_check</span><span class=\"p\">(</span><span class=\"n\">app_configs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"n\">errors</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"c1\"># ... your check logic here</span>\n    <span class=\"k\">if</span> <span class=\"n\">check_failed</span><span class=\"p\">:</span>\n        <span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span>\n            <span class=\"n\">Error</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;an error&quot;</span><span class=\"p\">,</span>\n                <span class=\"n\">hint</span><span class=\"o\">=</span><span class=\"s2\">&quot;A hint.&quot;</span><span class=\"p\">,</span>\n                <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"n\">checked_object</span><span class=\"p\">,</span>\n                <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"s2\">&quot;myapp.E001&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">errors</span>\n</code></pre></div>\n<p>Caithfidh an fheidhm seiceála* glacadh le hargóint <code class=\"docutils literal notranslate\"><span class=\"pre\">app_configs</span></code>; is é an argóint seo an liosta d'iarratais ar chóir a iniúchadh. Má tá <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>None <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, ní mór an seiceáil a reáchtáil ar* gach aipeanna suiteáilte sa tionscadal.</p>\n<p>Gheobhaidh an seic argóint eochairfhocal <code class=\"docutils literal notranslate\"><span class=\"pre\">bunachar</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">``.</span> <span class=\"pre\">Is</span> <span class=\"pre\">liosta</span> <span class=\"pre\">é</span> <span class=\"pre\">seo</span> <span class=\"pre\">d'ainmneacha</span> <span class=\"pre\">bunachar</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">ar</span> <span class=\"pre\">féidir</span> <span class=\"pre\">a</span> <span class=\"pre\">naisc</span> <span class=\"pre\">a</span> <span class=\"pre\">úsáid</span> <span class=\"pre\">chun</span> <span class=\"pre\">cumraíocht</span> <span class=\"pre\">leibhéal</span> <span class=\"pre\">bunachar</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">a</span> <span class=\"pre\">iniúchadh.</span> <span class=\"pre\">Más</span> <span class=\"pre\">é</span> <span class=\"pre\">```bunachar</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">``None</span></code>, ní mór don seiceáil aon naisc bunachar sonraí a úsáid.</p>\n<p>Tá an argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a><a href=\"#id3\"><span class=\"problematic\" id=\"id4\">**</span></a>kwargs <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>ag teastáil le haghaidh leathnú amach anseo.</p>\n<section id=\"messages\">\n<h3>Teachtaireachtaí<a class=\"heading-anchor\" href=\"#messages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Caithfidh an fheidhm liosta teachtaireachtaí a thabhairt ar ais. Mura bhfaightear aon fhadhbanna mar thoradh ar an seiceáil, caithfidh an fheidhm seiceála liosta folamh a thabhairt ar ais.</p>\n<p>Caithfidh na rabhaidh agus na hearráidí arna ardú ag an modh seiceála a bheith ina gcásanna de:class: ~django.core.checks.checkMessage. Cuimsíonn sampla de:class: ~Django.Core.Checks.CheckMessage earráid nó rabhadh amháin a thuairiscithe. Soláthraíonn sé comhthéacs agus leideanna is infheidhme maidir leis an teachtaireacht, agus aitheantóir uathúil a úsáidtear chun críocha scagtha.</p>\n<p>Tá an coincheap an-chosúil le teachtaireachtaí óna:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>creat teachtaireachtaí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>nó la:doc: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>creat logála <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>&lt;/ref/contrib/messages&gt; &lt;/topics/logging&gt;. Tá 'leibhéal' clibeáilte ag teachtaireachtaí a léiríonn déine na teachtaireachta.</p>\n<p>Tá aicearraí ann freisin chun teachtaireachtaí a chruthú le leibhéil choiteanna a dhéanamh níos éasca. Agus na ranganna seo á úsáid agat is féidir leat an argóint <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>leibhéil <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a fhágáil toisc go bhfuil ainm an ranga intuigthe air.</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ga/6.1/ref/checks/#django.core.checks.Debug\" title=\"django.core.checks.Debug\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Debug</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.1/ref/checks/#django.core.checks.Info\" title=\"django.core.checks.Info\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Info</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.1/ref/checks/#django.core.checks.Warning\" title=\"django.core.checks.Warning\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Warning</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.1/ref/checks/#django.core.checks.Error\" title=\"django.core.checks.Error\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Error</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.1/ref/checks/#django.core.checks.Critical\" title=\"django.core.checks.Critical\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Critical</span></code></a></p></li>\n</ul>\n</section>\n<section id=\"registering-and-labeling-checks\">\n<span id=\"registering-labeling-checks\"></span><h3>Seiceálacha clárú agus lipéad<a class=\"heading-anchor\" href=\"#registering-and-labeling-checks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ar deireadh, caithfear d'fheidhm seiceála a chlárú go sainráite le clárlann seiceála córais. &lt;django.apps.AppConfig.ready&gt;Ba chóir seiceálacha a chlárú i gcomhad a luchtaítear nuair a luchtaítear d'iarratas; mar shampla, sa modh:meth: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>AppConfig.ready () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.checks.register\">\n<span class=\"sig-name descname\"><span class=\"pre\">register</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">*tags)(function</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.checks.register\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Is féidir leat an oiread clibeanna a chur chuig <code class=\"docutils literal notranslate\"><span class=\"pre\">clár</span></code> agus is mian leat d'fhonn do sheic a lipéadú. Tá seiceálacha clibeála úsáideach ós rud é go gceadaíonn sé duit ach grúpa áirithe seiceálacha a reáchtáil. Mar shampla, chun seiceáil comhoiriúnachta a chlárú, déanfá an glao seo a leanas:</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.core.checks</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">register</span><span class=\"p\">,</span> <span class=\"n\">Tags</span>\n\n\n<span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">Tags</span><span class=\"o\">.</span><span class=\"n\">compatibility</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_check</span><span class=\"p\">(</span><span class=\"n\">app_configs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"c1\"># ... perform compatibility checks and collect errors</span>\n    <span class=\"k\">return</span> <span class=\"n\">errors</span>\n</code></pre></div>\n<p>Is féidir leat “seiceálacha imscartha” a chlárú nach bhfuil ábhartha ach le comhad socruithe táirgeachta 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=\"nd\">@register</span><span class=\"p\">(</span><span class=\"n\">Tags</span><span class=\"o\">.</span><span class=\"n\">security</span><span class=\"p\">,</span> <span class=\"n\">deploy</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_check</span><span class=\"p\">(</span><span class=\"n\">app_configs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Ní reáchtálfar na seiceálacha seo ach amháin má úsáidtear an rogha: check --deploy.</p>\n<p>Is féidir leat <code class=\"docutils literal notranslate\"><span class=\"pre\">clár</span></code> a úsáid freisin mar fheidhm seachas maisitheoir trí réad inghlaonta (feidhm de ghnáth) a chur ar aghaidh mar an chéad argóint chun <code class=\"docutils literal notranslate\"><span class=\"pre\">clár</span></code>.</p>\n<p>Tá an cód thíos comhionann leis an gcód thuas:</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=\"w\"> </span><span class=\"nf\">my_check</span><span class=\"p\">(</span><span class=\"n\">app_configs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n\n\n<span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">my_check</span><span class=\"p\">,</span> <span class=\"n\">Tags</span><span class=\"o\">.</span><span class=\"n\">security</span><span class=\"p\">,</span> <span class=\"n\">deploy</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"field-constraint-model-manager-template-engine-task-and-database-checks\">\n<span id=\"field-checking\"></span><h3>Field, constraint, model, manager, template engine, task, and database checks<a class=\"heading-anchor\" href=\"#field-constraint-model-manager-template-engine-task-and-database-checks\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>I roinnt cásanna, ní bheidh ort do fheidhm seiceála a chlárú - is féidir leat piggyback ar chlárú atá ann cheana.</p>\n<p>Fields, constraints, models, model managers, template engines, task backends,\nand database backends all implement a <code class=\"docutils literal notranslate\"><span class=\"pre\">check()</span></code> method that is already\nregistered with the check framework. If you want to add extra checks, you can\nextend the implementation on the base class, perform any extra checks you need,\nand append any messages to those generated by the base class. It's recommended\nthat you delegate each check to separate methods.</p>\n<p>Smaoinigh ar shampla ina bhfuil réimse saincheaptha darb ainm <code class=\"docutils literal notranslate\"><span class=\"pre\">RangedIntegerField</span></code> á chur i bhfeidhm agat. Cuireann an réimse seo argóintí <code class=\"docutils literal notranslate\"><span class=\"pre\">min</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> le tógálaí <code class=\"docutils literal notranslate\"><span class=\"pre\">IntegerField</span></code>. B'fhéidir gur mhaith leat seic a chur leis chun a chinntiú go soláthraíonn úsáideoirí luach íosta atá níos lú ná nó comhionann leis an luach uasta. Taispeánann an snippet cód seo a leanas conas is féidir leat an seiceáil seo a chur i bhfeidhm:</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.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">checks</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RangedIntegerField</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"nb\">min</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"nb\">max</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min</span> <span class=\"o\">=</span> <span class=\"nb\">min</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max</span> <span class=\"o\">=</span> <span class=\"nb\">max</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">check</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the superclass</span>\n        <span class=\"n\">errors</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">check</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Do some custom checks and add messages to `errors`:</span>\n        <span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_check_min_max_values</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">))</span>\n\n        <span class=\"c1\"># Return all errors and warnings</span>\n        <span class=\"k\">return</span> <span class=\"n\">errors</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">_check_min_max_values</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">max</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">[</span>\n                <span class=\"n\">checks</span><span class=\"o\">.</span><span class=\"n\">Error</span><span class=\"p\">(</span>\n                    <span class=\"s2\">&quot;min greater than max.&quot;</span><span class=\"p\">,</span>\n                    <span class=\"n\">hint</span><span class=\"o\">=</span><span class=\"s2\">&quot;Decrease min or increase max.&quot;</span><span class=\"p\">,</span>\n                    <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n                    <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"s2\">&quot;myapp.E001&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">)</span>\n            <span class=\"p\">]</span>\n        <span class=\"c1\"># When no error, return an empty list</span>\n        <span class=\"k\">return</span> <span class=\"p\">[]</span>\n</code></pre></div>\n<p>Dá dteastaíonn uait seiceálacha a chur le bainisteoir samhail, glacfá an cur chuige céanna ar do fho-aicme de:class: ~Django.db.Models.Manager.</p>\n<p>Más mian leat seic a chur le rang samhail, is é an cur chuige <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">*</span></a>beagnach mar an gcéanna: is é an t-aon difríocht ná gur modh ranga é an seiceáil, ní modh sampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">check</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">errors</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">check</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"c1\"># ... your own checks ...</span>\n        <span class=\"k\">return</span> <span class=\"n\">errors</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>In older versions, constraints didn't implement a <code class=\"docutils literal notranslate\"><span class=\"pre\">check()</span></code> method.</p>\n</aside>\n</section>\n<section id=\"writing-tests\">\n<h3>Tástála scríbhneo<a class=\"heading-anchor\" href=\"#writing-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá teachtaireachtaí inchomparáide. Ligeann sé sin duit tástálacha a scríobh go héasca:</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.core.checks</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Error</span>\n\n<span class=\"n\">errors</span> <span class=\"o\">=</span> <span class=\"n\">checked_object</span><span class=\"o\">.</span><span class=\"n\">check</span><span class=\"p\">()</span>\n<span class=\"n\">expected_errors</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">Error</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;an error&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">hint</span><span class=\"o\">=</span><span class=\"s2\">&quot;A hint.&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"n\">checked_object</span><span class=\"p\">,</span>\n        <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"s2\">&quot;myapp.E001&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n<span class=\"p\">]</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">errors</span><span class=\"p\">,</span> <span class=\"n\">expected_errors</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"writing-integration-tests\">\n<h4>Tástálacha comhtháthaithe a<a class=\"heading-anchor\" href=\"#writing-integration-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Mar gheall ar an ngá atá le seiceálacha áirithe a chlárú nuair a luchtaíonn an feidhmchlár, d'fhéadfadh sé a bheith úsáideach a gcomhtháthú a thástáil laistigh Is féidir é seo a chur i gcrích tríd an bhfeidhm: func: ~django.core.management.call_command a úsáid.</p>\n<p>&lt;sites-system-checks&gt;Mar shampla, léiríonn an tástáil seo go gcaithfidh an socrúit:setting: SITE_ID a bheith ina sláimhir, ina ion:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>seiceáil ó chreat na suíomhanna <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>:</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.core.management</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">call_command</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SystemCheckError</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span><span class=\"p\">,</span> <span class=\"n\">modify_settings</span><span class=\"p\">,</span> <span class=\"n\">override_settings</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SystemCheckIntegrationTest</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@override_settings</span><span class=\"p\">(</span><span class=\"n\">SITE_ID</span><span class=\"o\">=</span><span class=\"s2\">&quot;non_integer&quot;</span><span class=\"p\">)</span>\n    <span class=\"nd\">@modify_settings</span><span class=\"p\">(</span><span class=\"n\">INSTALLED_APPS</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.sites&quot;</span><span class=\"p\">})</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_non_integer_site_id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;(sites.E101) The SITE_ID setting must be an integer.&quot;</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRaisesMessage</span><span class=\"p\">(</span><span class=\"n\">SystemCheckError</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n            <span class=\"n\">call_command</span><span class=\"p\">(</span><span class=\"s2\">&quot;check&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Smaoinigh ar an seiceáil seo a leanas a eisíonn rabhadh maidir le himscaradh mura bhfuil socrú saincheaptha darb ainm ENABLE_ANALYTICS` socraithe go <code class=\"docutils literal notranslate\"><span class=\"pre\">True</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.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.checks</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"ne\">Warning</span><span class=\"p\">,</span> <span class=\"n\">register</span>\n\n\n<span class=\"nd\">@register</span><span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"n\">deploy</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">check_enable_analytics_is_true_on_deploy</span><span class=\"p\">(</span><span class=\"n\">app_configs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"n\">errors</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">if</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"p\">,</span> <span class=\"s2\">&quot;ENABLE_ANALYTICS&quot;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n        <span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span>\n            <span class=\"ne\">Warning</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;The ENABLE_ANALYTICS setting should be set to True in deployment.&quot;</span><span class=\"p\">,</span>\n                <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"s2\">&quot;myapp.W001&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">errors</span>\n</code></pre></div>\n<p>Ós rud é nach n-ardóidh an seiceáil seo SystemCheckerror`, is féidir láithreacht na teachtaireachta rabhaidh san aschur <code class=\"docutils literal notranslate\"><span class=\"pre\">stderr</span></code> a dhearbhú 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=\"w\"> </span><span class=\"nn\">io</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StringIO</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">call_command</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span><span class=\"p\">,</span> <span class=\"n\">override_settings</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EnableAnalyticsDeploymentCheckTest</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@override_settings</span><span class=\"p\">(</span><span class=\"n\">ENABLE_ANALYTICS</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_when_set_to_none</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">stderr</span> <span class=\"o\">=</span> <span class=\"n\">StringIO</span><span class=\"p\">()</span>\n        <span class=\"n\">call_command</span><span class=\"p\">(</span><span class=\"s2\">&quot;check&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;-t&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;--deploy&quot;</span><span class=\"p\">,</span> <span class=\"n\">stderr</span><span class=\"o\">=</span><span class=\"n\">stderr</span><span class=\"p\">)</span>\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s2\">&quot;(myapp.W001) The ENABLE_ANALYTICS setting should be set &quot;</span>\n            <span class=\"s2\">&quot;to True in deployment.&quot;</span>\n        <span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIn</span><span class=\"p\">(</span><span class=\"n\">message</span><span class=\"p\">,</span> <span class=\"n\">stderr</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">())</span>\n</code></pre></div>\n</section>\n</section>\n</section>","rootId":"module-django.core.checks","toc":[{"title":"Do sheiceálacha féin a scríobh","anchor":"writing-your-own-checks","children":[{"title":"Teachtaireachtaí","anchor":"messages","children":[]},{"title":"Seiceálacha clárú agus lipéad","anchor":"registering-and-labeling-checks","children":[]},{"title":"Field, constraint, model, manager, template engine, task, and database checks","anchor":"field-constraint-model-manager-template-engine-task-and-database-checks","children":[]},{"title":"Tástála scríbhneo","anchor":"writing-tests","children":[{"title":"Tástálacha comhtháthaithe a","anchor":"writing-integration-tests","children":[]}]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.1/topics/"}],"prev":{"docname":"topics/signals","title":"Comharthaí","url":"/ga/6.1/topics/signals/"},"next":{"docname":"topics/async","title":"Tacaíocht asincrónach","url":"/ga/6.1/topics/async/"},"formats":{"html":"/ga/6.1/topics/checks/","markdown":"/ga/6.1/topics/checks.md","json":"/ga/6.1/topics/checks.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/checks.txt","official":"https://docs.djangoproject.com/ga/6.1/topics/checks/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}