o
    ^"<f\<                     @   s   d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	m
Z
mZ G dd deZG d	d
 d
eZG dd deZG dd deZG dd deZdS )    )FieldDoesNotExist)NOT_PROVIDED)cached_property   )	Operation)field_is_referencedfield_referencesget_referencesc                       s^   e Zd ZdddZedd Zedd Zdd	 Zd
d Zdd Z	dd Z
 fddZ  ZS )FieldOperationNc                 C   s   || _ || _|| _d S N
model_namenamefield)selfr   r   r    r   ]/var/www/html/kck/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py__init__
   s   
zFieldOperation.__init__c                 C   
   | j  S r   )r   lowerr   r   r   r   model_name_lower      
zFieldOperation.model_name_lowerc                 C   r   r   )r   r   r   r   r   r   
name_lower   r   zFieldOperation.name_lowerc                 C   s   | j |j kS r   )r   r   	operationr   r   r   is_same_model_operation   s   z&FieldOperation.is_same_model_operationc                 C   s   |  |o
| j|jkS r   )r   r   r   r   r   r   is_same_field_operation   s   z&FieldOperation.is_same_field_operationc                 C   s<   |  }|| jkrdS | jrtt|| jf| j||fS dS )NTF)r   r   r   boolr   )r   r   	app_labelr   r   r   r   references_model   s   
zFieldOperation.references_modelc                 C   sn   |  }|| jkr!|| jkrdS | jr!t| jdr!|| jjv r!dS | jd u r(dS tt|| jf| j||f|S )NTfrom_fieldsF)r   r   r   r   hasattrr!   r   r   )r   r   r   r   r   r   r   r   references_field'   s   


zFieldOperation.references_fieldc                    s"   t  ||p|| j| j| S r   )superreducer#   r   r   r   r   r   	__class__r   r   r%   9   s   zFieldOperation.reducer   )__name__
__module____qualname__r   r   r   r   r   r   r    r#   r%   __classcell__r   r   r'   r   r
   	   s    



r
   c                       b   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	e
dd Z fddZ  ZS )AddFieldzAdd a field to a model.Tc                       || _ t ||| d S r   preserve_defaultr$   r   r   r   r   r   r1   r'   r   r   r   C      zAddField.__init__c                 C   4   | j | j| jd}| jdur| j|d< | jjg |fS Nr   Tr1   r   r   r   r1   r(   r)   r   kwargsr   r   r   deconstructG      

zAddField.deconstructc                 C   sT   | j s| j }t|_n| j}||j|| jf j| j< |j	 }|j
|| j|d d S Ndelay)r1   r   cloner   defaultmodelsr   fieldsr   is_relationreload_model)r   r   stater   r=   r   r   r   state_forwardsU   s   
zAddField.state_forwardsc                 C   sr   |j || j}| |jj|r5|j || j}|j| j}| j	s'| j
j|_||| | j	s7t|_d S d S d S r   )apps	get_modelr   allow_migrate_model
connectionalias_meta	get_fieldr   r1   r   r?   	add_fieldr   )r   r   schema_editor
from_stateto_stateto_model
from_modelr   r   r   r   database_forwardsa   s   

	zAddField.database_forwardsc                 C   >   |j || j}| |jj|r|||j| j	 d S d S r   
rF   rG   r   rH   rI   rJ   remove_fieldrK   rL   r   r   r   rN   rO   rP   rR   r   r   r   database_backwardso      zAddField.database_backwardsc                 C      d| j | jf S )NzAdd field %s to %sr   r   r   r   r   r   describet      zAddField.describec                 C   rZ   )Nz%s_%sr   r   r   r   r   r   migration_name_fragmentw      z AddField.migration_name_fragmentc                    sp   t |tr1| |r1t |trt| j|j|jdgS t |tr!g S t |t	r1t| j|j
| jdgS t ||S Nr   )
isinstancer
   r   
AlterFieldr.   r   r   r   RemoveFieldRenameFieldnew_namer$   r%   r&   r'   r   r   r%   {   s$   


zAddField.reduceTr)   r*   r+   __doc__r   r9   rE   rS   rX   r\   propertyr_   r%   r,   r   r   r'   r   r.   @   s    
r.   c                       sT   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
 fddZ  ZS )rd   zRemove a field from a model.c                 C   s   | j | jd}| jjg |fS )N)r   r   )r   r   r(   r)   r7   r   r   r   r9      s   zRemoveField.deconstructc                 C   s<   |j || jf }|j| j}|j }|j|| j|d d S r;   )r@   r   rA   popr   rB   rC   )r   r   rD   model_state	old_fieldr=   r   r   r   rE      s   zRemoveField.state_forwardsc                 C   rT   r   rU   rW   r   r   r   rS      rY   zRemoveField.database_forwardsc                 C   sN   |j || j}| |jj|r%|j || j}|||j| j	 d S d S r   )
rF   rG   r   rH   rI   rJ   rM   rK   rL   r   r   r   rN   rO   rP   rQ   rR   r   r   r   rX      s
   zRemoveField.database_backwardsc                 C   rZ   )NzRemove field %s from %sr[   r   r   r   r   r\      r]   zRemoveField.describec                 C   rZ   )Nzremove_%s_%sr^   r   r   r   r   r_      r`   z#RemoveField.migration_name_fragmentc                    s6   ddl m} t||r|j| jkr|gS t ||S )Nr   )DeleteModel)r@   ro   rb   r   r   r$   r%   )r   r   r   ro   r'   r   r   r%      s   zRemoveField.reduce)r)   r*   r+   ri   r9   rE   rS   rX   r\   rj   r_   r%   r,   r   r   r'   r   rd      s    
rd   c                       r-   )rc   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                    r/   r   r0   r2   r'   r   r   r      r3   zAlterField.__init__c                 C   r4   r5   r6   r7   r   r   r   r9      r:   zAlterField.deconstructc                 C   sr   | j s| j }t|_n| j}|j|| jf }||j| j< |j	 o-t
||| jf| j|f }|j|| j|d d S r;   )r1   r   r>   r   r?   r@   r   rA   r   rB   r   rC   )r   r   rD   r   rl   r=   r   r   r   rE      s   
zAlterField.state_forwardsc           	      C   s   |j || j}| |jj|r=|j || j}|j| j}|j| j}| j	s.| j
j|_|||| | j	s?t|_d S d S d S r   )rF   rG   r   rH   rI   rJ   rK   rL   r   r1   r   r?   alter_fieldr   )	r   r   rN   rO   rP   rQ   rR   
from_fieldto_fieldr   r   r   rS      s   

zAlterField.database_forwardsc                 C   s   |  |||| d S r   )rS   )r   r   rN   rO   rP   r   r   r   rX         zAlterField.database_backwardsc                 C   rZ   )NzAlter field %s on %sr[   r   r   r   r   r\      r]   zAlterField.describec                 C   rZ   )Nzalter_%s_%sr^   r   r   r   r   r_      r`   z"AlterField.migration_name_fragmentc                    sT   t |tr| |r|gS t |tr#| |r#|t| j|j| jdgS t 	||S ra   )
rb   rd   r   re   rc   r   rf   r   r$   r%   r&   r'   r   r   r%     s   zAlterField.reducerg   rh   r   r   r'   r   rc      s    
rc   c                       s   e Zd ZdZ fddZedd Zedd Zdd	 Zd
d Z	dd Z
dd Zdd Zedd Zdd Z fddZ  ZS )re   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _t || d S r   )old_namerf   r$   r   )r   r   rt   rf   r'   r   r   r     s   zRenameField.__init__c                 C   r   r   )rt   r   r   r   r   r   old_name_lower  r   zRenameField.old_name_lowerc                 C   r   r   )rf   r   r   r   r   r   new_name_lower  r   zRenameField.new_name_lowerc                 C   s    | j | j| jd}| jjg |fS )N)r   rt   rf   )r   rt   rf   r(   r)   r7   r   r   r   r9   !  s   zRenameField.deconstructc                    sL  |j | jf }|j}z| j}W n ty%   td| j jf w || j< |	 D ]}t
|dd }|rEt fdd|D |_q/|j}dD ]}	|	|v r^ fdd||	 D ||	< qKd}
t|| jf j|f}|D ]+^ }}}d}
|jr|j\}}t
|d	d  jkr j|_|rt fd
d|D |_qo|j| j|
d d S )Nz%s.%s has no field named '%s'r!   c                        g | ]}| j kr jn|qS r   rt   rf   ).0from_field_namer   r   r   
<listcomp><      z.RenameField.state_forwards.<locals>.<listcomp>)index_togetherunique_togetherc                    s   g | ]} fd d|D qS )c                    rw   r   rx   )ry   nr   r   r   r{   E  s     z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )ry   togetherr   r   r   r{   D  s    TF
field_namec                    rw   r   rx   )ry   to_field_namer   r   r   r{   T  r|   r<   )r@   r   rA   rk   rt   KeyErrorr   r   rf   valuesgetattrtupler!   optionsr	   tor   	to_fieldsrC   )r   r   rD   rl   rA   foundr   r!   r   optionr=   
references_	referenceremote_fieldr   r   r   r   rE   -  sP   





zRenameField.state_forwardsc                 C   Z   |j || j}| |jj|r+|j || j}|||j| j	|j| j
 d S d S r   )rF   rG   r   rH   rI   rJ   rp   rK   rL   rt   rf   rn   r   r   r   rS   Z     zRenameField.database_forwardsc                 C   r   r   )rF   rG   r   rH   rI   rJ   rp   rK   rL   rf   rt   rn   r   r   r   rX   d  r   zRenameField.database_backwardsc                 C      d| j | j| jf S )NzRename field %s on %s to %s)rt   r   rf   r   r   r   r   r\   n  rs   zRenameField.describec                 C   r   )Nzrename_%s_%s_%s)ru   r   rv   r   r   r   r   r_   q  s
   z#RenameField.migration_name_fragmentc                 C   s(   |  ||o| | jkp| | jkS r   )r    r   ru   rv   )r   r   r   r   r   r   r   r#   y  s   zRenameField.references_fieldc                    sZ   t |tr| |r| j|jkrt| j| j|jgS tt	| 
||p,|| j| j| S r   )rb   re   r   rv   ru   r   rt   rf   r$   r
   r%   r#   r&   r'   r   r   r%     s   

zRenameField.reduce)r)   r*   r+   ri   r   r   ru   rv   r9   rE   rS   rX   r\   rj   r_   r#   r%   r,   r   r   r'   r   re     s     

-


re   N)django.core.exceptionsr   django.db.modelsr   django.utils.functionalr   baser   utilsr   r   r	   r
   r.   rd   rc   re   r   r   r   r   <module>   s    7R.Q