o 3a\<@sddlmZddlmZddlmZddlmZddlm Z m Z m Z GdddeZ Gd d d e Z Gd d d e ZGd dde ZGddde ZdS))FieldDoesNotExist) NOT_PROVIDED)cached_property) Operation)field_is_referencedfield_referencesget_referencescs^eZdZdddZeddZeddZdd Zd d Zd d Z ddZ fddZ Z S)FieldOperationNcCs||_||_||_dSN model_namenamefield)selfr rrrH/usr/lib/python3/dist-packages/django/db/migrations/operations/fields.py__init__ s zFieldOperation.__init__cC |jSr )r lowerrrrrmodel_name_lower zFieldOperation.model_name_lowercCrr )rrrrrr name_lowerrzFieldOperation.name_lowercCs |j|jkSr )rr operationrrris_same_model_operations z&FieldOperation.is_same_model_operationcCs||o |j|jkSr )rrrrrris_same_field_operationsz&FieldOperation.is_same_field_operationcCs<|}||jkr dS|jrtt||jf|j||fSdS)NTF)rrrboolr)rr app_labelrrrrreferences_models zFieldOperation.references_modelcCsn|}||jkr!||jkrdS|jr!t|jdr!||jjvr!dS|jdur(dStt||jf|j||f|S)NT from_fieldsF)rrrrhasattrr!rr)rr rrrrrrreferences_field's   zFieldOperation.references_fieldcs"t||p||j|j| Sr )superreducer#r rrrr __class__rrr%9szFieldOperation.reducer ) __name__ __module__ __qualname__rrrrrrr r#r% __classcell__rrr'rr s    r cbeZdZdZdfdd ZddZddZd d Zd d Zd dZ e ddZ fddZ Z S)AddFieldzAdd a field to a model.Tc||_t|||dSr preserve_defaultr$rrr rrr1r'rrrCzAddField.__init__cC4|j|j|jd}|jdur|j|d<|jjg|fSNr Tr1r rrr1r(r)rkwargsrrr deconstructG  zAddField.deconstructcCsT|js |j}t|_n|j}||j||jfj|j<|j }|j ||j|ddSNdelay) r1rclonerdefaultmodelsrfieldsr is_relation reload_model)rrstaterr=rrrstate_forwardsUs zAddField.state_forwardscCsr|j||j}||jj|r5|j||j}|j|j}|j s'|j j |_ | |||j s7t |_ dSdSdSr )apps get_modelr allow_migrate_model connectionalias_meta get_fieldrr1rr? add_fieldr)rr schema_editor from_stateto_stateto_model from_modelrrrrdatabase_forwardsas   zAddField.database_forwardscC>|j||j}||jj|r|||j|j dSdSr rFrGr rHrIrJ remove_fieldrKrLrrrrNrOrPrRrrrdatabase_backwardsozAddField.database_backwardscCd|j|jfS)NzAdd field %s to %srr rrrrdescribetzAddField.describecCrZ)Nz%s_%srrrrrrmigration_name_fragmentwz AddField.migration_name_fragmentcspt|tr1||r1t|trt|j|j|jdgSt|tr!gSt|t r1t|j|j |jdgSt ||SNr ) isinstancer r AlterFieldr.r rr RemoveField RenameFieldnew_namer$r%r&r'rrr%{s$   zAddField.reduceTr)r*r+__doc__rr9rErSrXr\propertyr_r%r,rrr'rr.@s  r.csTeZdZdZddZddZddZdd Zd d Ze d d Z fddZ Z S)rdzRemove a field from a model.cCs|j|jd}|jjg|fS)N)r r)r rr(r)r7rrrr9szRemoveField.deconstructcCs<|j||jf}|j|j}|j }|j||j|ddSr;)r@rrApoprrBrC)rrrD model_state old_fieldr=rrrrEszRemoveField.state_forwardscCrTr rUrWrrrrSrYzRemoveField.database_forwardscCsN|j||j}||jj|r%|j||j}|||j|j dSdSr ) rFrGr rHrIrJrMrKrLrrrrNrOrPrQrRrrrrXs zRemoveField.database_backwardscCrZ)NzRemove field %s from %sr[rrrrr\r]zRemoveField.describecCrZ)Nz remove_%s_%sr^rrrrr_r`z#RemoveField.migration_name_fragmentcs6ddlm}t||r|j|jkr|gSt||S)Nr) DeleteModel)r@rorbrrr$r%)rrrror'rrr%s zRemoveField.reduce) r)r*r+rir9rErSrXr\rjr_r%r,rrr'rrds  rdcr-)rcz` Alter a field's database column (e.g. null, max_length) to the provided new field. Tcr/r r0r2r'rrrr3zAlterField.__init__cCr4r5r6r7rrrr9r:zAlterField.deconstructcCsr|js |j}t|_n|j}|j||jf}||j|j<|j o-t |||jf|j|f }|j ||j|ddSr;) r1rr>rr?r@rrArrBrrC)rrrDrrlr=rrrrEs  zAlterField.state_forwardsc Cs|j||j}||jj|r=|j||j}|j|j}|j|j}|j s.|j j |_ | ||||j s?t |_ dSdSdSr )rFrGr rHrIrJrKrLrr1rr? alter_fieldr) rrrNrOrPrQrR from_fieldto_fieldrrrrSs  zAlterField.database_forwardscCs|||||dSr )rS)rrrNrOrPrrrrXzAlterField.database_backwardscCrZ)NzAlter field %s on %sr[rrrrr\r]zAlterField.describecCrZ)Nz alter_%s_%sr^rrrrr_r`z"AlterField.migration_name_fragmentcsTt|tr ||r |gSt|tr#||r#|t|j|j|jdgSt ||Sra) rbrdrrercr rfrr$r%r&r'rrr%szAlterField.reducergrhrrr'rrcs  rccseZdZdZfddZeddZeddZdd Zd d Z d d Z ddZ ddZ e ddZddZfddZZS)rez8Rename a field on the model. Might affect db_column too.cs||_||_t||dSr )old_namerfr$r)rr rtrfr'rrrszRenameField.__init__cCrr )rtrrrrrold_name_lowerrzRenameField.old_name_lowercCrr )rfrrrrrnew_name_lowerrzRenameField.new_name_lowercCs |j|j|jd}|jjg|fS)N)r rtrf)r rtrfr(r)r7rrrr9!szRenameField.deconstructcsL|j|jf}|j}z|j}Wnty%td|jjfw||j<| D]}t |dd}|rEt fdd|D|_ q/|j }dD]} | |vr^fdd|| D|| <qKd} t||jfj|f} | D]+^} }} d} | jr| j\}}t |d djkrj|_|rt fd d|D|_qo|j|j| d dS) Nz%s.%s has no field named '%s'r!c g|] }|jkr jn|qSrrtrf).0from_field_namerrr <z.RenameField.state_forwards..)index_togetherunique_togethercsg|] }fdd|DqS)crwrrx)rynrrrr{Es z9RenameField.state_forwards...r)rytogetherrrrr{DsTF field_namecrwrrx)ry to_field_namerrrr{Tr|r<)r@rrArkrtKeyErrorrr rfvaluesgetattrtupler!optionsr tor to_fieldsrC)rrrDrlrAfoundrr!roptionr= references_ reference remote_fieldrrrrrE-sP           zRenameField.state_forwardscCZ|j||j}||jj|r+|j||j}|||j|j |j|j dSdSr ) rFrGr rHrIrJrprKrLrtrfrnrrrrSZ  zRenameField.database_forwardscCrr ) rFrGr rHrIrJrprKrLrfrtrnrrrrXdrzRenameField.database_backwardscCd|j|j|jfS)NzRename field %s on %s to %s)rtr rfrrrrr\nrszRenameField.describecCr)Nzrename_%s_%s_%s)rurrvrrrrr_qs z#RenameField.migration_name_fragmentcCs(|||o||jkp||jkSr )r rrurv)rr rrrrrr#ys  zRenameField.references_fieldcsZt|tr||r|j|jkrt|j|j|jgStt | ||p,| |j|j| Sr ) rbrerrvrur rtrfr$r r%r#r&r'rrr%s   zRenameField.reduce)r)r*r+rirrrurvr9rErSrXr\rjr_r#r%r,rrr'rres     -   reN)django.core.exceptionsrdjango.db.modelsrdjango.utils.functionalrbaserutilsrrr r r.rdrcrerrrrs   7R.Q