o 3a[@sddlmZddlmZddlmZddlmZddlm Z ddl m Z m Z m Z mZmZddlmZmZmZd d ZGd d d eZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZGd!d"d"eZ Gd#d$d$eZ!Gd%d&d&e!Z"Gd'd(d(e!Z#Gd)d*d*e!Z$Gd+d,d,e!Z%d-S).)models) Operation) ModelState)normalize_together)cached_property)AddField AlterFieldFieldOperation RemoveField RenameField)field_referencesget_referencesresolve_relationcCs6t}|D]}||vrtd||f||qdS)Nz4Found duplicate value %s in CreateModel %s argument.)set ValueErroradd)arg_nameobjs used_valsvalrH/usr/lib/python3/dist-packages/django/db/migrations/operations/models.py_check_for_duplicates s  rcs8eZdZddZeddZddZfddZZS) ModelOperationcCs ||_dSNname)selfrrrr__init__ zModelOperation.__init__cC |jSr)rlowerrrrr name_lower zModelOperation.name_lowercCs||jkSrr"r$rr app_labelrrrreferences_modelszModelOperation.references_modelcst||p||j| Sr)superreducer)rr operationr( __class__rrr+"szModelOperation.reduce) __name__ __module__ __qualname__rrr$r)r+ __classcell__rrr.rrs  rcsreZdZdZgdZdfdd ZddZdd Zd d Zd d Z ddZ e ddZ ddZ fddZZS) CreateModelzCreate a model's table.)fieldsoptionsmanagersNcsz||_|pi|_|p tjf|_|pg|_t|tddd|jDtddd|jDtddd|jDdS)Nr5cs|]\}}|VqdSrr.0r_rrr 6z'CreateModel.__init__..basescss8|]}t|dr |jjn t|tr|n|VqdS)_metaN)hasattrr? label_lower isinstancestrr")r:baserrrr<7s  r7csr8rrr9rrrr<<r=) r5r6rModelr>r7r*rr)rrr5r6r>r7r.rrr.s    zCreateModel.__init__cCsn|j|jd}|jr|j|d<|jr|jtjfkr|j|d<|jr0|jdtfgkr0|j|d<|jj g|fS)N)rr5r6r>objectsr7) rr5r6r>rrEr7Managerr/r2rkwargsrrr deconstruct>s   zCreateModel.deconstructc Cs6|t||jt|jt|jt|jt|j dSr) add_modelrrlistr5dictr6tupler>r7rr(staterrrstate_forwardsOs zCreateModel.state_forwardscC2|j||j}||jj|r||dSdSrapps get_modelrallow_migrate_model connectionalias create_modelrr( schema_editor from_stateto_statemodelrrrdatabase_forwardsYzCreateModel.database_forwardscC2|j||j}||jj|r||dSdSrrTrUrrVrWrX delete_modelrZrrrdatabase_backwards^r`zCreateModel.database_backwardscCs d|jddr dnd|jfS)NzCreate %smodel %sproxyFzproxy )r6getrr#rrrdescribecs zCreateModel.describecCs|jSrr$r#rrrmigration_name_fragmentfsz#CreateModel.migration_name_fragmentcCs|}||jkr dS||f}|jD]}|tjur,t|tjjtfr,t |||kr,dSq|j D]\}}t ||jf||r@dSq0dS)NTF) r"r$r>rrErBrD ModelBaserCrr5r )rrr(r$reference_model_tuplerD_namefieldrrrr)js  zCreateModel.references_modelcsttr|jjkr|jddsgSttr.|jjkr.tj|j |j|j |j dgStt r`|jjkr`i|jj}j D] }|jvrQ||dqDt|j|j ||j |j dgSttr|jjkrt|j|j i|jjji|j |j dgSttr|jjkrt|j|j i|jdji|j |j dgSttr|jjkrttrt|j|j jjfg|j|j |j dgSttrt|jfdd|j D|j|j |j dgSttr7|j}dD] }||d}|rtttfdd |D}|r|||<q|d}|jkr"|d=t|jfd d|j D||j |j dgSttr|j}dD]}||}|rYfd d |D||<qD|d}|j krkj|d<t|jfd d|j D||j |j dgSt!"|S)NreF)r5r6r>r7order_with_respect_tocs(g|]\}}||jkrjn|fqSr)rrnr:nvr-rr z&CreateModel.reduce..)unique_togetherindex_togetherc3s&|]}tfdd|DVqdS)c3s|] }|jkr|VqdSrrir:frsrrr<sz/CreateModel.reduce...NrNr:r5rsrrr<s z%CreateModel.reduce..cs&g|]\}}|jkr||fqSrr&rprsrrrts cs"h|] }tfdd|DqS)c3s$|] }|jkr jn|VqdSrold_namenew_namerxrsrrr<s"z/CreateModel.reduce...rzr{rsrr sz%CreateModel.reduce..cs(g|]\}}|jkrjn||fqSrr|rprsrrrtru)#rB DeleteModelr$r6rg RenameModelold_name_lowerr4r~r5r>r7AlterModelOptionsALTER_OPTION_KEYSpoprAlterTogetherOptionOperation option_name option_valueAlterOrderWithRespectToror model_name_lowerrrnr r copyrfilterboolr r}r*r+)rr-r(r6keyroptionror.rsrr+|s                           zCreateModel.reduce)NNN)r0r1r2__doc__serialization_expand_argsrrJrQr_rdrhpropertyrjr)r+r3rrr.rr4)s  r4c@LeZdZdZddZddZddZdd Zd d Zd d Z e ddZ dS)rzDrop a model's table.cCsd|ji}|jjg|fSNr)rr/r2rHrrrrJs zDeleteModel.deconstructcCs|||jdSr) remove_modelr$rOrrrrQzDeleteModel.state_forwardscCrarrbrZrrrr_ r`zDeleteModel.database_forwardscCrRrrSrZrrrrdr`zDeleteModel.database_backwardscCsdS)NTrr'rrrr)szDeleteModel.references_modelcC d|jS)NzDelete model %srr#rrrrhr zDeleteModel.describecCr)Nz delete_%srir#rrrrjr%z#DeleteModel.migration_name_fragmentN) r0r1r2rrJrQr_rdr)rhrrjrrrrrs rcseZdZdZfddZeddZeddZdd Zd d Z d d Z ddZ ddZ ddZ eddZfddZZS)rzRename a model.cs||_||_t|dSr)r}r~r*r)rr}r~r.rrr$szRenameModel.__init__cCr!r)r}r"r#rrrr)r%zRenameModel.old_name_lowercCr!r)r~r"r#rrrnew_name_lower-r%zRenameModel.new_name_lowercC|j|jd}|jjg|fS)Nr|)r}r~r/r2rHrrrrJ1zRenameModel.deconstructc Cs|j||jf}|j|_||j||jf<||jf}d||jf}t}t||D]2\}}} } d} | jr=| } || j _ | j rL| durH| } || j _ | r\| |j |<| |j|jfq*|j|dd|||j|j||jdddS)Nz%s.%sTdelay)rrcloner~rrrrto remote_fieldr^throughr5rr(r$ reload_modelsr reload_model) rr(rP renamed_modelold_model_tuplenew_remote_model to_reload model_staterrn reference changed_fieldrrrrQ<s,  zRenameModel.state_forwardscCs>|j||j}||jj|r|j||j}|||jj |jj |jj D]0}|j |kr6|}||j f} n |j }|j jj |j jjf} |jj| j|jj} |||j| q't|jj|jj} | D]9\} } | j| j kss| jjjjstqc| jj}| jj}|||jj |jj |||j|jj|j|jjqcdSdSr)rTrUr~rVrWrXr}alter_db_tabler?db_tablerelated_objects related_modelrr( model_name get_fieldrnr alter_fieldziplocal_many_to_manyr^rr auto_created)rr(r[r\r] new_model old_modelrelated_objectr^ related_keyto_fieldr5 old_field new_field old_m2m_model new_m2m_modelrrrr_WsX     zRenameModel.database_forwardscCs\|j|j|_|_|j|j|_|_||||||j|j|_|_|j|j|_|_dSr)rrr}r~r_rr(r[r\r]rrrrds zRenameModel.database_backwardscCs||jkp ||jkSr)r"rrr'rrrr)s zRenameModel.references_modelcCd|j|jfS)NzRename model %s to %sr|r#rrrrhzRenameModel.describecCr)Nz rename_%s_%s)rrr#rrrrjz#RenameModel.migration_name_fragmentcsHt|tr|j|jkrt|j|jgStt|||p#| |j| Sr) rBrrrr}r~r*rr+r)r,r.rrr+s   zRenameModel.reduce)r0r1r2rrrrrrJrQr_rdr)rhrrjr+r3rrr.rr!s     3  rcseZdZfddZZS)ModelOptionOperationcs0t||jtfr|j|jkr|gSt||Sr)rBr/rr$r*r+r,r.rrr+szModelOptionOperation.reduce)r0r1r2r+r3rrr.rrsrcsTeZdZdZfddZddZddZdd Zd d Zd d Z e ddZ Z S)AlterModelTablezRename a model's table.c||_t|dSr)tabler*r)rrrr.rrrzAlterModelTable.__init__cCr)Nrr)rrr/r2rHrrrrJrzAlterModelTable.deconstructcCs.|j|j||jfjd<|j||jdddS)NrTr)rrr$r6rrOrrrrQszAlterModelTable.state_forwardsc Cs|j||j}||jj|rH|j||j}|||jj|jjt |jj |jj D]\}}|j j jj rG||j j |j j jj|j j jjq,dSdSr)rTrUrrVrWrXrr?rrrrrr) rr(r[r\r]rrrrrrrr_s$   z!AlterModelTable.database_forwardscC|||||Srr_rrrrrdrz"AlterModelTable.database_backwardscCs"d|j|jdur |jfSdfS)NzRename table for %s to %sz (default)rr#rrrrhs zAlterModelTable.describecCr)Nzalter_%s_tablerir#rrrrjr%z'AlterModelTable.migration_name_fragment) r0r1r2rrrJrQr_rdrhrrjr3rrr.rrs  rcsheZdZdZfddZeddZddZdd Zd d Z d d Z ddZ ddZ e ddZZS)rNcs.|rtt|}t||j|t|dSr)rrsetattrrr*r)rrrr.rrrs z%AlterTogetherOptionOperation.__init__cCs t||jSr)getattrrr#rrrrs z)AlterTogetherOptionOperation.option_valuecCs d|j|j|ji}|jjg|fSr)rrrr/r2rHrrrrJsz(AlterTogetherOptionOperation.deconstructcCs4|j||jf}|j|j|j<|j||jdddSNTr)rr$rr6rrrr(rPrrrrrQsz+AlterTogetherOptionOperation.state_forwardscCsp|j||j}||jj|r6|j||j}t|d|j}||t|j|jt t|j|jt dSdS)Nzalter_%s) rTrUrrVrWrXrrr?r)rr(r[r\r]rralter_togetherrrrr_ sz.AlterTogetherOptionOperation.database_forwardscCrrrrrrrrdrz/AlterTogetherOptionOperation.database_backwardscs,|||o|j ptfdd|jDS)Nc3s|]}|vVqdSrrr{rrrr<r=z@AlterTogetherOptionOperation.references_field..)r)ranyrrrr(rrrreferences_fields z-AlterTogetherOptionOperation.references_fieldcCsd|j|jt|jp dfS)Nz"Alter %s for %s (%s constraint(s))rf)rrlenrr#rrrrh"sz%AlterTogetherOptionOperation.describecCr)Nz alter_%s_%s)r$rr#rrrrj%rz4AlterTogetherOptionOperation.migration_name_fragment)r0r1r2rrrrrJrQr_rdrrhrrjr3rrr.rrs     rc$eZdZdZdZfddZZS)AlterUniqueTogetherz| Change the value of unique_together to the target one. Input value of unique_together must be a set of tuples. rvct||dSrr*r)rrrvr.rrr1rzAlterUniqueTogether.__init__r0r1r2rrrr3rrr.rr*rcr)AlterIndexTogetherzz Change the value of index_together to the target one. Input value of index_together must be a set of tuples. rwcrrr)rrrwr.rrr<rzAlterIndexTogether.__init__rrrr.rr5rrcs`eZdZdZdZfddZddZddZd d Zd d Z d dZ ddZ e ddZ ZS)rz9Represent a change with the order_with_respect_to option.rocrr)ror*r)rrror.rrrErz AlterOrderWithRespectTo.__init__cCr)Nrro)rror/r2rHrrrrJIrz#AlterOrderWithRespectTo.deconstructcCs2|j||jf}|j|jd<|j||jdddS)NroTr)rr$ror6rrrrrrQT z&AlterOrderWithRespectTo.state_forwardscCs|j||j}||jj|rI|j||j}|jjr,|jjs,|||j ddS|jjrK|jjsM|j d}| sAd|_ | ||dSdSdSdS)N_orderr) rTrUrrVrWrXr?ro remove_fieldr has_defaultdefault add_field)rr(r[r\r]to_model from_modelrnrrrr_Ys z)AlterOrderWithRespectTo.database_forwardscCs|||||dSrrrrrrrdksz*AlterOrderWithRespectTo.database_backwardscCs |||o|jdup||jkSr)r)rorrrrrns  z(AlterOrderWithRespectTo.references_fieldcCr)Nz%Set order_with_respect_to on %s to %srr#rrrrhwrz AlterOrderWithRespectTo.describecCr)Nzalter_%s_order_with_respect_torir#rrrrjzr%z/AlterOrderWithRespectTo.migration_name_fragment)r0r1r2rrrrJrQr_rdrrhrrjr3rrr.rr@s   rcs\eZdZdZgdZfddZddZddZd d Zd d Z d dZ e ddZ Z S)rz Set new model options that don't directly affect the database schema (like verbose_name, permissions, ordering). Python code in migrations may still need them. ) base_manager_namedefault_manager_namedefault_related_name get_latest_bymanagedordering permissionsdefault_permissionsselect_on_save verbose_nameverbose_name_pluralcrr)r6r*r)rrr6r.rrrrzAlterModelOptions.__init__cCr)N)rr6)rr6r/r2rHrrrrJrzAlterModelOptions.deconstructcCs\|j||jf}i|j|j|_|jD]}||jvr"|j|dq|j||jdddS)NFTr)rr$r6rrr)rr(rPrrrrrrQs  z AlterModelOptions.state_forwardscCdSrrrrrrr_z#AlterModelOptions.database_forwardscCrrrrrrrrdrz$AlterModelOptions.database_backwardscCr)NzChange Meta options on %srr#rrrrhr zAlterModelOptions.describecCr)Nzalter_%s_optionsrir#rrrrjr%z)AlterModelOptions.migration_name_fragment)r0r1r2rrrrJrQr_rdrhrrjr3rrr.rrs  rcsZeZdZdZdgZfddZddZddZd d Zd d Z d dZ e ddZ Z S)AlterModelManagerszAlter the model's managers.r7crr)r7r*r)rrr7r.rrrrzAlterModelManagers.__init__cCs|jj|j|jgifSr)r/r2rr7r#rrrrJs zAlterModelManagers.deconstructcCs2|j||jf}t|j|_|j||jdddSr)rr$rLr7rrrrrrQrz!AlterModelManagers.state_forwardscCrrrrrrrr_rz$AlterModelManagers.database_forwardscCrrrrrrrrdrz%AlterModelManagers.database_backwardscCr)NzChange managers on %srr#rrrrhr zAlterModelManagers.describecCr)Nzalter_%s_managersrir#rrrrjr%z*AlterModelManagers.migration_name_fragment)r0r1r2rrrrJrQr_rdrhrrjr3rrr.rrs rc@seZdZdZeddZdS)IndexOperationindexescCr!r)rr"r#rrrrr%zIndexOperation.model_name_lowerN)r0r1r2rrrrrrrrsrc@r)AddIndexzAdd an index on a model.cCs"||_|js td|||_dS)NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)rrrindex)rrrrrrrs zAddIndex.__init__cCsH|j||jf}g|j|j|j|j|j<|j||jdddSr)rrr6rrrrrrrrrQs"zAddIndex.state_forwardscC6|j||j}||jj|r|||jdSdSr)rTrUrrVrWrX add_indexrrZrrrr_zAddIndex.database_forwardscCs6|j||j}||jj|r|||jdSdSr)rTrUrrVrWrX remove_indexrrZrrrrdrzAddIndex.database_backwardscCr)N)rr)rrr/r2rHrrrrJrzAddIndex.deconstructcCsN|jjrd|jjddd|jjD|jfSd|jjd|jj|jfS)Nz!Create index %s on %s on model %sz, cSsg|]}t|qSr)rC)r: expressionrrrrtsz%AddIndex.describe..z*Create index %s on field(s) %s of model %s)r expressionsrjoinrr5r#rrrrh s zAddIndex.describecCd|j|jjfSNz%s_%s)rrrr"r#rrrrjz AddIndex.migration_name_fragmentN r0r1r2rrrQr_rdrJrhrrjrrrrrs   rc@r) RemoveIndexzRemove an index from a model.cC||_||_dSrrrrrrrrrr  zRemoveIndex.__init__cL|j|jf}|jj}fdd|D|jj<|j|jdddS)Ncg|] }|jjkr|qSrr)r:idxr#rrrt'z.RemoveIndex.state_forwards..Trrrr6rr)rr(rPrrrr#rrQ$ zRemoveIndex.state_forwardscCsP|j||j}||jj|r&|j||jf}||j }| ||dSdSr) rTrUrrVrWrXrrget_index_by_namerr)rr(r[r\r]r^from_model_staterrrrr_*  zRemoveIndex.database_forwardscCP|j||j}||jj|r&|j||jf}||j }| ||dSdSr) rTrUrrVrWrXrrr rr)rr(r[r\r]r^to_model_staterrrrrd1r zRemoveIndex.database_backwardscCrNr)rrr/r2rHrrrrJ8rzRemoveIndex.deconstructcCr)NzRemove index %s from %srrr#rrrrhCrzRemoveIndex.describecCd|j|jfSNz remove_%s_%srrr"r#rrrrjFz#RemoveIndex.migration_name_fragmentNrrrrrrs rc@r) AddConstraint constraintscCrrr constraint)rrrrrrrNrzAddConstraint.__init__cCsD|j||jf}g|j|j|j|j|j<|j||jdddSr)rrr6rrrrrrrrQRszAddConstraint.state_forwardscCrr)rTrUrrVrWrXadd_constraintrrZrrrr_WrzAddConstraint.database_forwardscCrr)rTrUrrVrWrXremove_constraintrrZrrrrd\rz AddConstraint.database_backwardscC|jjg|j|jdfS)Nr)r/r0rrr#rrrrJazAddConstraint.deconstructcCsd|jj|jfS)Nz Create constraint %s on model %s)rrrr#rrrrhgrzAddConstraint.describecCrr)rrrr"r#rrrrjjrz%AddConstraint.migration_name_fragmentN r0r1r2rrrQr_rdrJrhrrjrrrrrKsrc@r)RemoveConstraintrcCrrrrrrrrrrzRemoveConstraint.__init__cr)Ncrrr)r:cr#rrrtyrz3RemoveConstraint.state_forwards..Trr)rr(rPrrrr#rrQvr zRemoveConstraint.state_forwardscCsP|j||j}||jj|r&|j||jf}||j }| ||dSdSr) rTrUrrVrWrXrrget_constraint_by_namerr)rr(r[r\r]r^r rrrrr_|r z"RemoveConstraint.database_forwardscCr r) rTrUrrVrWrXrrr rr)rr(r[r\r]r^rrrrrrdr z#RemoveConstraint.database_backwardscCrr)r/r0rrr#rrrrJrzRemoveConstraint.deconstructcCr)Nz"Remove constraint %s from model %srr#rrrrhrzRemoveConstraint.describecCrrrr#rrrrjrz(RemoveConstraint.migration_name_fragmentNrrrrrrosrN)& django.dbr$django.db.migrations.operations.baserdjango.db.migrations.staterdjango.db.models.optionsrdjango.utils.functionalrr5rr r r r utilsr rrrrr4rrrrrrrrrrrrrrrrrrrs6     R'6<  ?;#8.$