{"title":"Conas imirce bunachar sonraí a chruthú","version":"6.0","locale":"ga","docname":"howto/writing-migrations","url":"/ga/6.0/howto/writing-migrations/","canonical":"https://djangodocs.dev/ga/6.0/howto/writing-migrations/","summary":"Míníonn an doiciméad seo conas imirce bunachar sonraí a struchtúrú agus a scríobh do chásanna éagsúla a d'fhéad Le haghaidh ábhar tosaigh maidir le himirce,…","html":"<h1>Conas imirce bunachar sonraí a chruthú<a class=\"heading-anchor\" href=\"#how-to-create-database-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Míníonn an doiciméad seo conas imirce bunachar sonraí a struchtúrú agus a scríobh do chásanna éagsúla a d'fhéad Le haghaidh ábhar tosaigh maidir le himirce, féach:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>an treoir ábhair <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>&lt;/topics/migrations&gt;.</p>\n<section id=\"data-migrations-and-multiple-databases\">\n<span id=\"id1\"></span><h2>Imirce sonraí agus bunachair sonraí iolracha<a class=\"heading-anchor\" href=\"#data-migrations-and-multiple-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Agus bunachair sonraí iolracha á úsáid agat, b'fhéidir go mbeidh ort a fháil amach cibé acu imirce a reáchtáil i gcoinne bunachar sonraí áirithe nó Mar shampla, b'fhéidir gur mhaith leat imirce a reáchtáil** ar bhunachar sonraí áirithe.</p>\n<p>D'fhonn é sin a dhéanamh is féidir leat ainm an nasc bunachar sonraí a sheiceáil taobh istigh d'oibríocht <code class=\"docutils literal notranslate\">RunPython</code> trí fhéachaint ar an tréith schema_editor.connection.alias`:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n\n\n<span class=\"k\">def</span> <span class=\"nf\">forwards</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"k\">if</span> schema_editor<span class=\"o\">.</span>connection<span class=\"o\">.</span>alias <span class=\"o\">!=</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span>\n    <span class=\"c1\"># Your migration code goes here</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"c1\"># Dependencies to other migrations</span>\n    <span class=\"p\">]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>forwards<span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>You can also provide hints that will be passed to the <a class=\"reference internal\" href=\"/ga/6.0/topics/db/multi-db/#allow_migrate\" title=\"allow_migrate\"><code class=\"xref py py-meth docutils literal notranslate\">allow_migrate()</code></a>\nmethod of database routers as <code class=\"docutils literal notranslate\">**hints</code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myapp/dbrouters.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span> <span class=\"nc\">MyRouter</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span> <span class=\"nf\">allow_migrate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> db<span class=\"p\">,</span> app_label<span class=\"p\">,</span> model_name<span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"o\">**</span>hints<span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"s2\">&quot;target_db&quot;</span> <span class=\"ow\">in</span> hints<span class=\"p\">:</span>\n            <span class=\"k\">return</span> db <span class=\"o\">==</span> hints<span class=\"p\">[</span><span class=\"s2\">&quot;target_db&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n</code></pre></figure>\n<p>Ansin, chun é seo a ghiaráil i do imirce, déan an méid 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=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n\n\n<span class=\"k\">def</span> <span class=\"nf\">forwards</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"c1\"># Your migration code goes here</span>\n    <span class=\"o\">...</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"c1\"># Dependencies to other migrations</span>\n    <span class=\"p\">]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>forwards<span class=\"p\">,</span> hints<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;target_db&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">}),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Mura ndéanann d'oibríocht `` RunPython`` nó `` RunSQL`` difear ach do mhúnla amháin, is dea-chleachtas é `` model_name`` a chur ar aghaidh mar leid chun é a dhéanamh chomh trédhearcach agus is féidir don ródaire. Tá sé seo tábhachtach go háirithe maidir le haipeanna ath-inúsáidte agus tríú páirtí.</p>\n</section>\n<section id=\"migrations-that-add-unique-fields\">\n<h2>Imirce a chuireann réimsí uathúla leis<a class=\"heading-anchor\" href=\"#migrations-that-add-unique-fields\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Má chuirtear ascnamh “gnáth” i bhfeidhm a chuireann réimse uathúil neamh-neamhnithe le tábla le sraitheanna atá ann cheana féin, ardófar earráid mar ní ghintear an luach a úsáidtear chun sraitheanna atá ann cheana a líonadh ach uair amháin, rud a bhriseann an srian uathúil.</p>\n<p>Dá bhrí sin, ba chóir na céimeanna seo a leanas a dhéanamh. Sa sampla seo, cuirfimid neamh-nullable:class: ~django.db.models.uuidfield le luach réamhshocraithe. Athraigh an réimse faoi seach de réir do riachtanas.</p>\n<ul>\n<li><p>Cuir an réimse ar do mhúnla le default=uuid.uuid4` agus <code class=\"docutils literal notranslate\">Unique=True</code> argóintí (roghnaigh réamhshocrú cuí don chineál réimse atá á chur leis).</p></li>\n<li><p>Rith an t-ordú:djadmin: makemigrations. Ba chóir go gcruthódh sé seo imirce le hoibríocht AddField.</p></li>\n<li><p>Ginigh dhá chomhad imirce folamh don aip céanna trí makemigrations myapp --empty a reáchtáil faoi dhó. Rinneamar athainmniú na comhaid imirce chun ainmneacha bríocha a thabhairt dóibh sna samplaí thíos.</p></li>\n<li><p>Cóipeáil an oibríocht AddField ón imirce uathoibríoch a ghintear (an chéad cheann de na trí chomhad nua) go dtí an imirce deireanach, athraigh <code class=\"docutils literal notranslate\">Addfield</code> go AlterField, agus cuir allmhairí uuid` agus samhlacha `. Mar shampla:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">0006_remove_uuid_null.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"c1\"># Generated by Django A.B on YYYY-MM-DD HH:MM</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations<span class=\"p\">,</span> models\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0005_populate_uuid_values&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>AlterField<span class=\"p\">(</span>\n            model_name<span class=\"o\">=</span><span class=\"s2\">&quot;mymodel&quot;</span><span class=\"p\">,</span>\n            name<span class=\"o\">=</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">,</span>\n            field<span class=\"o\">=</span>models<span class=\"o\">.</span>UUIDField<span class=\"p\">(</span>default<span class=\"o\">=</span>uuid<span class=\"o\">.</span>uuid4<span class=\"p\">,</span> unique<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n</li>\n<li><p>Cuir an chéad chomhad imirce in eagar. Ba chóir go mbeadh cuma cosúil leis seo ar an rang imirce ginte:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">0004_add_uuid_field.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0003_auto_20150129_1705&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>AddField<span class=\"p\">(</span>\n            model_name<span class=\"o\">=</span><span class=\"s2\">&quot;mymodel&quot;</span><span class=\"p\">,</span>\n            name<span class=\"o\">=</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">,</span>\n            field<span class=\"o\">=</span>models<span class=\"o\">.</span>UUIDField<span class=\"p\">(</span>default<span class=\"o\">=</span>uuid<span class=\"o\">.</span>uuid4<span class=\"p\">,</span> unique<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n<p>Athraigh <code class=\"docutils literal notranslate\">unique=True</code> go <code class=\"docutils literal notranslate\">Null=True</code> - cruthóidh sé seo an réimse null idirghabhálaí agus cuirfidh sé siar an srian uathúil a chruthú go dtí go mbeidh luachanna uathúla curtha againn ar na sraitheanna go léir.</p>\n</li>\n<li><p>Sa chéad chomhad imirce folamh, cuir a:class: ~django.db.migrations.operations.runpython nó:class: ~django.db.migrations.operations.runsql oibríocht chun luach uathúil (UUID sa sampla) a ghiniúint do gach sraith atá ann cheana. Cuir allmhairiú <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>uuid <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>leis freisin. Mar shampla:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">0005_populate_uuid_values.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"c1\"># Generated by Django A.B on YYYY-MM-DD HH:MM</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n<span class=\"kn\">import</span> <span class=\"nn\">uuid</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">gen_uuid</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    MyModel <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;MyModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> row <span class=\"ow\">in</span> MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">():</span>\n        row<span class=\"o\">.</span>uuid <span class=\"o\">=</span> uuid<span class=\"o\">.</span>uuid4<span class=\"p\">()</span>\n        row<span class=\"o\">.</span>save<span class=\"p\">(</span>update_fields<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;uuid&quot;</span><span class=\"p\">])</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0004_add_uuid_field&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"c1\"># omit reverse_code=... if you don&#39;t want the migration to be reversible.</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>gen_uuid<span class=\"p\">,</span> reverse_code<span class=\"o\">=</span>migrations<span class=\"o\">.</span>RunPython<span class=\"o\">.</span>noop<span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n</li>\n<li><p>Anois is féidir leat na himirce a chur i bhfeidhm mar is gnách leis an ordú:djadmin: migrate.</p>\n<p>Tabhair faoi deara go bhfuil coinníoll rása ann má cheadaíonn tú rudaí a chruthú agus an imirce seo á rith. Beidh a “uuid” bunaidh forscríofa ag rudaí a cruthaíodh tar éis an <code class=\"docutils literal notranslate\">Addfield</code> agus roimh <code class=\"docutils literal notranslate\">Runpython</code>.</p>\n</li>\n</ul>\n<section id=\"non-atomic-migrations\">\n<span id=\"id2\"></span><h3>Imirce neamh-adamhacha<a class=\"heading-anchor\" href=\"#non-atomic-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ar bhunachair sonraí a thacaíonn le hidirbhearta DDL (SQLite agus PostgreSQL), rithfidh imirce taobh istigh d'idirbheart de réir réamhshocraithe. Maidir le cásanna úsáide mar imirce sonraí a dhéanamh ar tháblaí móra, b'fhéidir gur mhaith leat imirce a chosc ó rith in idirbheart tríd an tréith <code class=\"docutils literal notranslate\">atomic` a shocrú do `False</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=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    atomic <span class=\"o\">=</span> <span class=\"kc\">False</span>\n</code></pre></div>\n<p>Within such a migration, all operations are run without a transaction. It's\npossible to execute parts of the migration inside a transaction using\n<a class=\"reference internal\" href=\"/ga/6.0/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\">atomic()</code></a> or by passing <code class=\"docutils literal notranslate\">atomic=True</code> to\n<code class=\"docutils literal notranslate\">RunPython</code>.</p>\n<p>Seo sampla d'imirce sonraí neamh-adamhacha a nuashonraíonn tábla mór i mbaisceanna níos lú:</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\">import</span> <span class=\"nn\">uuid</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations<span class=\"p\">,</span> transaction\n\n\n<span class=\"k\">def</span> <span class=\"nf\">gen_uuid</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    MyModel <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;MyModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">while</span> MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>uuid__isnull<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span>exists<span class=\"p\">():</span>\n        <span class=\"k\">with</span> transaction<span class=\"o\">.</span>atomic<span class=\"p\">():</span>\n            <span class=\"k\">for</span> row <span class=\"ow\">in</span> MyModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>uuid__isnull<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)[:</span><span class=\"mi\">1000</span><span class=\"p\">]:</span>\n                row<span class=\"o\">.</span>uuid <span class=\"o\">=</span> uuid<span class=\"o\">.</span>uuid4<span class=\"p\">()</span>\n                row<span class=\"o\">.</span>save<span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    atomic <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>gen_uuid<span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Níl éifeacht ag an tréith atomic ar bhunachair sonraí nach dtacaíonn le hidirbhearta DDL (m.sh. MySQL, Oracle). (Tagraíonn “tacaíocht ráiteas DDL adamhach” MySQL &lt; <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/atomic-ddl.html\">https://dev.mysql.com/doc/refman/en/atomic-ddl.html</a>&gt; do ráitis aonair seachas ráitis iolracha atá fillte in idirbheart is féidir a rolladh ar ais.)</p>\n</section>\n</section>\n<section id=\"controlling-the-order-of-migrations\">\n<h2>Ord na n-imirce a rialú<a class=\"heading-anchor\" href=\"#controlling-the-order-of-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Cinneann Django an t-ord ina gcaithfear imirce a chur i bhfeidhm ní trí ainm comhaid gach imirce, ach trí graf a thógáil ag baint úsáide as dhá airíonna ar an aicme <code class=\"docutils literal notranslate\">Imigration</code>: dependencies` agus <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>run_before <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Má d'úsáid tú an t-ordú:djadmin: makemigrations is dócha go bhfaca tú <code class=\"docutils literal notranslate\">dependencies</code> i ngníomh cheana féin toisc go bhfuil sé seo sainmhínithe ag imirce uathoibríoch mar chuid dá bpróiseas cruthaithe.</p>\n<p>Dearbhaítear an maoin <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>spleáchais <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>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.db</span> <span class=\"kn\">import</span> migrations\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0123_the_previous_migration&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>De ghnáth beidh sé seo go leor, ach ó am go ham b'fhéidir go gcaithfidh tú a chinntiú go ritheann d'imirce* roim* imirce eile. Tá sé seo úsáideach, mar shampla, chun imirce feidhmchláir tríú páirtí a reáchtáil* tar éis d'athsholáthar your:setting: AUTH_USER_MODEL.</p>\n<p>Chun é seo a bhaint amach, cuir na himirce go léir ar chóir a bheith ag brath ar leatsa sa tréith <code class=\"docutils literal notranslate\">run_before ``ar do rang ``Immigration</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=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    run_before <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;third_party_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_do_awesome&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>Is fearr leat <code class=\"docutils literal notranslate\">dependencies</code> a úsáid seachas <code class=\"docutils literal notranslate\">run_before ``nuair is féidir. Níor cheart duit ``run_before ``a úsáid ach mura bhfuil sé inmhianaithe nó neamhphraiticiúil ``spleáchais</code> a shonrú san imirce a theastaíonn uait a reáchtáil tar éis an ceann atá á scríobh agat.</p>\n</section>\n<section id=\"migrating-data-between-third-party-apps\">\n<h2>Sonraí a imirce idir apps tríú páirtí<a class=\"heading-anchor\" href=\"#migrating-data-between-third-party-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is féidir leat imirce sonraí a úsáid chun sonraí a aistriú ó fheidhmchlár tríú páirtí amháin go ceann eile.</p>\n<p>Má tá sé ar intinn agat an sean-aip a bhaint níos déanaí, beidh ort an maoin spleáchais ``a shocrú bunaithe ar cibé an bhfuil an sean-aip suiteáilte nó nach bhfuil. Seachas sin, beidh spleáchais in easnamh agat nuair a dhíshuiteálann tú an sean-aip. Ar an gcaoi chéanna, beidh ort: exc: `LookuPerror a ghabháil sa ghlao <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>apps.get_model () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a aisghabhann samhlacha ón sean-aip. Ligeann an cur chuige seo duit do thionscadal a imscaradh áit ar bith gan an sean-aip a shuiteáil agus ansin a dhíshuiteáil.</p>\n<p>Seo imirce samplach:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\">myapp/imirceach/0124_move_old_app_to_new_app.py</code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.apps</span> <span class=\"kn\">import</span> apps <span class=\"k\">as</span> global_apps\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> migrations\n\n\n<span class=\"k\">def</span> <span class=\"nf\">forwards</span><span class=\"p\">(</span>apps<span class=\"p\">,</span> schema_editor<span class=\"p\">):</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        OldModel <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;old_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;OldModel&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"ne\">LookupError</span><span class=\"p\">:</span>\n        <span class=\"c1\"># The old app isn&#39;t installed.</span>\n        <span class=\"k\">return</span>\n\n    NewModel <span class=\"o\">=</span> apps<span class=\"o\">.</span>get_model<span class=\"p\">(</span><span class=\"s2\">&quot;new_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;NewModel&quot;</span><span class=\"p\">)</span>\n    NewModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>bulk_create<span class=\"p\">(</span>\n        NewModel<span class=\"p\">(</span>new_attribute<span class=\"o\">=</span>old_object<span class=\"o\">.</span>old_attribute<span class=\"p\">)</span>\n        <span class=\"k\">for</span> old_object <span class=\"ow\">in</span> OldModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>all<span class=\"p\">()</span>\n    <span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>RunPython<span class=\"p\">(</span>forwards<span class=\"p\">,</span> migrations<span class=\"o\">.</span>RunPython<span class=\"o\">.</span>noop<span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;myapp&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0123_the_previous_migration&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;new_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"k\">if</span> global_apps<span class=\"o\">.</span>is_installed<span class=\"p\">(</span><span class=\"s2\">&quot;old_app&quot;</span><span class=\"p\">):</span>\n        dependencies<span class=\"o\">.</span>append<span class=\"p\">((</span><span class=\"s2\">&quot;old_app&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">))</span>\n</code></pre></figure>\n<p>Smaoinigh freisin ar cad ba mhaith leat a tharlóidh nuair nach gcuirtear an imirce i bhfeidhm. D'fhéadfá aon rud a dhéanamh (mar atá sa sampla thuas) nó cuid de na sonraí nó go léir a bhaint as an bhfeidhmchlár nua. Coigeartaigh an dara argóint den oibríocht: mod: ~django.db.migrations.operations.runpython dá réir.</p>\n</section>\n<section id=\"changing-a-manytomanyfield-to-use-a-through-model\">\n<span id=\"id3\"></span><h2>Athrú <code class=\"docutils literal notranslate\">`ManyTomanyField</code> chun samhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>trí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a úsáid<a class=\"heading-anchor\" href=\"#changing-a-manytomanyfield-to-use-a-through-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If you change a <a class=\"reference internal\" href=\"/ga/6.0/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\">ManyToManyField</code></a> to use a <code class=\"docutils literal notranslate\">through</code>\nmodel, the default migration will delete the existing table and create a new\none, losing the existing relations. To avoid this, you can use\n<a class=\"reference internal\" href=\"/ga/6.0/ref/migration-operations/#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\">SeparateDatabaseAndState</code></a> to rename the existing table to the new\ntable name while telling the migration autodetector that the new model has\nbeen created. You can check the existing table name and constraint name through\n<a class=\"reference internal\" href=\"/ga/6.0/ref/django-admin/#django-admin-sqlmigrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">sqlmigrate</code></a> or <a class=\"reference internal\" href=\"/ga/6.0/ref/django-admin/#django-admin-dbshell\"><code class=\"xref std std-djadmin docutils literal notranslate\">dbshell</code></a>. You can check the new table name\nwith the through model's <code class=\"docutils literal notranslate\">_meta.db_table</code> property. Your new <code class=\"docutils literal notranslate\">through</code>\nmodel should use the same names for the <code class=\"docutils literal notranslate\">ForeignKey</code>s as Django did. Also if\nit needs any extra fields, they should be added in operations after\n<a class=\"reference internal\" href=\"/ga/6.0/ref/migration-operations/#django.db.migrations.operations.SeparateDatabaseAndState\" title=\"django.db.migrations.operations.SeparateDatabaseAndState\"><code class=\"xref py py-class docutils literal notranslate\">SeparateDatabaseAndState</code></a>.</p>\n<p>Mar shampla, dá mbeadh samhail <code class=\"docutils literal notranslate\">Leabhar</code> againn le <code class=\"docutils literal notranslate\">ManyTomanyField</code> ag nascadh le <code class=\"docutils literal notranslate\">Author ``, d'fhéadfaimis samhail tríd ``Authorbook</code> a chur leis le réimse nua <code class=\"docutils literal notranslate\">is_primary</code>, 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.db</span> <span class=\"kn\">import</span> migrations<span class=\"p\">,</span> models\n<span class=\"kn\">import</span> <span class=\"nn\">django.db.models.deletion</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Migration</span><span class=\"p\">(</span>migrations<span class=\"o\">.</span>Migration<span class=\"p\">):</span>\n    dependencies <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;core&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    operations <span class=\"o\">=</span> <span class=\"p\">[</span>\n        migrations<span class=\"o\">.</span>SeparateDatabaseAndState<span class=\"p\">(</span>\n            database_operations<span class=\"o\">=</span><span class=\"p\">[</span>\n                <span class=\"c1\"># Old table name from checking with sqlmigrate, new table</span>\n                <span class=\"c1\"># name from AuthorBook._meta.db_table.</span>\n                migrations<span class=\"o\">.</span>RunSQL<span class=\"p\">(</span>\n                    sql<span class=\"o\">=</span><span class=\"s2\">&quot;ALTER TABLE core_book_authors RENAME TO core_authorbook&quot;</span><span class=\"p\">,</span>\n                    reverse_sql<span class=\"o\">=</span><span class=\"s2\">&quot;ALTER TABLE core_authorbook RENAME TO core_book_authors&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n            state_operations<span class=\"o\">=</span><span class=\"p\">[</span>\n                migrations<span class=\"o\">.</span>CreateModel<span class=\"p\">(</span>\n                    name<span class=\"o\">=</span><span class=\"s2\">&quot;AuthorBook&quot;</span><span class=\"p\">,</span>\n                    fields<span class=\"o\">=</span><span class=\"p\">[</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;id&quot;</span><span class=\"p\">,</span>\n                            models<span class=\"o\">.</span>AutoField<span class=\"p\">(</span>\n                                auto_created<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                primary_key<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                serialize<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                                verbose_name<span class=\"o\">=</span><span class=\"s2\">&quot;ID&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span>\n                            models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n                                on_delete<span class=\"o\">=</span>django<span class=\"o\">.</span>db<span class=\"o\">.</span>models<span class=\"o\">.</span>deletion<span class=\"o\">.</span>DO_NOTHING<span class=\"p\">,</span>\n                                to<span class=\"o\">=</span><span class=\"s2\">&quot;core.Author&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                        <span class=\"p\">(</span>\n                            <span class=\"s2\">&quot;book&quot;</span><span class=\"p\">,</span>\n                            models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span>\n                                on_delete<span class=\"o\">=</span>django<span class=\"o\">.</span>db<span class=\"o\">.</span>models<span class=\"o\">.</span>deletion<span class=\"o\">.</span>DO_NOTHING<span class=\"p\">,</span>\n                                to<span class=\"o\">=</span><span class=\"s2\">&quot;core.Book&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">),</span>\n                        <span class=\"p\">),</span>\n                    <span class=\"p\">],</span>\n                    options<span class=\"o\">=</span><span class=\"p\">{</span>\n                        <span class=\"s2\">&quot;constraints&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                            models<span class=\"o\">.</span>UniqueConstraint<span class=\"p\">(</span>\n                                fields<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;author&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;book&quot;</span><span class=\"p\">],</span>\n                                name<span class=\"o\">=</span><span class=\"s2\">&quot;unique_author_book&quot;</span><span class=\"p\">,</span>\n                            <span class=\"p\">)</span>\n                        <span class=\"p\">],</span>\n                    <span class=\"p\">},</span>\n                <span class=\"p\">),</span>\n                migrations<span class=\"o\">.</span>AlterField<span class=\"p\">(</span>\n                    model_name<span class=\"o\">=</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">,</span>\n                    name<span class=\"o\">=</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">,</span>\n                    field<span class=\"o\">=</span>models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>\n                        to<span class=\"o\">=</span><span class=\"s2\">&quot;core.Author&quot;</span><span class=\"p\">,</span>\n                        through<span class=\"o\">=</span><span class=\"s2\">&quot;core.AuthorBook&quot;</span><span class=\"p\">,</span>\n                    <span class=\"p\">),</span>\n                <span class=\"p\">),</span>\n            <span class=\"p\">],</span>\n        <span class=\"p\">),</span>\n        migrations<span class=\"o\">.</span>AddField<span class=\"p\">(</span>\n            model_name<span class=\"o\">=</span><span class=\"s2\">&quot;authorbook&quot;</span><span class=\"p\">,</span>\n            name<span class=\"o\">=</span><span class=\"s2\">&quot;is_primary&quot;</span><span class=\"p\">,</span>\n            field<span class=\"o\">=</span>models<span class=\"o\">.</span>BooleanField<span class=\"p\">(</span>default<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">),</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n</section>\n<section id=\"changing-an-unmanaged-model-to-managed\">\n<h2>Samhail neamh-bhainistithe a athrú go bainistithe<a class=\"heading-anchor\" href=\"#changing-an-unmanaged-model-to-managed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Más mian leat samhail neamhbhainistithe (:attr: managed=false &lt;django.db.models.Options.managed&gt;) a athrú go bainistithe, ní mór duit Managed = False` a bhaint agus imirce a ghiniúint sula ndéanann tú athruithe eile a bhaineann le scéim ar an tsamhail, ós rud é nach féidir athruithe scéime atá le feiceáil san imirce ina bhfuil an oibríocht chun <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Meta.Managed <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a athrú.</p>\n</section>","rootId":"how-to-create-database-migrations","toc":[{"title":"Imirce sonraí agus bunachair sonraí iolracha","anchor":"data-migrations-and-multiple-databases","children":[]},{"title":"Imirce a chuireann réimsí uathúla leis","anchor":"migrations-that-add-unique-fields","children":[{"title":"Imirce neamh-adamhacha","anchor":"non-atomic-migrations","children":[]}]},{"title":"Ord na n-imirce a rialú","anchor":"controlling-the-order-of-migrations","children":[]},{"title":"Sonraí a imirce idir apps tríú páirtí","anchor":"migrating-data-between-third-party-apps","children":[]},{"title":"Athrú `ManyTomanyField chun samhail ``trí ``a úsáid","anchor":"changing-a-manytomanyfield-to-use-a-through-model","children":[]},{"title":"Samhail neamh-bhainistithe a athrú go bainistithe","anchor":"changing-an-unmanaged-model-to-managed","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"Treoracha conas","url":"/ga/6.0/howto/"}],"prev":{"docname":"howto/custom-model-fields","title":"Conas réimsí samhail saincheaptha a chruthú","url":"/ga/6.0/howto/custom-model-fields/"},"next":{"docname":"howto/custom-lookups","title":"Conas cuardaigh saincheaptha a scríobh","url":"/ga/6.0/howto/custom-lookups/"},"formats":{"html":"/ga/6.0/howto/writing-migrations/","markdown":"/ga/6.0/howto/writing-migrations.md","json":"/ga/6.0/howto/writing-migrations.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/howto/writing-migrations.txt","official":"https://docs.djangoproject.com/ga/6.0/howto/writing-migrations/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}