a
    xd:                     @   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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)field_referencesget_referencesresolve_relationc                 C   s6   t  }|D ]&}||v r&td|| f || q
d S )Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   ^/var/www/html/Ranjet/env/lib/python3.9/site-packages/django/db/migrations/operations/models.py_check_for_duplicates   s    
r   c                       s8   e Zd Zdd Zedd Zdd Z fddZ  ZS )	ModelOperationc                 C   s
   || _ d S Nname)selfr   r   r   r   __init__   s    zModelOperation.__init__c                 C   s
   | j  S r   )r   lowerr   r   r   r   
name_lower   s    zModelOperation.name_lowerc                 C   s   |  | jkS r   r   r    r   r   	app_labelr   r   r   references_model   s    zModelOperation.references_modelc                    s   t  ||p|| j| S r   )superreducer$   r   r   	operationr#   	__class__r   r   r&   "   s    zModelOperation.reduce)	__name__
__module____qualname__r   r   r    r$   r&   __classcell__r   r   r)   r   r      s
   
r   c                       sf   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 Z 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 )Nr0   c                 s   s   | ]\}}|V  qd S r   r   .0r   _r   r   r   	<genexpr>6       z'CreateModel.__init__.<locals>.<genexpr>basesc                 s   s6   | ].}t |d r|jjnt|tr*| n|V  qdS )_metaN)hasattrr9   Zlabel_lower
isinstancestrr   )r4   baser   r   r   r6   7   s   r2   c                 s   s   | ]\}}|V  qd S r   r   r3   r   r   r   r6   <   r7   )	r0   r1   r   Modelr8   r2   r%   r   r   )r   r   r0   r1   r8   r2   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r`| jdt fgkr`| j|d< | jj	g |fS )N)r   r0   r1   r8   Zobjectsr2   )
r   r0   r1   r8   r   r>   r2   Managerr*   r-   r   kwargsr   r   r   deconstruct>   s    


zCreateModel.deconstructc              
   C   s6   | t|| jt| jt| jt| jt| j	 d S r   )
Z	add_modelr   r   listr0   dictr1   tupler8   r2   r   r#   stater   r   r   state_forwardsO   s    zCreateModel.state_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   apps	get_modelr   allow_migrate_model
connectionaliasZcreate_modelr   r#   schema_editor
from_stateto_statemodelr   r   r   database_forwardsY   s    zCreateModel.database_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   rJ   rK   r   rL   rM   rN   Zdelete_modelrO   r   r   r   database_backwards^   s    zCreateModel.database_backwardsc                 C   s    d| j ddrdnd| jf S )NzCreate %smodel %sproxyFzproxy  )r1   getr   r   r   r   r   describec   s    zCreateModel.describec                 C   s   |  }|| jkrdS ||f}| jD ]4}|tjur$t|tjjtfr$t	|||kr$ dS q$| j
D ] \}}t|| jf||r` dS q`dS )NTF)r   r    r8   r   r>   r;   r=   Z	ModelBaser<   r   r0   r   )r   r   r#   r    Zreference_model_tupler=   _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r| j jkrt| j| j	i | j j| j
| jdgS t  tr| j jkrt| j| j	i | j j ji| j
| jdgS t  tr$| j jkr$t| j| j	i | jd ji| j
| jdgS t  tr| j jkrt  trvt| 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rR| j }dD ]B}||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r| j }dD ],}||}|rl fdd|D ||< ql|d}| jkr j|d< t| j fdd| j	D || j
| jdgS t  ! |S )NrW   F)r0   r1   r8   r2   order_with_respect_toc                    s(   g | ] \}}|| j kr jn|fqS r   )r   r\   r4   nvr(   r   r   
<listcomp>   s   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    r4   fra   r   r   r6      r7   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>NrE   r4   r0   ra   r   r   r6      s   z%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|   jkr||fqS r   r!   r^   ra   r   r   rb      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_namere   ra   r   r   r6      r7   z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rg   rh   ra   r   r   	<setcomp>   s   z%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ] \}}| j kr jn||fqS r   ri   r^   ra   r   r   rb      s   )"r;   DeleteModelr    r1   rY   RenameModelold_name_lowerr/   rk   r0   r8   r2   AlterModelOptionsr   AlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTor]   r
   model_name_lowerr   r\   r	   r   copypopr   filterboolr   rj   r%   r&   )r   r(   r#   r1   rr   optionr]   r)   ra   r   r&   x   s    

					










zCreateModel.reduce)NNN)r+   r,   r-   __doc__serialization_expand_argsr   rB   rH   rT   rV   rZ   r$   r&   r.   r   r   r)   r   r/   )   s   
r/   c                   @   s@   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 )rm   zDrop a model's table.c                 C   s   d| j i}| jjg |fS Nr   )r   r*   r-   r@   r   r   r   rB      s    zDeleteModel.deconstructc                 C   s   | || j d S r   )remove_modelr    rF   r   r   r   rH      s    zDeleteModel.state_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   rU   rO   r   r   r   rT     s    zDeleteModel.database_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   rI   rO   r   r   r   rV     s    zDeleteModel.database_backwardsc                 C   s   dS )NTr   r"   r   r   r   r$     s    zDeleteModel.references_modelc                 C   s
   d| j  S )NzDelete model %sr   r   r   r   r   rZ     s    zDeleteModel.describeN)
r+   r,   r-   r{   rB   rH   rT   rV   r$   rZ   r   r   r   r   rm      s   
rm   c                       st   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 Z fddZ  ZS )rn   zRename a model.c                    s   || _ || _t | d S r   )rj   rk   r%   r   )r   rj   rk   r)   r   r   r     s    zRenameModel.__init__c                 C   s
   | j  S r   )rj   r   r   r   r   r   ro     s    zRenameModel.old_name_lowerc                 C   s
   | j  S r   )rk   r   r   r   r   r   new_name_lower!  s    zRenameModel.new_name_lowerc                 C   s   | j | jd}| jjg |fS )Nri   )rj   rk   r*   r-   r@   r   r   r   rB   %  s    zRenameModel.deconstructc                 C   s   |j || jf  }| j|_||j || jf< || jf}d|| jf }t }t||D ]d\}}}	}
d }|
jrz|	 }||j	_
|
jr|d u r|	 }||j	_|rT||j|< ||j|jf qT|j|dd ||| j |j|| jdd d S )Nz%s.%sTdelay)r   ro   clonerk   r   r   r   r   toremote_fieldrS   throughr0   r   r#   r    Zreload_modelsr~   reload_model)r   r#   rG   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadmodel_stater   r\   	referenceZchanged_fieldr   r   r   rH   0  s*    

zRenameModel.state_forwardsc                 C   s<  |j || j}| |jj|r8|j || j}|||jj	|jj	 |jj
D ]`}|j|krn|}|| jf}	n|j}|jjj|jjjf}	|j j|	 j|jj}
|||j|
 qPt|jj|jj}|D ]n\}}|j|jks|jjjjsq|jj}|jj}|||jj	|jj	 |||j|jj|j|jj qd S r   )rJ   rK   rk   rL   rM   rN   rj   alter_db_tabler9   db_tableZrelated_objectsZrelated_modelr   r#   
model_name	get_fieldr\   r   Zalter_fieldziplocal_many_to_manyrS   r   r   auto_created)r   r#   rP   rQ   rR   	new_model	old_modelZrelated_objectrS   Zrelated_keyZto_fieldr0   	old_field	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rT   K  sT    
zRenameModel.database_forwardsc                 C   s\   | j | j | _| _ | j| j | _| _| |||| | j | j | _| _ | j| j | _| _d S r   )ro   r   rj   rk   rT   r   r#   rP   rQ   rR   r   r   r   rV   ~  s
    zRenameModel.database_backwardsc                 C   s   |  | jkp|  | jkS r   )r   ro   r   r"   r   r   r   r$     s    zRenameModel.references_modelc                 C   s   d| j | jf S )NzRename model %s to %sri   r   r   r   r   rZ     s    zRenameModel.describec                    sH   t |tr&| j|jkr&t| j|jgS tt| ||pF|	| j| S r   )
r;   rn   r   ro   rj   rk   r%   r   r&   r$   r'   r)   r   r   r&     s    

	zRenameModel.reduce)r+   r,   r-   r{   r   r   ro   r   rB   rH   rT   rV   r$   rZ   r&   r.   r   r   r)   r   rn     s   

3	rn   c                       s   e Zd Z fddZ  ZS )ModelOptionOperationc                    s0   t || jtfr"| j|jkr"|gS t ||S r   )r;   r*   rm   r    r%   r&   r'   r)   r   r   r&     s    zModelOptionOperation.reduce)r+   r,   r-   r&   r.   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                    s   || _ t | d S r   )tabler%   r   )r   r   r   r)   r   r   r     s    zAlterModelTable.__init__c                 C   s   | j | jd}| jjg |fS )Nr   r   )r   r   r*   r-   r@   r   r   r   rB     s    zAlterModelTable.deconstructc                 C   s.   | j |j|| jf jd< |j|| jdd d S )Nr   Tr   )r   r   r    r1   r   rF   r   r   r   rH     s    zAlterModelTable.state_forwardsc           	      C   s   |j || j}| |jj|r|j || j}|||jj|jj t	|jj
|jj
D ]6\}}|jjjjrX||jj|jjjj|jjjj qXd S r   )rJ   rK   r   rL   rM   rN   r   r9   r   r   r   r   r   r   )	r   r#   rP   rQ   rR   r   r   r   r   r   r   r   rT     s    

z!AlterModelTable.database_forwardsc                 C   s   |  ||||S r   rT   r   r   r   r   rV     s    z"AlterModelTable.database_backwardsc                 C   s   d| j | jd ur| jndf S )NzRename table for %s to %sz	(default)r   r   r   r   r   rZ     s    zAlterModelTable.describe)r+   r,   r-   r{   r   rB   rH   rT   rV   rZ   r.   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 Zdd Z  ZS )rq   Nc                    s.   |rt t|}t| | j| t | d S r   )r   r   setattrrr   r%   r   )r   r   rs   r)   r   r   r     s    z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jS r   )getattrrr   r   r   r   r   rs     s    z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS r}   )r   rr   rs   r*   r-   r@   r   r   r   rB     s    z(AlterTogetherOptionOperation.deconstructc                 C   s4   |j || jf }| j|j| j< |j|| jdd d S NTr   )r   r    rs   r1   rr   r   r   r#   rG   r   r   r   r   rH     s    z+AlterTogetherOptionOperation.state_forwardsc                 C   sl   |j || j}| |jj|rh|j || j}t|d| j }||t|j| jt	 t|j| jt	  d S )Nzalter_%s)
rJ   rK   r   rL   rM   rN   r   rr   r9   r   )r   r#   rP   rQ   rR   r   r   Zalter_togetherr   r   r   rT     s    z.AlterTogetherOptionOperation.database_forwardsc                 C   s   |  ||||S r   r   r   r   r   r   rV     s    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   rh   r   r   r   r6   
  r7   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r$   rs   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))rX   )rr   r   lenrs   r   r   r   r   rZ     s    z%AlterTogetherOptionOperation.describe)r+   r,   r-   rr   r   r   rs   rB   rH   rT   rV   r   rZ   r.   r   r   r)   r   rq     s   
	rq   c                       s$   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.
    rc   c                    s   t  || d S r   r%   r   )r   r   rc   r)   r   r   r     s    zAlterUniqueTogether.__init__r+   r,   r-   r{   rr   r   r.   r   r   r)   r   r     s   r   c                       s$   e Zd ZdZdZ fddZ  ZS )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    rd   c                    s   t  || d S r   r   )r   r   rd   r)   r   r   r   $  s    zAlterIndexTogether.__init__r   r   r   r)   r   r     s   r   c                       sT   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 Z
dd Z  ZS )rt   z9Represent a change with the order_with_respect_to option.r]   c                    s   || _ t | d S r   )r]   r%   r   )r   r   r]   r)   r   r   r   -  s    z AlterOrderWithRespectTo.__init__c                 C   s   | j | jd}| jjg |fS )Nr   r]   )r   r]   r*   r-   r@   r   r   r   rB   1  s    z#AlterOrderWithRespectTo.deconstructc                 C   s2   |j || jf }| j|jd< |j|| jdd d S )Nr]   Tr   )r   r    r]   r1   r   r   r   r   r   rH   <  s    z&AlterOrderWithRespectTo.state_forwardsc                 C   s   |j || j}| |jj|r|j || j}|jjrV|jjsV|||j	d n6|jjr|jjs|j	d}|
 sd|_||| d S )N_orderr   )rJ   rK   r   rL   rM   rN   r9   r]   Zremove_fieldr   Zhas_defaultdefaultZ	add_field)r   r#   rP   rQ   rR   Zto_modelZ
from_modelr\   r   r   r   rT   A  s    z)AlterOrderWithRespectTo.database_forwardsc                 C   s   |  |||| d S r   r   r   r   r   r   rV   S  s    z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |  ||o| jd u p|| jkS r   )r$   r]   r   r   r   r   r   V  s    
z(AlterOrderWithRespectTo.references_fieldc                 C   s   d| j | jf S )Nz%Set order_with_respect_to on %s to %sr   r   r   r   r   rZ   _  s    z AlterOrderWithRespectTo.describe)r+   r,   r-   r{   rr   r   rB   rH   rT   rV   r   rZ   r.   r   r   r)   r   rt   (  s   	rt   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 )rp   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.
    )Zbase_manager_nameZdefault_manager_nameZdefault_related_nameZget_latest_byZmanagedZorderingZpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                    s   || _ t | d S r   )r1   r%   r   )r   r   r1   r)   r   r   r   y  s    zAlterModelOptions.__init__c                 C   s   | j | jd}| jjg |fS )N)r   r1   )r   r1   r*   r-   r@   r   r   r   rB   }  s    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    r1   ALTER_OPTION_KEYSrw   r   )r   r#   rG   r   keyr   r   r   rH     s    

z AlterModelOptions.state_forwardsc                 C   s   d S r   r   r   r   r   r   rT     s    z#AlterModelOptions.database_forwardsc                 C   s   d S r   r   r   r   r   r   rV     s    z$AlterModelOptions.database_backwardsc                 C   s
   d| j  S )NzChange Meta options on %sr   r   r   r   r   rZ     s    zAlterModelOptions.describe)r+   r,   r-   r{   r   r   rB   rH   rT   rV   rZ   r.   r   r   r)   r   rp   c  s   rp   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.r2   c                    s   || _ t | d S r   )r2   r%   r   )r   r   r2   r)   r   r   r     s    zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r*   r-   r   r2   r   r   r   r   rB     s    
zAlterModelManagers.deconstructc                 C   s2   |j || jf }t| j|_|j|| jdd d S r   )r   r    rC   r2   r   r   r   r   r   rH     s    z!AlterModelManagers.state_forwardsc                 C   s   d S r   r   r   r   r   r   rT     s    z$AlterModelManagers.database_forwardsc                 C   s   d S r   r   r   r   r   r   rV     s    z%AlterModelManagers.database_backwardsc                 C   s
   d| j  S )NzChange managers on %sr   r   r   r   r   rZ     s    zAlterModelManagers.describe)r+   r,   r-   r{   r|   r   rB   rH   rT   rV   rZ   r.   r   r   r)   r   r     s   r   c                   @   s   e Zd ZdZedd ZdS )IndexOperationindexesc                 C   s
   | j  S r   )r   r   r   r   r   r   ru     s    zIndexOperation.model_name_lowerN)r+   r,   r-   rr   r   ru   r   r   r   r   r     s   r   c                   @   s@   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   index)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   ru   r1   rr   r   r   r   r   r   r   r   rH     s    "zAddIndex.state_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   	add_indexr   rO   r   r   r   rT     s    zAddIndex.database_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   remove_indexr   rO   r   r   r   rV     s    zAddIndex.database_backwardsc                 C   s   | j | jd}| jjg |fS )N)r   r   )r   r   r*   r-   r@   r   r   r   rB     s    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   joinr0   r   r   r   r   r   rZ     s
    zAddIndex.describeN
r+   r,   r-   r{   r   rH   rT   rV   rB   rZ   r   r   r   r   r     s   	r   c                   @   s@   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 )RemoveIndexzRemove an index from a model.c                 C   s   || _ || _d S r   r   r   r   r   r   r   r   r   r     s    zRemoveIndex.__init__c                    sL   |j | jf }|j j } fdd|D |j j< |j| jdd d S )Nc                    s   g | ]}|j  j kr|qS r   r   )r4   idxr   r   r   rb     r7   z.RemoveIndex.state_forwards.<locals>.<listcomp>Tr   r   ru   r1   rr   r   )r   r#   rG   r   r   r   r   r   rH     s    zRemoveIndex.state_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   ru   get_index_by_namer   r   )r   r#   rP   rQ   rR   rS   from_model_stater   r   r   r   rT     s
    zRemoveIndex.database_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   ru   r   r   r   )r   r#   rP   rQ   rR   rS   to_model_stater   r   r   r   rV     s
    zRemoveIndex.database_backwardsc                 C   s   | j | jd}| jjg |fS Nr   )r   r   r*   r-   r@   r   r   r   rB   
  s    zRemoveIndex.deconstructc                 C   s   d| j | jf S )NzRemove index %s from %sr   r   r   r   r   r   rZ     s    zRemoveIndex.describeNr   r   r   r   r   r     s   r   c                   @   s@   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 )AddConstraintconstraintsc                 C   s   || _ || _d S r   r   
constraint)r   r   r   r   r   r   r     s    zAddConstraint.__init__c                 C   sD   |j || jf }g |j| j | j|j| j< |j|| jdd d S r   )r   ru   r1   rr   r   r   r   r   r   r   rH      s    zAddConstraint.state_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   add_constraintr   rO   r   r   r   rT   %  s    zAddConstraint.database_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   remove_constraintr   rO   r   r   r   rV   *  s    z AddConstraint.database_backwardsc                 C   s   | j jg | j| jdfS )Nr   )r*   r+   r   r   r   r   r   r   rB   /  s    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   rZ   5  s    zAddConstraint.describeN
r+   r,   r-   rr   r   rH   rT   rV   rB   rZ   r   r   r   r   r     s   r   c                   @   s@   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 )RemoveConstraintr   c                 C   s   || _ || _d S r   r   r   r   r   r   r   <  s    zRemoveConstraint.__init__c                    sL   |j | jf }|j j } fdd|D |j j< |j| jdd d S )Nc                    s   g | ]}|j  j kr|qS r   r   )r4   cr   r   r   rb   C  r7   z3RemoveConstraint.state_forwards.<locals>.<listcomp>Tr   r   )r   r#   rG   r   r   r   r   r   rH   @  s    zRemoveConstraint.state_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   ru   get_constraint_by_namer   r   )r   r#   rP   rQ   rR   rS   r   r   r   r   r   rT   F  s
    z"RemoveConstraint.database_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   ru   r   r   r   )r   r#   rP   rQ   rR   rS   r   r   r   r   r   rV   M  s
    z#RemoveConstraint.database_backwardsc                 C   s   | j jg | j| jdfS r   )r*   r+   r   r   r   r   r   r   rB   T  s    zRemoveConstraint.deconstructc                 C   s   d| j | jf S )Nz"Remove constraint %s from model %sr   r   r   r   r   rZ   Z  s    zRemoveConstraint.describeNr   r   r   r   r   r   9  s   r   N)&Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.optionsr   Zdjango.utils.functionalr   r0   r   r	   r
   r   r   utilsr   r   r   r   r   r/   rm   rn   r   r   rq   r   r   rt   rp   r   r   r   r   r   r   r   r   r   r   <module>   s4   
 J# 28;7.* 