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	 ddl
mZmZmZmZmZ ddlmZmZ d	d
 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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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"G d)d* d*e Z#G d+d, d,e Z$d-S ).    )models)	Operation)
ModelState)normalize_together)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameField)
ModelTuplefield_references_modelc                 C   s6   t  }|D ]}||v rtd|| f || qd S )Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)arg_nameobjs	used_valsval r   \/var/www/chikooza/env/lib/python3.10/site-packages/django/db/migrations/operations/models.py_check_for_duplicates   s   
r   c                       s<   e Zd Zdd Zedd Zd
ddZd
 fdd		Z  ZS )ModelOperationc                 C   s
   || _ d S Nname)selfr   r   r   r   __init__      
zModelOperation.__init__c                 C   
   | j  S r   )r   lowerr   r   r   r   
name_lower      
zModelOperation.name_lowerNc                 C   s   |  | jkS r   r!   r#   r   r   	app_labelr   r   r   references_model   s   zModelOperation.references_modelc                    s    t  j||dp|| j| S Nr'   )superreducer(   r   r   	operationr'   	__class__r   r   r,   "   s   zModelOperation.reducer   )	__name__
__module____qualname__r   r   r#   r(   r,   __classcell__r   r   r/   r   r      s    

r   c                       sj   e Zd ZdZg dZd f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 )CreateModelzCreate a model's table.)fieldsoptionsmanagersNc                    sz   || _ |pi | _|ptjf| _|pg | _t | tddd | j D  tddd | jD  tddd | jD  d S )Nr6   c                 s       | ]\}}|V  qd S r   r   .0r   _r   r   r   	<genexpr>6       z'CreateModel.__init__.<locals>.<genexpr>basesc                 s   s8    | ]}t |d r|jjn
t|tr| n|V  qdS )_metaN)hasattrr@   label_lower
isinstancestrr!   )r;   baser   r   r   r=   7   s    
r8   c                 s   r9   r   r   r:   r   r   r   r=   <   r>   )	r6   r7   r   Modelr?   r8   r+   r   r   )r   r   r6   r7   r?   r8   r/   r   r   r   .   s   


zCreateModel.__init__c                 C   sn   | j | jd}| jr| j|d< | jr| jtjfkr| j|d< | jr0| jdt fgkr0| j|d< | jj	g |fS )N)r   r6   r7   r?   objectsr8   )
r   r6   r7   r?   r   rF   r8   Managerr0   r3   r   kwargsr   r   r   deconstruct>   s   


zCreateModel.deconstructc              
   C   s6   | t|| jt| jt| jt| jt| j	 d S r   )
	add_modelr   r   listr6   dictr7   tupler?   r8   r   r'   stater   r   r   state_forwardsO   s   
zCreateModel.state_forwardsc                 C   2   |j || j}| |jj|r|| d S d S r   apps	get_modelr   allow_migrate_model
connectionaliascreate_modelr   r'   schema_editor
from_stateto_statemodelr   r   r   database_forwardsY      zCreateModel.database_forwardsc                 C   2   |j || j}| |jj|r|| d S d S r   rU   rV   r   rW   rX   rY   delete_modelr[   r   r   r   database_backwards^   ra   zCreateModel.database_backwardsc                 C   s    d| j ddr
dnd| jf S )NzCreate %smodel %sproxyFzproxy  )r7   getr   r"   r   r   r   describec   s    zCreateModel.describec                 C   s   |  }|| jkrdS t||}| jD ]}|tjur-t|tjjt	fr-t
||kr- dS q| jD ]\}}t||r= dS q1dS )NTF)r!   r#   r   r?   r   rF   rC   rE   	ModelBaserD   
from_modelr6   r   )r   r   r'   r#   model_tuplerE   _namefieldr   r   r   r(   f   s   



zCreateModel.references_modelc                    s  t  tr| j jkr| jddsg S t  tr.| j jkr.t j| j	| j| j
| jdgS t  trM| j jkrMt| j| j	i | j j| j
| jdgS t  tro| j jkrot| j| j	i | j j ji| j
| jdgS t  tr| j jkrt| j| j	i | jd ji| j
| jdgS t  trk| j jkrkt  trt| j| j	 j jfg | j| j
| jdgS t  trt| j fdd| j	D | j| j
| jdgS t  tr"| j }dD ]}||d }|rttt fdd	|D }|r|||< q|d}| jkr|d= t| j fd
d| j	D || j
| jdgS t  trk| j }dD ]}||}|rD fdd|D ||< q/|d}| jkrV j|d< t| j fdd| j	D || j
| jdgS t  j! |dS )Nrf   F)r6   r7   r?   r8   order_with_respect_toc                    s(   g | ]\}}|| j kr jn|fqS r   )r   rn   r;   nvr.   r   r   
<listcomp>       z&CreateModel.reduce.<locals>.<listcomp>)unique_togetherindex_togetherc                 3   s&    | ]}t  fd d|D V  qdS )c                 3   s    | ]
}| j kr|V  qd S r   )r#   r;   frs   r   r   r=      s    z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>NrO   r;   r6   rs   r   r   r=      s    
z%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|   jkr||fqS r   r%   rp   rs   r   r   rt      s    c                    s"   h | ]}t  fd d|D qS )c                 3   s$    | ]}| j kr jn|V  qd S r   old_namenew_namerx   rs   r   r   r=      s   " z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rz   r{   rs   r   r   	<setcomp>   s    z%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ]\}}| j kr jn||fqS r   r|   rp   rs   r   r   rt      ru   r*   )"rC   DeleteModelr#   r7   rh   RenameModelold_name_lowerr5   r~   r6   r?   r8   AlterModelOptionsr   AlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectToro   r
   model_name_lowerr   rn   r	   r   copypopr   filterboolr   r}   r+   r,   )r   r.   r'   r7   r   optionro   r/   rs   r   r,   x   s   

				

	











zCreateModel.reduce)NNNr   )r1   r2   r3   __doc__serialization_expand_argsr   rK   rR   r`   re   ri   r(   r,   r4   r   r   r/   r   r5   )   s    

r5   c                   @   sB   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	d
S )r   zDrop a model's table.c                 C   s   d| j i}| jjg |fS Nr   )r   r0   r3   rI   r   r   r   rK      s   zDeleteModel.deconstructc                 C   s   | || j d S r   )remove_modelr#   rP   r   r   r   rR         zDeleteModel.state_forwardsc                 C   rb   r   rc   r[   r   r   r   r`     ra   zDeleteModel.database_forwardsc                 C   rS   r   rT   r[   r   r   r   re     ra   zDeleteModel.database_backwardsNc                 C   s   dS )NTr   r&   r   r   r   r(     s   zDeleteModel.references_modelc                 C   
   d| j  S )NzDelete model %sr   r"   r   r   r   ri     r   zDeleteModel.describer   )
r1   r2   r3   r   rK   rR   r`   re   r(   ri   r   r   r   r   r      s    

r   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dZdd Zd fdd	Z  ZS )r   zRename a model.c                    s   || _ || _t | d S r   )r}   r~   r+   r   )r   r}   r~   r/   r   r   r     s   zRenameModel.__init__c                 C   r    r   )r}   r!   r"   r   r   r   r     r$   zRenameModel.old_name_lowerc                 C   r    r   )r~   r!   r"   r   r   r   new_name_lower!  r$   zRenameModel.new_name_lowerc                 C      | j | jd}| jjg |fS )Nr|   )r}   r~   r0   r3   rI   r   r   r   rK   %     zRenameModel.deconstructc                 C   sL  |j || jf  }| j|_||j || jf< t|| j}d|| jf }g }|j  D ]b\\}}}	d}
t|	j	D ]K\}\}}d }|j
}|rwt|j||}||krX| }||j
_t|dd }|rwt|||}||krw|d u rs| }||j
_|r||f|	j	|< d}
q7|
r|||f q*|j|dd ||| j |j|| jdd d S )Nz%s.%sFthroughTdelay)r   r   cloner~   r   r   r   items	enumerater6   remote_fieldrk   r_   getattrr   appendreload_modelsr   reload_model)r   r'   rQ   renamed_modelold_model_tuplenew_remote_model	to_reloadmodel_app_label
model_namemodel_statemodel_changedindexr   rn   changed_fieldr   remote_model_tuplethrough_modelthrough_model_tupler   r   r   rR   0  sJ   zRenameModel.state_forwardsc                 C   s>  |j || j}| |jj|r|j || j}|||jj	|jj	 |jj
D ]0}|j|kr6|}|| jf}	n|j}|jjj|jjjf}	|j j|	 j|jj}
|||j|
 q't|jj|jj}|D ]9\}}|j|jkss|jjjjstqc|jj}|jj}|||jj	|jj	 |||j|jj|j|jj qcd S d S r   )rU   rV   r~   rW   rX   rY   r}   alter_db_tabler@   db_tablerelated_objectsrelated_modelr   r'   r   	get_fieldrn   r   alter_fieldziplocal_many_to_manyr_   r   r   auto_created)r   r'   r\   r]   r^   	new_model	old_modelrelated_objectr_   related_keyto_fieldr6   	old_field	new_fieldold_m2m_modelnew_m2m_modelr   r   r   r`   Y  sX   
zRenameModel.database_forwardsc                 C   s\   | j | j| _| _ | j| j| _| _| |||| | j | j| _| _ | j| j| _| _d S r   )r   r   r}   r~   r`   r   r'   r\   r]   r^   r   r   r   re     s
   zRenameModel.database_backwardsNc                 C   s   |  | jkp|  | jkS r   )r!   r   r   r&   r   r   r   r(     s   zRenameModel.references_modelc                 C      d| j | jf S )NzRename model %s to %sr|   r"   r   r   r   ri        zRenameModel.describec                    sJ   t |tr| j|jkrt| j|jgS tt| j||dp$|	| j| S r)   )
rC   r   r   r   r}   r~   r+   r   r,   r(   r-   r/   r   r   r,     s   

	zRenameModel.reducer   )r1   r2   r3   r   r   r   r   r   rK   rR   r`   re   r(   ri   r,   r4   r   r   r/   r   r     s    

)3
	r   c                       s   e Zd Zd fdd	Z  ZS )ModelOptionOperationNc                    s2   t || jtfr| j|jkr|gS t j||dS r)   )rC   r0   r   r#   r+   r,   r-   r/   r   r   r,     s   zModelOptionOperation.reducer   )r1   r2   r3   r,   r4   r   r   r/   r   r     s    r   c                       sH   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	  Z
S )AlterModelTablezRename a model's table.c                       || _ t | d S r   )tabler+   r   )r   r   r   r/   r   r   r        zAlterModelTable.__init__c                 C   r   )Nr   r   )r   r   r0   r3   rI   r   r   r   rK     r   zAlterModelTable.deconstructc                 C   s.   | j |j|| jf jd< |j|| jdd d S )Nr   Tr   )r   r   r#   r7   r   rP   r   r   r   rR     s   zAlterModelTable.state_forwardsc           	      C   s   |j || j}| |jj|rH|j || j}|||jj|jj t	|jj
|jj
D ]\}}|jjjjrG||jj|jjjj|jjjj q,d S d S r   )rU   rV   r   rW   rX   rY   r   r@   r   r   r   r   r   r   )	r   r'   r\   r]   r^   r   r   r   r   r   r   r   r`     s$   

z!AlterModelTable.database_forwardsc                 C      |  ||||S r   r`   r   r   r   r   re     r   z"AlterModelTable.database_backwardsc                 C   s"   d| j | jd ur| jf S df S )NzRename table for %s to %sz	(default)r   r"   r   r   r   ri     s   zAlterModelTable.describe)r1   r2   r3   r   r   rK   rR   r`   re   ri   r4   r   r   r/   r   r     s    r   c                       s^   e Zd ZdZ fddZedd Zdd Zdd	 Zd
d Z	dd Z
dddZdd Z  ZS )r   Nc                    s.   |rt t|}t| | j| t | d S r   )r   r   setattrr   r+   r   )r   r   r   r/   r   r   r     s   z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jS r   )r   r   r"   r   r   r   r     s   z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS r   )r   r   r   r0   r3   rI   r   r   r   rK     s   z(AlterTogetherOptionOperation.deconstructc                 C   s4   |j || jf }| j|j| j< |j|| jdd d S NTr   )r   r#   r   r7   r   r   r   r'   rQ   r   r   r   r   rR      s   z+AlterTogetherOptionOperation.state_forwardsc                 C   sp   |j || j}| |jj|r6|j || j}t|d| j }||t|j| jt	 t|j| jt	  d S d S )Nzalter_%s)
rU   rV   r   rW   rX   rY   r   r   r@   r   )r   r'   r\   r]   r^   r   r   alter_togetherr   r   r   r`     s   z.AlterTogetherOptionOperation.database_forwardsc                 C   r   r   r   r   r   r   r   re     r   z/AlterTogetherOptionOperation.database_backwardsc                    s,   |  ||o| j pt fdd| jD S )Nc                 3   s    | ]} |v V  qd S r   r   r{   r   r   r   r=     r>   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r(   r   anyr   r   r   r'   r   r   r   references_field  s   z-AlterTogetherOptionOperation.references_fieldc                 C   s   d| j | jt| jp
df S )Nz"Alter %s for %s (%s constraint(s))rg   )r   r   lenr   r"   r   r   r   ri     s   z%AlterTogetherOptionOperation.describer   )r1   r2   r3   r   r   r   r   rK   rR   r`   re   r   ri   r4   r   r   r/   r   r     s    

	r   c                       $   e Zd ZdZdZ fddZ  ZS )AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    rv   c                       t  || d S r   r+   r   )r   r   rv   r/   r   r   r   '  r   zAlterUniqueTogether.__init__r1   r2   r3   r   r   r   r4   r   r   r/   r   r          r   c                       r   )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    rw   c                    r   r   r   )r   r   rw   r/   r   r   r   2  r   zAlterIndexTogether.__init__r   r   r   r/   r   r   +  r   r   c                       sV   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dddZ
dd Z  ZS )r   z9Represent a change with the order_with_respect_to option.ro   c                    r   r   )ro   r+   r   )r   r   ro   r/   r   r   r   ;  r   z AlterOrderWithRespectTo.__init__c                 C   r   )Nr   ro   )r   ro   r0   r3   rI   r   r   r   rK   ?  r   z#AlterOrderWithRespectTo.deconstructc                 C   s2   |j || jf }| j|jd< |j|| jdd d S )Nro   Tr   )r   r#   ro   r7   r   r   r   r   r   rR   J     z&AlterOrderWithRespectTo.state_forwardsc                 C   s   |j || j}| |jj|rI|j || j}|jjr,|jjs,|||j	d d S |jjrK|jjsM|j	d}|
 sAd|_||| d S d S d S d S )N_orderr   )rU   rV   r   rW   rX   rY   r@   ro   remove_fieldr   has_defaultdefault	add_field)r   r'   r\   r]   r^   to_modelrk   rn   r   r   r   r`   O  s   z)AlterOrderWithRespectTo.database_forwardsc                 C   s   |  |||| d S r   r   r   r   r   r   re   a  s   z*AlterOrderWithRespectTo.database_backwardsNc                 C   s    |  ||o| jd u p|| jkS r   )r(   ro   r   r   r   r   r   d  s   
z(AlterOrderWithRespectTo.references_fieldc                 C   r   )Nz%Set order_with_respect_to on %s to %sr   r"   r   r   r   ri   m  r   z AlterOrderWithRespectTo.describer   )r1   r2   r3   r   r   r   rK   rR   r`   re   r   ri   r4   r   r   r/   r   r   6  s    
	r   c                       sP   e Zd ZdZg dZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
  ZS )r   z
    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_namedefault_manager_namedefault_related_nameget_latest_bymanagedorderingpermissionsdefault_permissionsselect_on_saveverbose_nameverbose_name_pluralc                    r   r   )r7   r+   r   )r   r   r7   r/   r   r   r     r   zAlterModelOptions.__init__c                 C   r   )N)r   r7   )r   r7   r0   r3   rI   r   r   r   rK     r   zAlterModelOptions.deconstructc                 C   s\   |j || jf }i |j| j|_| jD ]}|| jvr"|j|d q|j|| jdd d S )NFTr   )r   r#   r7   ALTER_OPTION_KEYSr   r   )r   r'   rQ   r   keyr   r   r   rR     s   

z AlterModelOptions.state_forwardsc                 C      d S r   r   r   r   r   r   r`        z#AlterModelOptions.database_forwardsc                 C   r   r   r   r   r   r   r   re     r   z$AlterModelOptions.database_backwardsc                 C   r   )NzChange Meta options on %sr   r"   r   r   r   ri     r   zAlterModelOptions.describe)r1   r2   r3   r   r   r   rK   rR   r`   re   ri   r4   r   r   r/   r   r   q  s    r   c                       sN   e Zd ZdZdgZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
  ZS )AlterModelManagerszAlter the model's managers.r8   c                    r   r   )r8   r+   r   )r   r   r8   r/   r   r   r     r   zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r0   r3   r   r8   r"   r   r   r   rK     s   
zAlterModelManagers.deconstructc                 C   s2   |j || jf }t| j|_|j|| jdd d S r   )r   r#   rM   r8   r   r   r   r   r   rR     r   z!AlterModelManagers.state_forwardsc                 C   r   r   r   r   r   r   r   r`     r   z$AlterModelManagers.database_forwardsc                 C   r   r   r   r   r   r   r   re     r   z%AlterModelManagers.database_backwardsc                 C   r   )NzChange managers on %sr   r"   r   r   r   ri     r   zAlterModelManagers.describe)r1   r2   r3   r   r   r   rK   rR   r`   re   ri   r4   r   r   r/   r   r     s    r   c                   @   s   e Zd ZdZedd ZdS )IndexOperationindexesc                 C   r    r   )r   r!   r"   r   r   r   r     r$   zIndexOperation.model_name_lowerN)r1   r2   r3   r   r   r   r   r   r   r   r     s    r   c                   @   @   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )AddIndexzAdd an index on a model.c                 C   s"   || _ |jstd| || _d S )NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)r   r   r   r   )r   r   r   r   r   r   r     s   
zAddIndex.__init__c                 C   sH   |j || jf }g |j| j | j |j| j< |j|| jdd d S r   )r   r   r7   r   r   r   r   r   r   r   r   rR     s   "zAddIndex.state_forwardsc                 C   6   |j || j}| |jj|r||| j d S d S r   )rU   rV   r   rW   rX   rY   	add_indexr   r[   r   r   r   r`        zAddIndex.database_forwardsc                 C   s6   |j || j}| |jj|r||| j d S d S r   )rU   rV   r   rW   rX   rY   remove_indexr   r[   r   r   r   re     r   zAddIndex.database_backwardsc                 C   r   )N)r   r   )r   r   r0   r3   rI   r   r   r   rK     r   zAddIndex.deconstructc                 C   s   d| j jd| j j| jf S )Nz*Create index %s on field(s) %s of model %sz, )r   r   joinr6   r   r"   r   r   r   ri     s
   zAddIndex.describeN
r1   r2   r3   r   r   rR   r`   re   rK   ri   r   r   r   r   r     s    	r   c                   @   r   )RemoveIndexzRemove an index from a model.c                 C      || _ || _d S r   r   r   r   r   r   r   r   r   r         
zRemoveIndex.__init__c                    L   |j | jf }|j j } fdd|D |j j< |j| jdd d S )Nc                       g | ]
}|j  j kr|qS r   r   )r;   idxr"   r   r   rt         z.RemoveIndex.state_forwards.<locals>.<listcomp>Tr   r   r   r7   r   r   )r   r'   rQ   r   r   r   r"   r   rR        zRemoveIndex.state_forwardsc                 C   sP   |j || j}| |jj|r&|j|| jf }|| j	}|
|| d S d S r   )rU   rV   r   rW   rX   rY   r   r   get_index_by_namer   r   )r   r'   r\   r]   r^   r_   from_model_stater   r   r   r   r`   
     zRemoveIndex.database_forwardsc                 C   P   |j || j}| |jj|r&|j|| jf }|| j	}|
|| d S d S r   )rU   rV   r   rW   rX   rY   r   r   r  r   r   )r   r'   r\   r]   r^   r_   to_model_stater   r   r   r   re     r
  zRemoveIndex.database_backwardsc                 C   r   Nr   )r   r   r0   r3   rI   r   r   r   rK     r   zRemoveIndex.deconstructc                 C   r   )NzRemove index %s from %sr   r   r"   r   r   r   ri   #  r   zRemoveIndex.describeNr   r   r   r   r   r     s    r   c                   @   r   )AddConstraintconstraintsc                 C   r   r   r   
constraint)r   r   r  r   r   r   r   *  r  zAddConstraint.__init__c                 C   sD   |j || jf }g |j| j | j|j| j< |j|| jdd d S r   )r   r   r7   r   r  r   r   r   r   r   rR   .  s   zAddConstraint.state_forwardsc                 C   r   r   )rU   rV   r   rW   rX   rY   add_constraintr  r[   r   r   r   r`   3  r   zAddConstraint.database_forwardsc                 C   r   r   )rU   rV   r   rW   rX   rY   remove_constraintr  r[   r   r   r   re   8  r   z AddConstraint.database_backwardsc                 C      | j jg | j| jdfS )Nr  )r0   r1   r   r  r"   r   r   r   rK   =     zAddConstraint.deconstructc                 C   s   d| j j| jf S )Nz Create constraint %s on model %s)r  r   r   r"   r   r   r   ri   C  r   zAddConstraint.describeN
r1   r2   r3   r   r   rR   r`   re   rK   ri   r   r   r   r   r  '  s    r  c                   @   r   )RemoveConstraintr  c                 C   r   r   r   r   r   r   r   r   J  r  zRemoveConstraint.__init__c                    r  )Nc                    r  r   r   )r;   cr"   r   r   rt   Q  r  z3RemoveConstraint.state_forwards.<locals>.<listcomp>Tr   r  )r   r'   rQ   r   r  r   r"   r   rR   N  r  zRemoveConstraint.state_forwardsc                 C   sP   |j || j}| |jj|r&|j|| jf }|| j	}|
|| d S d S r   )rU   rV   r   rW   rX   rY   r   r   get_constraint_by_namer   r  )r   r'   r\   r]   r^   r_   r	  r  r   r   r   r`   T  r
  z"RemoveConstraint.database_forwardsc                 C   r  r   )rU   rV   r   rW   rX   rY   r   r   r  r   r  )r   r'   r\   r]   r^   r_   r  r  r   r   r   re   [  r
  z#RemoveConstraint.database_backwardsc                 C   r  r  )r0   r1   r   r   r"   r   r   r   rK   b  r  zRemoveConstraint.deconstructc                 C   r   )Nz"Remove constraint %s from model %sr  r"   r   r   r   ri   h  r   zRemoveConstraint.describeNr  r   r   r   r   r  G  s    r  N)%	django.dbr   $django.db.migrations.operations.baser   django.db.migrations.stater   django.db.models.optionsr   django.utils.functionalr   r6   r   r	   r
   r   r   utilsr   r   r   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   <module>   s6    
 J# 28;7.* 