Oibríochtaí ImirceLink to this heading
Tá comhaid imirce comhdhéanta de ``Oibríocht ``amháin nó níos mó, rudaí a thaifeadann go dearbhaithe cad ba chóir don imirce a dhéanamh le do bhunachar sonraí.
Úsáideann Django na rudaí ``Oibríochta ``seo freisin chun a fháil amach cén chuma atá ar do mhúnlaí go stairiúil, agus chun na hathruithe a rinne tú ar do mhúnlaí ón imirce deireanach a ríomh ionas gur féidir leis d'imirce a scríobh go huathoibríoch; sin an fáth go bhfuil siad dearbhaithe, mar ciallaíonn sé gur féidir le Django iad go léir a luchtú agus rith tríd gan teagmháil leis an mbunachar sonraí.
<data-migrations>Tá rudaí ``Oibríocht ``speisialaithe ann freisin atá le haghaidh rudaí cosúil:ref: `imirce sonraí `agus le haghaidh ionramháil bunachar sonraí láimhe chun cinn. Is féidir leat do ranganna ``Oibríocht ``féin a scríobh freisin más mian leat athrú saincheaptha a dhéanann tú go coitianta a chuimsíonn tú.
Má theastaíonn comhad imirce folamh uait chun do chuid rudaí Oibríochta ``féin a scríobh isteach, bain úsáid as `python manage.py makemigrations --empty yourappname, ach bí ar an eolas gur féidir le hoibríochtaí athraithe scéime a chur mearbhall ar an uathbhreithnitheoir imirce agus rith a dhéanamh de:djadmin: makemigrations aschur mícheart.
Tá gach ceann de na croí-oibríochtaí Django ar fáil ón modúl ``django.db.migrations.operations`.
Le haghaidh ábhar tosaigh, féach an:doc: `treoir ábhair imirceach' </topics/migrations>.
Oibríochtaí ScéimeLink to this heading
CreateModelLink to this heading
- class CreateModel(name, fields, options=None, bases=None, managers=None)Link to this definition
Cruthaíonn sé samhail nua i stair an tionscadail agus tábla comhfhreagrach sa bhunachar sonraí chun é a mheaitseáil.
Is é ``ainm ``ainm an tsamhail, mar a scríobhfaí sa chomhad models.py.
Is é fields liosta de dhá thiúpla de (ainm réimse, field_instance). Ba chóir go mbeadh an t-áireamh réimse ina réimse neamhcheangailte (mar sin díreach ``Models.charfield (...) ``, seachas réimse a tógadh ó mhúnla eile).
Is foclóir roghnach luachanna ó rang Meta an tsamhail is ea ``roghanna ``.
Is liosta roghnach d'aicmí eile é bases chun an tsamhail seo a bheith oidhreachta uaidh; féadfaidh rudaí ranga a bheith ann chomh maith le teaghráin san fhormáid "AppName.ModelName" más mian leat brath ar mhúnla eile (ionas go n-oidhreann tú ón leagan stairiúil). Mura soláthraítear é, réamhshocraíonn sé oidhreacht ón gcaighdeánach ``Models.Model ``.
Glacann bainisteoirí ``liosta de dhá thúpla de (ainm bainisteora, bainisteor_instance) ``. Is é an chéad bhainisteoir ar an liosta an bainisteoir réamhshocraithe don tsamhail seo le linn imirce.
DeleteModelLink to this heading
- class DeleteModel(name)Link to this definition
Scriosann sé an tsamhail ó stair an tionscadail agus a tábla ón mbunachar sonraí.
Athainm ModelLink to this heading
- class RenameModel(old_name, new_name)Link to this definition
Athainmníonn an tsamhail ó sheanainm go ceann nua.
B'fhéidir go mbeidh ort é seo a chur leis de láimh má athraíonn tú ainm an tsamhail agus cúpla ceann dá réimsí ag an am céanna; chuig an autodetector, beidh cuma air seo gur scrios tú samhail leis an sean-ainm agus gur chuir tú ceann nua le ainm difriúil, agus caillfidh an imirce a chruthaíonn sé aon sonraí sa tseantábla.
AlterModelTableLink to this heading
- class AlterModelTable(name, table)Link to this definition
Athraíonn ainm tábla an tsamhail (an:attr: ~django.db.models.options.db_table rogha ar an bhfo-aicme Meta).
``AlterModelTableComment ``Link to this heading
- class AlterModelTableComment(name, table_comment)Link to this definition
Athraíonn sé trácht tábla an tsamhail (an rogha: attr: ~django.db.models.options.db_table_comment ar an bhfo-aicme Meta).
AlterUniquetogetherLink to this heading
- class AlterUniqueTogether(name, unique_together)Link to this definition
Athraíonn sé tacar srianta uathúla an tsamhail (an rogha: attr: ~django.db.models.options.unique_Together ar an bhfo-aicme Meta).
AlterIndexTogetherLink to this heading
- class AlterIndexTogether(name, index_together)Link to this definition
Athraíonn sé tacar innéacsanna saincheaptha an tsamhail (an rogha ``index_together ``ar an bhfo-aicme ``Meta`).
AlterOrderWithReasLink to this heading
- class AlterOrderWithRespectTo(name, order_with_respect_to)Link to this definition
Déanann nó scriosann sé an colún _order is gá don rogha: attr: ~django.db.models.options.ORDER_with_RESPECT_TO ar an bhfo-aicme Meta.
Roghanna AlterModelLink to this heading
- class AlterModelOptions(name, options)Link to this definition
Stórálann athruithe ar roghanna samhail ilghnéitheacha (socruithe ar Meta` samhail) cosúil le ceadúna` agus verbose_name. Ní dhéanann sé difear don bhunachar sonraí, ach leanann sé ar na hathruithe seo le haghaidh cásanna: class: RunPython le húsáid. Ba chóir go mbeadh `roghanna ``ina fhoclóir a mhapáil ainmneacha roghanna ar luachanna.
Bainisteoirí AlterModelLink to this heading
- class AlterModelManagers(name, managers)Link to this definition
Athraíonn sé na bainisteoirí atá ar fáil le linn imirce.
AddfieldLink to this heading
- class AddField(model_name, name, field, preserve_default=True)Link to this definition
Cuireann sé réimse le samhail. Is é model_name ainm an tsamhail, ainm ``is ainm an réimse, agus is sampla Réimse neamhcheangailte é ``field (an rud a chuirfeá sa dearbhú réimse i models.py` - mar shampla, Models.IntegerField (Null=True).
Léiríonn an argóint preserve_default` an bhfuil luach réamhshocraithe an réimse buan agus ba chóir é a bhácáil isteach i stát an tionscadail (True`), nó má tá sé sealadach agus díreach don imirce seo (False`) - de ghnáth toisc go bhfuil réimse neamh-neamhrialaithe ag cur le tábla agus teastaíonn luach réamhshocraithe a chur sna sraitheanna atá ann cheana. Ní dhéanann sé difear go díreach ar iompar réamhshocruithe a shocrú sa bhunachar sonraí - ní shocraíonn Django réamhshocraithe bunachar sonraí riamh agus cuireann sé i bhfeidhm iad i gcónaí sa chód ORM Django.
``Réimse a bhaint ``Link to this heading
- class RemoveField(model_name, name)Link to this definition
Baineann réimse as samhail.
Cuimhnigh go bhfuil sé seo réimse a chur le samhail i ndáiríre nuair a aisiomptear é. Tá an oibríocht inchúlaithe (seachas aon chaillteanas sonraí, atá dochúlaithe) má tá an réimse in-neamhnaithe nó má tá luach réamhshocraithe aige is féidir a úsáid chun an colún athchruthaithe a líonadh. Mura bhfuil an réimse neamhnaithe agus mura bhfuil luach réamhshocraithe aige, tá an oibríocht dochúilte.
AlterfieldLink to this heading
- class AlterField(model_name, name, field, preserve_default=True)Link to this definition
Athraíonn sé sainmhíniú réimse, lena n-áirítear athruithe ar a chineál, :attr: ~django.db.models.field.null, :attr: ~django.db.models.field.unique, :attr: ~django.db.models.field.db_column agus tréithe réimse eile.
Léiríonn an argóint preserve_default` an bhfuil luach réamhshocraithe an réimse buan agus ba chóir é a bhácáil isteach i stát an tionscadail (True`), nó má tá sé sealadach agus díreach don imirce seo (False`) - de ghnáth toisc go bhfuil an imirce ag athrú réimse neamh-innithe agus teastaíonn luach réamhshocraithe a chur sna sraitheanna atá ann cheana. Ní dhéanann sé difear go díreach ar iompar réamhshocruithe a shocrú sa bhunachar sonraí - ní shocraíonn Django réamhshocraithe bunachar sonraí riamh agus cuireann sé i bhfeidhm iad i gcónaí sa chód ORM Django.
Tabhair faoi deara nach féidir gach athrú a dhéanamh ar gach bunachar sonraí - mar shampla, ní féidir leat réimse cineál téacs mar Models.textField () ``a athrú go réimse cineál uimhreacha mar ``Models.IntegerField ()` ar fhormhór na mbunachair sonraí.
RenamefieldLink to this heading
- class RenameField(model_name, old_name, new_name)Link to this definition
Athraíonn ainm réimse (agus, unless:attr: ~django.db.models.field.db_column socraítear, ainm a cholún).
AddIndexLink to this heading
- class AddIndex(model_name, index)Link to this definition
Cruthaíonn innéacs sa tábla bunachar sonraí don tsamhail le model_name. Is sampla den aicme:class: ~django.db.models.index is ea index`.
``Táimhainnéacs ``Link to this heading
- class RemoveIndex(model_name, name)Link to this definition
Baineann sé an t-innéacs darb ainm ainm ón tsamhail le model_name.
RenameindexLink to this heading
- class RenameIndex(model_name, new_name, old_name=None, old_fields=None)Link to this definition
Athainmnigh innéacs sa tábla bunachar sonraí don tsamhail le model_name. Is féidir ceann amháin de old_name` agus old_fields a sholáthar. Is é old_fields` athraitheach de na teaghráin, a fhreagraíonn go minic do réimsí ``index_together ``(rogha réamh-DJango 5.1).
Ar bhunachair sonraí nach dtacaíonn le ráiteas athainmnithe innéacs (SQLite agus MariaDB <10.5.2), titeoidh an oibríocht an t-innéacs agus a athchruthú, rud a d'fhéadfadh a bheith daor.
``Adsrianadh ``Link to this heading
- class AddConstraint(model_name, constraint)Link to this definition
Cruthaíonn a:doc: sriant sa tábla bunachar sonraí </ref/models/constraints> don tsamhail le model_name.
RemoveconstraintLink to this heading
- class RemoveConstraint(model_name, name)Link to this definition
Baineann sé an srian darb ainm ainm ``ón tsamhail le ``model_name.
AlterConstraintLink to this heading
- class AlterConstraint(model_name, name, constraint)Link to this definition
Alters the constraint named name of the model with model_name with the
new constraint without affecting the database.
Oibríochtaí SpeisialtaLink to this heading
RunsqlLink to this heading
- class RunSQL(sql, reverse_sql=None, state_operations=None, hints=None, elidable=False)Link to this definition
Ceadaíonn sé SQL treallach a reáchtáil ar an mbunachar sonraí - úsáideach le haghaidh gnéithe níos airde de chúltaca bunachar sonraí nach dtacaíonn Django go díreach.
Ba chóir go mbeadh sql`, agus reverse_sql` má sholáthraítear iad, teaghráin SQL le rith ar an mbunachar sonraí. Ar fhormhór na gcúltaca bunachar sonraí (gach ceann ach PostgreSQL), roinnfidh Django an SQL ina ráitis aonair sula ndéanfaidh sé iad a fhorghníomhú.
Is féidir leat liosta teaghráin nó 2-tuples a rith freisin. <executing-custom-sql>Úsáidtear an dara ceann chun ceisteanna agus paraiméadair a rith ar an mbealach céanna amha:ref: `cursor.execute () `. Tá na trí oibríocht seo coibhéiseach:
migrations.RunSQL("INSERT INTO musician (name) VALUES ('Reinhardt');")
migrations.RunSQL([("INSERT INTO musician (name) VALUES ('Reinhardt');", None)])
migrations.RunSQL([("INSERT INTO musician (name) VALUES (%s);", ["Reinhardt"])])
Más mian leat comharthaí faoin gcéad liteartha a áireamh sa cheist, caithfidh tú iad a dhúbailt má tá tú ag dul ar pharaiméadair.
Déantar na ceisteanna reverse_sql` a fhorghníomhú nuair nach ndéantar an imirce a chur i bhfeidhm. Ba chóir dóibh an méid a dhéanann na ceisteanna sql a chealú. Mar shampla, chun an t-ionchur thuas a chealú le scriosadh:
migrations.RunSQL(
sql=[("INSERT INTO musician (name) VALUES (%s);", ["Reinhardt"])],
reverse_sql=[("DELETE FROM musician where name=%s;", ["Reinhardt"])],
)
Más é reverse_sql None (an réamhshocraithe), tá an oibríocht Runsql dochúlghabháilte.
Ligeann an argóint state_operations` duit oibríochtaí atá comhionann leis an SQL a sholáthar i dtéarmaí staid an tionscadail. Mar shampla, má tá colún á chruthú agat de láimh, ba chóir duit dul isteach i liosta ina bhfuil oibríocht Addfield anseo ionas go mbeidh staid cothrom le dáta den tsamhail fós ag an uathbhreithnitheoir. Mura ndéanann tú, nuair a reáchtálann tú makemigrations eile, ní fheicfidh sé aon oibríocht a chuireann an réimse sin leis agus mar sin déanfaidh sé iarracht é a reáchtáil arís. Mar shampla:
migrations.RunSQL(
"ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;",
state_operations=[
migrations.AddField(
"musician",
"name",
models.CharField(max_length=255),
),
],
)
Cuirfear an argóint roghnach leideanna ``ar aghaidh mar `**hints chuig an modh:meth: allow_migrate de ródairí bunachar sonraí chun cabhrú leo cinntí ródaithe a dhéanamh. Féach:ref: topics-db-multi-db-hints le haghaidh tuilleadh sonraí ar leideanna bunachar sonraí.
<migration-squashing>Cinneann an argóint roghnach elidable cibé an mbainfear an oibríocht nó nach ndéanfar an oibríocht nuai:ref: `imirce squashing `.
- RunSQL.noopLink to this definition
Pas an tréith
Runsql.noopgo sql` nóreverse_sqlnuair a theastaíonn uait gan an oibríocht aon rud a dhéanamh sa treo ar leith. Tá sé seo úsáideach go háirithe chun an oibríocht a dhéanamh inchúlaithe.
RunpythonLink to this heading
- class RunPython(code, reverse_code=None, atomic=None, hints=None, elidable=False)Link to this definition
Ritheann sé cód saincheaptha Python i gcomhthéacs stairiúil. <django.db.backends.base.schema.BaseDatabaseSchemaEditor>Ba chóir go mbeadh “code” (agus reverse_code` má sholáthraítear) a ghlacann le dhá argóint; is sampla de Django.Apps.Registry.apps` é an chéad cheann ina bhfuil samhlacha stairiúla a mheaitseálann áit na hoibríochta i stair an tionscadail, agus is é an dara ceann de: class: SchemaEditor.
Tugtar ar an argóint reverse_code` nuair a dhéantar imirce a chur i bhfeidhm. Ba chóir don ghlaoiteoir seo an méid a dhéantar sa cód ``inghlaochta a chealú ionas go mbeidh an imirce inchúlaithe. Más é ``reverse_code None (an réamhshocraithe), ní féidir an oibríocht RunPython dochúlghabháilte.
Cuirfear an argóint roghnach leideanna ``ar aghaidh mar `**hints chuig an modh:meth: allow_migrate de ródairí bunachar sonraí chun cabhrú leo cinneadh ródaithe a dhéanamh. Féach:ref: topics-db-multi-db-hints le haghaidh tuilleadh sonraí ar leideanna bunachar sonraí.
<migration-squashing>Cinneann an argóint roghnach elidable cibé an mbainfear an oibríocht nó nach ndéanfar an oibríocht nuai:ref: `imirce squashing `.
Moltar duit an cód a scríobh mar fheidhm ar leithligh os cionn an aicme Imigration sa chomhad imirce, agus é a chur chuig Runpython`. Seo sampla de Runpython a úsáid chun roinnt rudaí tosaigh a chruthú ar mhúnla ``Tír ``:
from django.db import migrations
def forwards_func(apps, schema_editor):
# We get the model from the versioned app registry;
# if we directly import it, it'll be the wrong version
Country = apps.get_model("myapp", "Country")
db_alias = schema_editor.connection.alias
Country.objects.using(db_alias).bulk_create(
[
Country(name="USA", code="us"),
Country(name="France", code="fr"),
]
)
def reverse_func(apps, schema_editor):
# forwards_func() creates two Country instances,
# so reverse_func() should delete them.
Country = apps.get_model("myapp", "Country")
db_alias = schema_editor.connection.alias
Country.objects.using(db_alias).filter(name="USA", code="us").delete()
Country.objects.using(db_alias).filter(name="France", code="fr").delete()
class Migration(migrations.Migration):
dependencies = []
operations = [
migrations.RunPython(forwards_func, reverse_func),
]
De ghnáth is é seo <data-migrations>an oibríocht a úsáideann tú chun: ref: `imirce sonraí `a chruthú, nuashonruithe agus athruithe sonraí saincheaptha a reáchtáil, agus aon rud eile a theastaíonn uait rochtain ar chód ORM agus/nó Python dó.
Cosúil le: class: Runsql, cinntigh má athraíonn tú scéim taobh istigh anseo go bhfuil tú ag déanamh taobh amuigh de scóip chórais samhail Django (m.sh. spreagthóirí) nó go n-úsáideann tú: class: SeparateDatabaseandState chun oibríochtaí a chur isteach a léireoidh do chuid athruithe ar an stát samhail - ar shlí eile, stopfaidh an ORM leaganaithe agus an autodetector ag obair i gceart.
De réir réamhshocraithe, reáchtálfaidh RunPython a ábhar taobh istigh d'idirbheart ar bhunachair sonraí nach dtacaíonn le hidirbhearta DDL (mar shampla, MySQL agus Oracle). Ba chóir go mbeadh sé seo sábháilte, ach féadfaidh sé timpiste a bheith ina chúis má dhéanann tú iarracht an schema_editor` a chuirtear ar fáil ar na cúltaca seo a úsáid; sa chás seo, cuir Atomic=False chuig an oibríocht RunPython.
Ar bhunachair sonraí a thacaíonn le hidirbhearta DDL (SQLite agus PostgreSQL), níl aon idirbhearta curtha leis go huathoibríoch ar oibríochtaí Runpython seachas na hidirbhearta a cruthaíodh do gach imirce. Dá bhrí sin, ar PostgreSQL, mar shampla, ba cheart duit athruithe scéime agus oibríochtaí RunPython a chomhcheangal san imirce céanna nó féadfaidh tú earráidí mar OperationalError: can't ALTER TABLE “mytable” toisc go bhfuil imeachtaí truiceacha ar feitheamh aige `.
Má tá bunachar sonraí difriúil agat agus mura bhfuil tú cinnte an dtacaíonn sé le hidirbhearta DDL, seiceáil an tréith django.db.connection.features.can_rollback_ddl.
Má tá an oibríocht RunPython mar chuid de a:ref: imirce neamh-adamh`<non-atomic-migrations>, ní fhorghníomhfar an oibríocht ach in idirbheart má chuirtear ``Atomic=True` chuig an oibríocht RunPython.
- static RunPython.noop()Link to this definition
Pas an modh
Runpython.noopgo code` nóreverse_codenuair is mian leat gan an oibríocht aon rud a dhéanamh sa treo ar leith. Tá sé seo úsáideach go háirithe chun an oibríocht a dhéanamh inchúlaithe.
``ScaoilteDatabaseandstát ``Link to this heading
- class SeparateDatabaseAndState(database_operations=None, state_operations=None)Link to this definition
Oibríocht an-speisialaithe a ligeann duit gnéithe na hoibríochtaí bunachar sonraí (ag athrú scéime) agus stáit (cumhacht uathbhreithadóir) a mheascadh agus a mheaitseáil.
Glacann sé le dhá liosta oibríochtaí. Nuair a iarrtar sé stát a chur i bhfeidhm, úsáidfidh sé an liosta state_operations (is leagan ginearálta é seo d'argóint state_operations class: `RunSQL). Nuair a iarrtar ar athruithe a chur i bhfeidhm ar an mbunachar sonraí, úsáidfidh sé an liosta ``database_operations`.
Má éiríonn staid iarbhír an bhunachar sonraí agus dearcadh Django ar an stát as sioncrónú, féadfaidh sé seo an creat imirce a bhriseadh, fiú caillteanas sonraí a bheith mar thoradh air. Is fiú cúramach a bheith agat agus d'oibríochtaí bunachar sonraí agus stáit a sheiceáil go cúramach. Is féidir leat: djadmin: sqlmigrate agus:djadmin: dbshell a úsáid chun d'oibríochtaí bunachar sonraí a sheiceáil. <makemigrations --dry-run>Is féidir leat: djadmin: makemigrations a úsáid, go háirithe le:option: `--dry-run `, chun d'oibríochtaí stáit a sheiceáil.
Mar shampla ag baint úsáide as SeparatedAtabaseandState, féach:ref: changing-a-manytomanyfield-to-use-a-through-model.
Catagóir oibríochtaLink to this heading
- class OperationCategoryLink to this definition
Catagóirí oibríochta imirce a úsáidtear ag an ordú:djadmin: makemigrations chun siombailí bríocha a thaispeáint.
- ADDITIONLink to this definition
Siombail:
+
- REMOVALLink to this definition
Siombail:
-
- ALTERATIONLink to this definition
Siombail:
~
- PYTHONLink to this definition
Siombail:
p
- SQLLink to this definition
Siombail:
s
- MIXEDLink to this definition
Siombail: ``? ``
Do chuid féin a scríobhLink to this heading
Tá API réasúnta simplí ag oibríochtaí, agus tá siad deartha ionas gur féidir leat do chuid féin a scríobh go héasca chun na cinn Django ionsuite a fhorlíonadh. Breathnaíonn struchtúr bunúsach ``Oibríocht' mar seo:
from django.db.migrations.operations.base import Operation
class MyCustomOperation(Operation):
# If this is False, it means that this operation will be ignored by
# sqlmigrate; if true, it will be run and the SQL collected for its output.
reduces_to_sql = False
# If this is False, Django will refuse to reverse past this operation.
reversible = False
# This categorizes the operation. The corresponding symbol will be
# displayed by the makemigrations command.
category = OperationCategory.ADDITION
def __init__(self, arg1, arg2):
# Operations are usually instantiated with arguments in migration
# files. Store the values of them on self for later use.
pass
def state_forwards(self, app_label, state):
# The Operation should take the 'state' parameter (an instance of
# django.db.migrations.state.ProjectState) and mutate it to match
# any schema changes that have occurred.
pass
def database_forwards(self, app_label, schema_editor, from_state, to_state):
# The Operation should use schema_editor to apply any changes it
# wants to make to the database.
pass
def database_backwards(self, app_label, schema_editor, from_state, to_state):
# If reversible is True, this is called when the operation is reversed.
pass
def describe(self):
# This is used to describe what the operation does.
return "Custom Operation"
@property
def migration_name_fragment(self):
# Optional. A filename part suitable for automatically naming a
# migration containing this operation, or None if not applicable.
return "custom_operation_%s_%s" % (self.arg1, self.arg2)
Is féidir leat an teimpléad seo a thógáil agus oibriú uaidh, cé go molaimid féachaint ar na hoibríochtaí ionsuite Django i django.db.migrations.operations` - clúdaíonn siad go leor den úsáid shamplach gnéithe leath-inmheánacha den chreat imirce cosúil le Project`state `agus na patrúin a úsáidtear chun samhlacha stairiúla a fháil, chomh maith le `ModelState agus na patrúin a úsáidtear chun samhlacha stairiúla a athrú ar aghaidh () ``.
Roinnt rudaí le tabhairt faoi deara:
Ní gá duit an iomarca a fhoghlaim faoi ProjectState` chun imirce a scríobh; níl a fhios agat ach go bhfuil maoin apps ``aipeanna aige a thugann rochtain ar chlárlann aipeanna (ar féidir leat ``get_model` a ghlaoch ansin air).
Faigheann
database_forwardsagus database_backwards` dhá stát ar aghaidh chucu; léiríonn siad seo an difríocht a bheadh i bhfeidhm ag an modh ``state_forward ``, ach tugtar duit ar chúiseanna áisiúlachta agus luais.Más mian leat oibriú le ranganna samhail nó cásanna samhail ón argóint
from_state ``i `database_forwards ()nó database_backwards () `, ní mór duit stáit samhail a thabhairt ag baint úsáide as an modhclear_delayed_apps_cache ()chun samhlacha gaolmhara a chur ar fáil:def database_forwards(self, app_label, schema_editor, from_state, to_state): # This operation should have access to all models. Ensure that all models are # reloaded in case any are delayed. from_state.clear_delayed_apps_cache() ...Is é ``to_state ``sa mhodh database_backwards an stát*níos sine; is é sin, an ceann a bheidh mar an staid reatha nuair a bheidh an imirce críochnaithe ag aisiompú.
B'fhéidir go bhfeicfeá cur i bhfeidhm
references_modelar na hoibríochtaí ionsuite; is cuid den chód uathbhreithnithe é seo agus níl sé tábhacht le haghaidh oibríochtaí saincheaptha.
Mar shampla, déanaimis oibríocht a luchtaíonn síntí PostgreSQL (ina bhfuil cuid de na gnéithe níos spreagúla PostgreSQL). Ós rud é nach bhfuil aon athruithe stáit samhail ann, níl le déanamh aige ach ordú amháin a reáchtáil:
from django.db.migrations.operations.base import Operation
class LoadExtension(Operation):
reversible = True
def __init__(self, name):
self.name = name
def state_forwards(self, app_label, state):
pass
def database_forwards(self, app_label, schema_editor, from_state, to_state):
schema_editor.execute("CREATE EXTENSION IF NOT EXISTS %s" % self.name)
def database_backwards(self, app_label, schema_editor, from_state, to_state):
schema_editor.execute("DROP EXTENSION %s" % self.name)
def describe(self):
return "Creates extension %s" % self.name
@property
def migration_name_fragment(self):
return "create_extension_%s" % self.name