o
    :Zc@                     @   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)
ModelTuplefield_references_modelis_referenced_by_foreign_keyc                       sd   e Zd ZdddZedd Zedd Zdd	 Zd
d ZdddZ	dddZ
d fdd	Z  ZS )FieldOperationNc                 C   s   || _ || _|| _d S N
model_namenamefield)selfr   r   r    r   \/var/www/chikooza/env/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   s2   |  }|| jkrdS | jrt| jt||S dS )NTF)r   r   r   r   r   )r   r   	app_labelr   r   r   r   references_model   s   
zFieldOperation.references_modelc                 C   s   |  }|| jkr!|| jkrdS | jr!t| jdr!|| jjv r!dS | jrit||}| jj}|rit|j	|krKt| jdrI|| jj
v sId | jj
v rKdS t|dd }|rit||krit|dd d u sg||jv ridS dS )NTfrom_fields	to_fieldsthroughthrough_fieldsF)r   r   r   r   hasattrr    r   remote_field
from_modelmodelr!   getattrr#   )r   r   r   r   r   model_tupler%   r"   r   r   r   references_field'   s4   





zFieldOperation.references_fieldc                    s$   t  j||dp|| j| j| S Nr   )superreducer*   r   r   r   r   r   	__class__r   r   r.   ?   s   zFieldOperation.reducer   )__name__
__module____qualname__r   r   r   r   r   r   r   r*   r.   __classcell__r   r   r0   r   r
      s    




r
   c                       X   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	d 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   r:   r0   r   r   r   I      zAddField.__init__c                 C   4   | j | j| jd}| jdur| j|d< | jjg |fS Nr   Tr:   r   r   r   r:   r1   r2   r   kwargsr   r   r   deconstructM      

zAddField.deconstructc                 C   sZ   | j s| j }t|_n| j}|j|| jf j| j	|f |j
 }|j|| j|d d S Ndelay)r:   r   cloner   defaultmodelsr   fieldsappendr   is_relationreload_model)r   r   stater   rF   r   r   r   state_forwards[   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   r:   r   rH   	add_fieldr   )r   r   schema_editor
from_stateto_stateto_modelr&   r   r   r   r   database_forwardsg   s   

	zAddField.database_forwardsc                 C   >   |j || j}| |jj|r|||j| j	 d S d S r   
rP   rQ   r   rR   rS   rT   remove_fieldrU   rV   r   r   r   rX   rY   rZ   r&   r   r   r   database_backwardsu      zAddField.database_backwardsc                 C      d| j | jf S )NzAdd field %s to %sr   r   r   r   r   r   describez      zAddField.describeNc                    sr   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 j||dS Nr   r,   )
isinstancer
   r   
AlterFieldr7   r   r   r   RemoveFieldRenameFieldnew_namer-   r.   r/   r0   r   r   r.   }   s$   


zAddField.reduceTr   r2   r3   r4   __doc__r   rB   rO   r\   ra   re   r.   r5   r   r   r0   r   r7   F   s    r7   c                       sJ   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zd fdd	Z	  Z
S )rj   zRemove a field from a model.c                 C   s   | j | jd}| jjg |fS )N)r   r   )r   r   r1   r2   r@   r   r   r   rB      s   zRemoveField.deconstructc                 C   sr   g }d }|j || jf jD ]\}}|| jkr|||f q|}q||j || jf _|j }|j|| j|d d S rD   )rI   r   rJ   r   rK   rL   rM   )r   r   rN   
new_fields	old_fieldr   instancerF   r   r   r   rO      s   
zRemoveField.state_forwardsc                 C   r]   r   r^   r`   r   r   r   r\      rb   zRemoveField.database_forwardsc                 C   sN   |j || j}| |jj|r%|j || j}|||j| j	 d S d S r   )
rP   rQ   r   rR   rS   rT   rW   rU   rV   r   r   r   rX   rY   rZ   r[   r&   r   r   r   ra      s
   zRemoveField.database_backwardsc                 C   rc   )NzRemove field %s from %srd   r   r   r   r   re      rf   zRemoveField.describeNc                    s8   ddl m} t||r|j| jkr|gS t j||dS )Nr   )DeleteModelr,   )rI   rt   rh   r   r   r-   r.   )r   r   r   rt   r0   r   r   r.      s   zRemoveField.reducer   )r2   r3   r4   ro   rB   rO   r\   ra   re   r.   r5   r   r   r0   r   rj      s    rj   c                       r6   )ri   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                    r8   r   r9   r;   r0   r   r   r      r<   zAlterField.__init__c                 C   r=   r>   r?   r@   r   r   r   rB      rC   zAlterField.deconstructc                    s   j sj  t _nj  fdd|j|jf jD |j|jf _ j o5t	|jjj
 }|j|j|d d S )Nc                    s&   g | ]\}}||j kr n|fqS r   )r   ).0nfr   r   r   r   
<listcomp>   s    z-AlterField.state_forwards.<locals>.<listcomp>rE   )r:   r   rG   r   rH   rI   r   rJ   rL   r	   r   rM   )r   r   rN   rF   r   rx   r   rO      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   )rP   rQ   r   rR   rS   rT   rU   rV   r   r:   r   rH   alter_fieldr   )	r   r   rX   rY   rZ   r[   r&   
from_fieldto_fieldr   r   r   r\      s   

zAlterField.database_forwardsc                 C   s   |  |||| d S r   )r\   )r   r   rX   rY   rZ   r   r   r   ra         zAlterField.database_backwardsc                 C   rc   )NzAlter field %s on %srd   r   r   r   r   re      rf   zAlterField.describeNc                    sV   t |tr| |r|gS t |tr#| |r#|t| j|j| jdgS t j	||dS rg   )
rh   rj   r   rk   ri   r   rl   r   r-   r.   r/   r0   r   r   r.     s   zAlterField.reducerm   r   rn   r   r   r0   r   ri      s    ri   c                       sx   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dddZd fdd	Z  ZS )rk   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _t || d S r   )old_namerl   r-   r   )r   r   r~   rl   r0   r   r   r     s   zRenameField.__init__c                 C   r   r   )r~   r   r   r   r   r   old_name_lower  r   zRenameField.old_name_lowerc                 C   r   r   )rl   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   r~   rl   )r   r~   rl   r1   r2   r@   r   r   r   rB   "  s   zRenameField.deconstructc                    s  |j | jf }|j}d}d}t|D ]:\}\}}	|s)| jkr) j|	f||< d}t|	dd }
|
r=t fdd|
D |	_|oL|	j	 oLt
| j|	 j }q|s[td| j jf |j}dD ]}||v rs fdd|| D ||< q`| jf}|j  D ]D\\}}}t|jD ]8\}\}}	|	j}|r |j||}||krt|d	d  jkr j|_t|	d
d }|rt fdd|D |	_qq~|j| j|d d S )NFTr    c                        g | ]}| j kr jn|qS r   r~   rl   )ru   from_field_namer   r   r   ry   ;      z.RenameField.state_forwards.<locals>.<listcomp>z%s.%s has no field named '%s')index_togetherunique_togetherc                    s   g | ]} fd d|D qS )c                    r   r   r   )ru   rv   r   r   r   ry   N  s     z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )ru   togetherr   r   r   ry   M  s    
field_namer!   c                    r   r   r   )ru   to_field_namer   r   r   ry   _  r   rE   )rI   r   rJ   	enumerater~   rl   r(   tupler    rL   r	   r   r   r   optionsitemsr%   _get_model_tupler'   r   r!   rM   )r   r   rN   model_staterJ   foundrF   indexr   r   r    r   optionr)   model_app_labelr   r%   remote_model_tupler!   r   r   r   rO   .  s^   




zRenameField.state_forwardsc                 C   Z   |j || j}| |jj|r+|j || j}|||j| j	|j| j
 d S d S r   )rP   rQ   r   rR   rS   rT   rz   rU   rV   r~   rl   rs   r   r   r   r\   e     zRenameField.database_forwardsc                 C   r   r   )rP   rQ   r   rR   rS   rT   rz   rU   rV   rl   r~   rs   r   r   r   ra   o  r   zRenameField.database_backwardsc                 C   s   d| j | j| jf S )NzRename field %s on %s to %s)r~   r   rl   r   r   r   r   re   y  r}   zRenameField.describeNc                 C   s&   |  |o| | jkp| | jkS r   )r   r   r   r   )r   r   r   r   r   r   r   r*   |  s   
zRenameField.references_fieldc                    s\   t |tr| |r| j|jkrt| j| j|jgS tt	| j
||dp-|| j| j| S r+   )rh   rk   r   r   r   r   r~   rl   r-   r
   r.   r*   r/   r0   r   r   r.     s   


zRenameField.reducer   )r2   r3   r4   ro   r   r   r   r   rB   rO   r\   ra   re   r*   r.   r5   r   r   r0   r   rk     s    

7


rk   N)django.core.exceptionsr   django.db.models.fieldsr   django.utils.functionalr   baser   utilsr   r   r	   r
   r7   rj   ri   rk   r   r   r   r   <module>   s    ;N0N