B
    ©0H[x  ã               @   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 ddlmZmZ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!d)S )*é    )Úmodels)Ú	Operation)Ú
ModelState)ÚRECURSIVE_RELATIONSHIP_CONSTANT)Únormalize_together)Úcached_propertyé   )ÚAddFieldÚ
AlterFieldÚFieldOperationÚRemoveFieldÚRenameFieldc             C   s:   t ƒ }x.|D ]&}||kr(td|| f ƒ‚| |¡ qW d S )Nz4Found duplicate value %s in CreateModel %s argument.)ÚsetÚ
ValueErrorÚadd)Zarg_nameÚobjsZ	used_valsÚval© r   újC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\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__   s    zModelOperation.__init__c             C   s
   | j  ¡ S )N)r   Úlower)r   r   r   r   Ú
name_lower   s    zModelOperation.name_lowerNc             C   s   |  ¡ | jkS )N)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   Ú	operationÚ
in_betweenr   )Ú	__class__r   r   r   "   s    zModelOperation.reduce)N)N)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   Ú__classcell__r   r   )r"   r   r      s   
r   c                   st   e Zd ZdZdddg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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 )Nr(   c             s   s   | ]\}}|V  qd S )Nr   )Ú.0r   Ú_r   r   r   ú	<genexpr>6   s    z'CreateModel.__init__.<locals>.<genexpr>Úbasesc             s   s6   | ].}t |d ƒr|jjnt|tƒr*| ¡ n|V  qdS )Ú_metaN)Úhasattrr/   Zlabel_lowerÚ
isinstanceÚstrr   )r+   Úbaser   r   r   r-   8   s   r*   c             s   s   | ]\}}|V  qd S )Nr   )r+   r   r,   r   r   r   r-   <   s    )	r(   r)   r   ÚModelr.   r*   r   r   r   )r   r   r(   r)   r.   r*   )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   r(   r)   r.   Úobjectsr*   )
r   r(   r)   r.   r   r4   r*   Ú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 )N)
Z	add_modelr   r   Úlistr(   Údictr)   Útupler.   r*   )r   r   Ústater   r   r   Ústate_forwardsO   s    zCreateModel.state_forwardsc             C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S )N)ÚappsÚ	get_modelr   Úallow_migrate_modelÚ
connectionÚaliasÚ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 )N)r>   r?   r   r@   rA   rB   Údelete_model)r   r   rD   rE   rF   rG   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 Ú )r)   Úgetr   )r   r   r   r   Údescribec   s    zCreateModel.describec       
      C   s’   |  ¡ }|| jkrdS dd„ | jD ƒ}x&| jD ]\}}|jr.| |jj¡ q.W x>|D ]6}|  |¡\}}	|	  ¡ |krT|d ks†|r†||krTdS qTW dS )NTc             S   s,   g | ]$}|t jk	rt|t jjtfƒr|‘qS r   )r   r4   r1   r3   Z	ModelBaser2   )r+   r3   r   r   r   ú
<listcomp>m   s    z0CreateModel.references_model.<locals>.<listcomp>F)r   r   r.   r(   Úremote_fieldÚappendrG   Úmodel_to_key)
r   r   r   r   Zmodels_to_checkÚfnameÚfieldrG   Úmodel_app_labelÚ
model_namer   r   r   r   f   s    

zCreateModel.references_modelc             C   s*   t |tƒr| dd¡S |jj|jjfS dS )z{
        Take either a model class or an "app_label.ModelName" string
        and return (app_label, object_name).
        Ú.r   N)r1   r2   Úsplitr/   r   Úobject_name)r   rG   r   r   r   rR   |   s    
zCreateModel.model_to_keyc                s0  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r¤| j ¡ }| ˆ j¡ t| j| j	|| j
| jd�gS t ˆ tƒ�r| jˆ jk�rt ˆ tƒ�rvtˆ jdƒ�rJˆ jj�rJxf|D ]^}|  ˆ jjj¡\}}| ||¡�rdS tˆ jjdd ƒrè|  ˆ jjj¡\}}| ||¡rèdS qèW t| j| j	ˆ jˆ jfg | j| j
| jd�gS t ˆ tƒ�r®t| j‡ fdd„| j	D ƒ| j| j
| jd�gS t ˆ tƒ�ræt| j‡ fdd„| j	D ƒ| j| j
| jd�gS t ˆ tƒ�rt| j‡ fd	d„| j	D ƒ| j| j
| jd�gS tƒ jˆ ||d
�S )NrK   F)r(   r)   r.   r*   rP   Úthroughc                s(   g | ] \}}||ˆ j krˆ jn|f‘qS r   )r   rT   )r+   ÚnÚv)r    r   r   rO   ½   s   z&CreateModel.reduce.<locals>.<listcomp>c                s&   g | ]\}}|  ¡ ˆ jkr||f‘qS r   )r   r   )r+   r[   r\   )r    r   r   rO   Ê   s   c                s(   g | ] \}}|ˆ j krˆ jn||f‘qS r   )Úold_nameÚnew_name)r+   r[   r\   )r    r   r   rO   Ø   s   )r   ) r1   ÚDeleteModelr   r)   rM   ÚRenameModelÚold_name_lowerr'   r^   r(   r.   r*   ÚAlterModelOptionsÚcopyÚupdater   r   Úmodel_name_lowerr	   r0   rT   rP   rR   rG   r   ÚgetattrrZ   r
   r   r   r   r   )r   r    r!   r   Únew_optionsZbetweenrY   )r"   )r    r   r   †   s|    





zCreateModel.reduce)NNN)N)N)r#   r$   r%   Ú__doc__Úserialization_expand_argsr   r8   r=   rH   rJ   rN   r   rR   r   r&   r   r   )r"   r   r'   )   s   



r'   c               @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Z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   r"   r%   )r   r7   r   r   r   r8   æ   s    
zDeleteModel.deconstructc             C   s   |  || j¡ d S )N)Úremove_modelr   )r   r   r<   r   r   r   r=   ð   s    zDeleteModel.state_forwardsc             C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S )N)r>   r?   r   r@   rA   rB   rI   )r   r   rD   rE   rF   rG   r   r   r   rH   ó   s    zDeleteModel.database_forwardsc             C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S )N)r>   r?   r   r@   rA   rB   rC   )r   r   rD   rE   rF   rG   r   r   r   rJ   ø   s    zDeleteModel.database_backwardsc             C   s   d| j f S )NzDelete model %s)r   )r   r   r   r   rN   ý   s    zDeleteModel.describeN)	r#   r$   r%   rh   r8   r=   rH   rJ   rN   r   r   r   r   r_   ã   s   
r_   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ddd„Zdd„ Zd‡ fdd„	Z‡  ZS )r`   zRename a model.c                s   || _ || _tƒ  |¡ d S )N)r]   r^   r   r   )r   r]   r^   )r"   r   r   r     s    zRenameModel.__init__c             C   s
   | j  ¡ S )N)r]   r   )r   r   r   r   ra   	  s    zRenameModel.old_name_lowerc             C   s
   | j  ¡ S )N)r^   r   )r   r   r   r   Únew_name_lower  s    zRenameModel.new_name_lowerc             C   s   | j | jdœ}| jjg |fS )N)r]   r^   )r]   r^   r"   r%   )r   r7   r   r   r   r8     s
    
zRenameModel.deconstructc             C   s>   |t kr|| ¡ fS d|kr.t| ¡  d¡ƒS || ¡ fS d S )NrW   )r   r   r;   rX   )r   Zremote_modelr   rV   r   r   r   Ú_get_model_tuple  s
    zRenameModel._get_model_tuplec             C   sR  |j || jf  ¡ }| j|_||j || jf< || jf}d|| jf }g }xÖ|j  ¡ D ]È\\}}}	d}
x¤t|	jƒD ]–\}\}}d }|j	}|rð|  
|j||¡}||kr²| ¡ }||j	_t|dd ƒ}|rð|  
|||¡}||krð|d krè| ¡ }||j	_|rp||f|	j|< d}
qpW |
rT| ||f¡ qTW |j|dd� | || j¡ |j|| jdd� d S )Nz%s.%sFrZ   T)Údelay)r   ra   Úcloner^   r   rk   ÚitemsÚ	enumerater(   rP   rl   rG   rf   rZ   rQ   Zreload_modelsrj   Úreload_model)r   r   r<   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadrU   rV   Úmodel_stateZmodel_changedÚindexr   rT   Zchanged_fieldrP   Zremote_model_tupleZthrough_modelZthrough_model_tupler   r   r   r=   $  sB    

zRenameModel.state_forwardsc             C   sD  |j  || j¡}|  |jj|¡�r@|j  || j¡}| ||jj	|jj	¡ xl|jj
D ]`}|j|krp|}|| jf}	n|j}|jjj|jjjf}	|j j|	Ž j |jj¡}
| ||j|
¡ qRW t|jj|jjƒ}xv|D ]n\}}|j|jksÎ|jjjjsðqÎ|jj}|jj}| ||jj	|jj	¡ | ||j |jj¡|j |jj¡¡ qÎW d S )N)r>   r?   r^   r@   rA   rB   r]   Úalter_db_tabler/   Údb_tableZrelated_objectsZrelated_modelrk   r   rV   Ú	get_fieldrT   r   Zalter_fieldÚzipÚlocal_many_to_manyrG   rP   rZ   Úauto_created)r   r   rD   rE   rF   Ú	new_modelÚ	old_modelZrelated_objectrG   Zrelated_keyZto_fieldr(   Ú	old_fieldÚ	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rH   M  sF    




zRenameModel.database_forwardsc             C   s\   | j | j | _| _ | j| j | _| _|  ||||¡ | j | j | _| _ | j| j | _| _d S )N)ra   rk   r]   r^   rH   )r   r   rD   rE   rF   r   r   r   rJ   €  s
    zRenameModel.database_backwardsNc             C   s   |  ¡ | jkp|  ¡ | jkS )N)r   ra   rk   )r   r   r   r   r   r   r   ‰  s    zRenameModel.references_modelc             C   s   d| j | jf S )NzRename model %s to %s)r]   r^   )r   r   r   r   rN   �  s    zRenameModel.describec                sL   t |tƒr&| j|jkr&t| j|jƒgS tt| ƒj|||d�pJ| 	| j|¡ S )N)r   )
r1   r`   rk   ra   r]   r^   r   r   r   r   )r   r    r!   r   )r"   r   r   r   ’  s    

zRenameModel.reduce)N)N)r#   r$   r%   rh   r   r   ra   rk   r8   rl   r=   rH   rJ   r   rN   r   r&   r   r   )r"   r   r`     s   )3	
r`   c                   sV   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	d‡ fdd„	Z
‡  ZS )ÚAlterModelTablezRename a model's table.c                s   || _ tƒ  |¡ d S )N)Ú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   r7   r   r   r   r8   ª  s
    
zAlterModelTable.deconstructc             C   s.   | j |j|| jf jd< |j|| jdd� d S )Nru   T)rm   )r   r   r   r)   rq   )r   r   r<   r   r   r   r=   µ  s    zAlterModelTable.state_forwardsc       	      C   s˜   |j  || j¡}|  |jj|¡r”|j  || j¡}| ||jj|jj¡ xLt	|jj
|jj
ƒD ]6\}}|jjjjrZ| |jj|jjjj|jjjj¡ qZW d S )N)r>   r?   r   r@   rA   rB   rt   r/   ru   rw   rx   rP   rZ   ry   )	r   r   rD   rE   rF   rz   r{   r|   r}   r   r   r   rH   ¹  s    

z!AlterModelTable.database_forwardsc             C   s   |   ||||¡S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ   Ë  s    z"AlterModelTable.database_backwardsc             C   s   d| j | jd k	r| jndf S )NzRename table for %s to %sz	(default))r   r   )r   r   r   r   rN   Î  s    zAlterModelTable.describeNc                s2   t |ttfƒr | j|jkr |gS tƒ j|||d�S )N)r   )r1   r~   r_   r   r   r   )r   r    r!   r   )r"   r   r   r   Ô  s    zAlterModelTable.reduce)N)r#   r$   r%   rh   r   r8   r=   rH   rJ   rN   r   r&   r   r   )r"   r   r~   £  s   r~   c                   s   e Zd Zd‡ fdd„	Z‡  ZS )ÚModelOptionOperationNc                s4   t || jtfƒr"| j|jkr"|gS tƒ j|||d�S )N)r   )r1   r"   r_   r   r   r   )r   r    r!   r   )r"   r   r   r   Û  s    zModelOptionOperation.reduce)N)r#   r$   r%   r   r&   r   r   )r"   r   r€   Ú  s   r€   c                   s   e Zd Zd‡ fdd„	Z‡  ZS )ÚFieldRelatedOptionOperationNc                s@   t |tƒr.| j|jkr.|  |j|j¡s.|| gS tƒ j|||d�S )N)r   )	r1   r   r   re   Úreferences_fieldrV   r   r   r   )r   r    r!   r   )r"   r   r   r   â  s
    
z"FieldRelatedOptionOperation.reduce)N)r#   r$   r%   r   r&   r   r   )r"   r   r�   á  s   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 )ÚAlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    Úunique_togetherc                s(   t |ƒ}dd„ |D ƒ| _tƒ  |¡ d S )Nc             S   s   h | ]}t |ƒ’qS r   )r;   )r+   Úconsr   r   r   ú	<setcomp>ó  s    z/AlterUniqueTogether.__init__.<locals>.<setcomp>)r   r„   r   r   )r   r   r„   )r"   r   r   r   ñ  s    zAlterUniqueTogether.__init__c             C   s   | j | jdœ}| jjg |fS )N)r   r„   )r   r„   r"   r%   )r   r7   r   r   r   r8   ö  s
    
zAlterUniqueTogether.deconstructc             C   s4   |j || jf }| j|j| j< |j|| jdd� d S )NT)rm   )r   r   r„   r)   Úoption_namerq   )r   r   r<   rr   r   r   r   r=     s    z"AlterUniqueTogether.state_forwardsc             C   s^   |j  || j¡}|  |jj|¡rZ|j  || j¡}| |t|j| j	t
ƒ ƒt|j| j	t
ƒ ƒ¡ d S )N)r>   r?   r   r@   rA   rB   Zalter_unique_togetherrf   r/   r‡   r   )r   r   rD   rE   rF   rz   r{   r   r   r   rH     s    z%AlterUniqueTogether.database_forwardsc             C   s   |   ||||¡S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ     s    z&AlterUniqueTogether.database_backwardsNc                s,   |   ||¡o*| j p*t‡ fdd„| jD ƒƒS )Nc             3   s   | ]}ˆ |kV  qd S )Nr   )r+   Útogether)r   r   r   r-     s    z7AlterUniqueTogether.references_field.<locals>.<genexpr>)r   r„   Úany)r   rV   r   r   r   )r   r   r‚     s    z$AlterUniqueTogether.references_fieldc             C   s   d| j | jt| jpdƒf S )Nz"Alter %s for %s (%s constraint(s))rL   )r‡   r   Úlenr„   )r   r   r   r   rN     s    zAlterUniqueTogether.describe)N)r#   r$   r%   rh   r‡   r   r8   r=   rH   rJ   r‚   rN   r&   r   r   )r"   r   rƒ   ê  s   

	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 )ÚAlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    Úindex_togetherc                s(   t |ƒ}dd„ |D ƒ| _tƒ  |¡ d S )Nc             S   s   h | ]}t |ƒ’qS r   )r;   )r+   r…   r   r   r   r†   )  s    z.AlterIndexTogether.__init__.<locals>.<setcomp>)r   rŒ   r   r   )r   r   rŒ   )r"   r   r   r   '  s    zAlterIndexTogether.__init__c             C   s   | j | jdœ}| jjg |fS )N)r   rŒ   )r   rŒ   r"   r%   )r   r7   r   r   r   r8   ,  s
    
zAlterIndexTogether.deconstructc             C   s4   |j || jf }| j|j| j< |j|| jdd� d S )NT)rm   )r   r   rŒ   r)   r‡   rq   )r   r   r<   rr   r   r   r   r=   7  s    z!AlterIndexTogether.state_forwardsc             C   s^   |j  || j¡}|  |jj|¡rZ|j  || j¡}| |t|j| j	t
ƒ ƒt|j| j	t
ƒ ƒ¡ d S )N)r>   r?   r   r@   rA   rB   Zalter_index_togetherrf   r/   r‡   r   )r   r   rD   rE   rF   rz   r{   r   r   r   rH   <  s    z$AlterIndexTogether.database_forwardsc             C   s   |   ||||¡S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ   F  s    z%AlterIndexTogether.database_backwardsNc                s,   |   ||¡o*| j p*t‡ fdd„| jD ƒƒS )Nc             3   s   | ]}ˆ |kV  qd S )Nr   )r+   rˆ   )r   r   r   r-   N  s    z6AlterIndexTogether.references_field.<locals>.<genexpr>)r   rŒ   r‰   )r   rV   r   r   r   )r   r   r‚   I  s    z#AlterIndexTogether.references_fieldc             C   s   d| j | jt| jpdƒf S )Nz"Alter %s for %s (%s constraint(s))rL   )r‡   r   rŠ   rŒ   )r   r   r   r   rN   R  s    zAlterIndexTogether.describe)N)r#   r$   r%   rh   r‡   r   r8   r=   rH   rJ   r‚   rN   r&   r   r   )r"   r   r‹      s   

	r‹   c                   sR   e 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 )ÚAlterOrderWithRespectToz9Represent a change with the order_with_respect_to option.c                s   || _ tƒ  |¡ d S )N)Úorder_with_respect_tor   r   )r   r   rŽ   )r"   r   r   r   Y  s    z AlterOrderWithRespectTo.__init__c             C   s   | j | jdœ}| jjg |fS )N)r   rŽ   )r   rŽ   r"   r%   )r   r7   r   r   r   r8   ]  s
    
z#AlterOrderWithRespectTo.deconstructc             C   s2   |j || jf }| j|jd< |j|| jdd� d S )NrŽ   T)rm   )r   r   rŽ   r)   rq   )r   r   r<   rr   r   r   r   r=   h  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¡}| 
¡ s€d|_| ||¡ d S )NÚ_orderr   )r>   r?   r   r@   rA   rB   r/   rŽ   Zremove_fieldrv   Zhas_defaultÚdefaultZ	add_field)r   r   rD   rE   rF   Zto_modelZ
from_modelrT   r   r   r   rH   m  s    z)AlterOrderWithRespectTo.database_forwardsc             C   s   |   ||||¡ d S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ     s    z*AlterOrderWithRespectTo.database_backwardsNc             C   s    |   ||¡o| jd kp|| jkS )N)r   rŽ   )r   rV   r   r   r   r   r   r‚   ‚  s    
z(AlterOrderWithRespectTo.references_fieldc             C   s   d| j | jf S )Nz%Set order_with_respect_to on %s to %s)r   rŽ   )r   r   r   r   rN   ‹  s    z AlterOrderWithRespectTo.describe)N)r#   r$   r%   rh   r   r8   r=   rH   rJ   r‚   rN   r&   r   r   )r"   r   r�   V  s   
	r�   c            
       s`   e Zd ZdZdddddddd	d
dg
Z‡ fdd„Zdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
‡  ZS )rb   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get_latest_byZmanagedZorderingÚpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                s   || _ tƒ  |¡ d S )N)r)   r   r   )r   r   r)   )r"   r   r   r   ¤  s    zAlterModelOptions.__init__c             C   s   | j | jdœ}| jjg |fS )N)r   r)   )r   r)   r"   r%   )r   r7   r   r   r   r8   ¨  s
    
zAlterModelOptions.deconstructc             C   sl   |j || jf }t|jƒ|_|j | j¡ x*| jD ] }|| jkr2||jkr2|j|= q2W |j|| jdd� d S )NT)rm   )r   r   r:   r)   rd   ÚALTER_OPTION_KEYSrq   )r   r   r<   rr   Úkeyr   r   r   r=   ³  s    z AlterModelOptions.state_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rH   ¼  s    z#AlterModelOptions.database_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rJ   ¿  s    z$AlterModelOptions.database_backwardsc             C   s   d| j f S )NzChange Meta options on %s)r   )r   r   r   r   rN   Â  s    zAlterModelOptions.describe)r#   r$   r%   rh   r’   r   r8   r=   rH   rJ   rN   r&   r   r   )r"   r   rb   �  s"   	rb   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.r*   c                s   || _ tƒ  |¡ d S )N)r*   r   r   )r   r   r*   )r"   r   r   r   Ë  s    zAlterModelManagers.__init__c             C   s   | j j| j| jgi fS )N)r"   r%   r   r*   )r   r   r   r   r8   Ï  s    
zAlterModelManagers.deconstructc             C   s2   |j || jf }t| jƒ|_|j|| jdd� d S )NT)rm   )r   r   r9   r*   rq   )r   r   r<   rr   r   r   r   r=   Ö  s    z!AlterModelManagers.state_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rH   Û  s    z$AlterModelManagers.database_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rJ   Þ  s    z%AlterModelManagers.database_backwardsc             C   s   d| j f S )NzChange managers on %s)r   )r   r   r   r   rN   á  s    zAlterModelManagers.describe)r#   r$   r%   rh   ri   r   r8   r=   rH   rJ   rN   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 )N)rV   r   )r   r   r   r   re   è  s    zIndexOperation.model_name_lowerN)r#   r$   r%   r‡   r   re   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.)rV   r   r   rs   )r   rV   rs   r   r   r   r   ð  s    zAddIndex.__init__c             C   sR   |j || jf }t|j| j ƒ}| | j ¡ ¡ ||j| j< |j|| jdd� d S )NT)rm   )	r   re   r9   r)   r‡   rQ   rs   rn   rq   )r   r   r<   rr   r–   r   r   r   r=   ù  s
    zAddIndex.state_forwardsc             C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S )N)r>   r?   rV   r@   rA   rB   Ú	add_indexrs   )r   r   rD   rE   rF   rG   r   r   r   rH      s    zAddIndex.database_forwardsc             C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S )N)r>   r?   rV   r@   rA   rB   Úremove_indexrs   )r   r   rD   rE   rF   rG   r   r   r   rJ     s    zAddIndex.database_backwardsc             C   s   | j | jdœ}| jjg |fS )N)rV   rs   )rV   rs   r"   r%   )r   r7   r   r   r   r8   
  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, )rs   r   Újoinr(   rV   )r   r   r   r   rN     s    zAddIndex.describeN)
r#   r$   r%   rh   r   r=   rH   rJ   r8   rN   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 )N)rV   r   )r   rV   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   )r+   Úidx)r   r   r   rO   '  s    z.RemoveIndex.state_forwards.<locals>.<listcomp>T)rm   )r   re   r)   r‡   rq   )r   r   r<   rr   r–   r   )r   r   r=   $  s    zRemoveIndex.state_forwardsc             C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S )N)r>   r?   rV   r@   rA   rB   r   re   Úget_index_by_namer   r™   )r   r   rD   rE   rF   rG   Zfrom_model_staters   r   r   r   rH   *  s
    zRemoveIndex.database_forwardsc             C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S )N)r>   r?   rV   r@   rA   rB   r   re   r�   r   r˜   )r   r   rD   rE   rF   rG   Zto_model_staters   r   r   r   rJ   1  s
    zRemoveIndex.database_backwardsc             C   s   | j | jdœ}| jjg |fS )N)rV   r   )rV   r   r"   r%   )r   r7   r   r   r   r8   8  s
    
zRemoveIndex.deconstructc             C   s   d| j | jf S )NzRemove index %s from %s)r   rV   )r   r   r   r   rN   C  s    zRemoveIndex.describeN)
r#   r$   r%   rh   r   r=   rH   rJ   r8   rN   r   r   r   r   r›     s   r›   N)"Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.fields.relatedr   Zdjango.db.models.optionsr   Zdjango.utils.functionalr   r(   r	   r
   r   r   r   r   r   r'   r_   r`   r~   r€   r�   rƒ   r‹   r�   rb   r”   r•   r—   r›   r   r   r   r   Ú<module>   s0   
 ; #7	66970