
 Xbq                 @   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 d d	 l m Z m Z m Z m Z m Z d
 d   Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd  d!   d! e  Z Gd" d#   d# e  Z  d$ S)%    )unicode_literals)models)	Operation)
ModelState)normalize_together)six)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameFieldc             C   sP   t    } x@ | D]8 } | | k r; t d | |  f   n  | j |  q Wd  S)Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   T/home/ubuntu/projects/ifolica/build/django/django/db/migrations/operations/models.py_check_for_duplicates   s    	r   c                   sR   e  Z d  Z d d   Z e d d    Z d d d  Z d   f d d	  Z   S)
ModelOperationc             C   s   | |  _  d  S)N)name)selfr   r   r   r   __init__   s    zModelOperation.__init__c             C   s   |  j  j   S)N)r   lower)r   r   r   r   
name_lower   s    zModelOperation.name_lowerNc             C   s   | j    |  j k S)N)r   r   )r   r   	app_labelr   r   r   references_model!   s    zModelOperation.references_modelc                s5   t  t |   j | | d | p4 | j |  j |  S)Nr   )superr   reducer   r   )r   	operation
in_betweenr   )	__class__r   r   r    $   s    !zModelOperation.reduce)__name__
__module____qualname__r   r   r   r   r    r   r   )r#   r   r      s   r   c                   s   e  Z d  Z d Z d d d g Z d d 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   S)CreateModelz!
    Create a model's table.
    fieldsoptionsmanagersNc                s   | |  _  | p i  |  _ | p' t j f |  _ | p6 g  |  _ t t |   j |  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>:   s    z'CreateModel.__init__.<locals>.<genexpr>basesc             s   sN   |  ]D } t  | d   r$ | j j n! t | t j  rB | j   n | Vq d S)_metaN)hasattrr/   Zlabel_lower
isinstancer   string_typesr   )r+   baser   r   r   r-   <   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   r   2   s    		zCreateModel.__init__c             C   s   i |  j  d 6|  j d 6} |  j r3 |  j | d <n  |  j ra |  j t j f k ra |  j | d <n  |  j r |  j d t j   f g k r |  j | d <n  |  j j	 g  | f S)Nr   r(   r)   r.   Zobjectsr*   )
r   r(   r)   r.   r   r4   r*   Managerr#   r$   )r   kwargsr   r   r   deconstructB   s    
	'	zCreateModel.deconstructc          	   C   sM   | j  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_forwardsS   s    	zCreateModel.state_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  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_forwards]   s    zCreateModel.database_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r=   r>   r   r?   r@   rA   delete_model)r   r   rC   rD   rE   rF   r   r   r   database_backwardsb   s    zCreateModel.database_backwardsc             C   s,   d |  j  j d d  r d n d |  j f S)NzCreate %smodel %sproxyFzproxy  )r)   getr   )r   r   r   r   describeg   s    zCreateModel.describec             C   s   |  j  g } x@ |  j D]5 } t | t j  r | j | j d  d  q q Wx^ |  j D]S \ } } | j rY t | j j	 t j  r | j | j j	 j d  d  q qY qY Wx* | D]" } | j
   | j
   k r d Sq Wd S)N.r	   TFrO   )r   r.   r1   r   r2   appendsplitr(   remote_fieldrF   r   )r   r   r   Zstrings_to_checkr3   fnamefieldstringr   r   r   r   j   s    !	*zCreateModel.references_modelc             C   s<   t  | t j  r" | j d d  S| j j | j j f Sd S)z{
        Take either a model class or an "app_label.ModelName" string
        and return (app_label, object_name).
        rN   r	   N)r1   r   r2   rQ   r/   r   object_name)r   rF   r   r   r   model_to_key{   s    zCreateModel.model_to_keyc          
      s  t    t  r; |  j   j k r; |  j j d d  r; g  St    t  r |  j   j k r t   j d |  j	 d |  j d |  j
 d |  j g St    t  r|  j   j k rt    t  rt   j d  ru  j j rux | D] } |  j   j j j  \ } } | j | |  rd St   j j d d   r |  j   j j j  \ } } | j | |  rnd Sq q Wn  t |  j d |  j	   j   j f g d |  j d |  j
 d |  j g St    t  rt |  j d   f d	 d
   |  j	 D d |  j d |  j
 d |  j g St    t  rht |  j d   f d d
   |  j	 D d |  j d |  j
 d |  j g St    t  rt |  j d   f d d
   |  j	 D d |  j d |  j
 d |  j g Sn  t t |   j   | d | S)NrJ   Fr(   r)   r.   r*   rR   throughc                s:   g  |  ]0 \ } } | |   j  k r-   j n | f  q Sr   )r   rT   )r+   nv)r!   r   r   
<listcomp>   s   	z&CreateModel.reduce.<locals>.<listcomp>c                s7   g  |  ]- \ } } | j      j k r | | f  q Sr   )r   r   )r+   rY   rZ   )r!   r   r   r[      s   		c                s:   g  |  ]0 \ } } |   j  k r*   j n | | f  q Sr   )old_namenew_name)r+   rY   rZ   )r!   r   r   r[      s   	r   )r1   DeleteModelr   r)   rL   RenameModelold_name_lowerr'   r]   r(   r.   r*   r   model_name_lowerr
   r0   rT   rR   rW   rF   r   getattrrX   r   r   r   r   r   r    )r   r!   r"   r   ZbetweenrV   )r#   )r!   r   r       sj    !				!												zCreateModel.reduce)r$   r%   r&   __doc__serialization_expand_argsr   r7   r<   rG   rI   rM   r   rW   r    r   r   )r#   r   r'   +   s   

r'   c               @   sR   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 
    Drops a model's table.
    c             C   s#   i |  j  d 6} |  j j g  | f S)Nr   )r   r#   r$   )r   r6   r   r   r   r7      s
    	zDeleteModel.deconstructc             C   s   | j  | |  j  d  S)N)remove_modelr   )r   r   r;   r   r   r   r<      s    zDeleteModel.state_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r=   r>   r   r?   r@   rA   rH   )r   r   rC   rD   rE   rF   r   r   r   rG      s    zDeleteModel.database_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r=   r>   r   r?   r@   rA   rB   )r   r   rC   rD   rE   rF   r   r   r   rI      s    zDeleteModel.database_backwardsc             C   s   d |  j  f S)NzDelete model %s)r   )r   r   r   r   rM      s    zDeleteModel.describeN)	r$   r%   r&   rc   r7   r<   rG   rI   rM   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 d  Z d d   Z d   f d d  Z   S)r_   z
    Renames a model.
    c                s,   | |  _  | |  _ t t |   j |  d  S)N)r\   r]   r   r_   r   )r   r\   r]   )r#   r   r   r      s    		zRenameModel.__init__c             C   s   |  j  j   S)N)r\   r   )r   r   r   r   r`      s    zRenameModel.old_name_lowerc             C   s   |  j  j   S)N)r]   r   )r   r   r   r   new_name_lower  s    zRenameModel.new_name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr\   r]   )r\   r]   r#   r$   )r   r6   r   r   r   r7     s    
	zRenameModel.deconstructc             C   s  | j  } | j | |  j  } | | j _  d d   | j j d d  D } | j | |  j f | j | |  j f <|  j | j | |  j f _	 | j
 | |  j  x | D] } | j | k	 r q n  | j | k r | |  j f } n | j j j | j j j f } g  } xk | j | j D]Y \ }	 }
 |	 | j j	 k r_|
 j   }
 d | |  j f |
 j _ n  | j |	 |
 f  qW| | j | _ | j |   q Wd d   | j j D } d | |  j f } x | D] } | | k r| |  j f } n | j j | j j f } g  } d } x | j | j D]q \ }	 }
 |
 j r|
 j r|
 j j | k r|
 j   }
 d | |  j f |
 j _ d } n  | j |	 |
 f  q#W| r| | j | _ | j |   qqW| j | |  j  d  S)	Nc             s   s;   |  ]1 } | j  r | j r | j s/ | j r | Vq d  S)N)auto_createdZconcretehiddenmany_to_many)r+   fr   r   r   r-     s    z-RenameModel.state_forwards.<locals>.<genexpr>Zinclude_hiddenTz%s.%sc             S   s1   h  |  ]' } t  | j d  d  r | j j  q S)rF   N)rb   rR   rF   )r+   rj   r   r   r   	<setcomp>8  s   	 z-RenameModel.state_forwards.<locals>.<setcomp>F)r=   r>   r\   r/   Z
get_fieldsr   r`   rf   r]   r   re   rF   related_modelr   
model_namer(   rT   clonerR   rP   reload_modelZis_relationri   rX   )r   r   r;   r=   rF   Zall_related_objectsrelated_objectrelated_key
new_fieldsr   rT   Zrelated_modelsrm   rl   changedr   r   r   r<     sP    	"&$	zRenameModel.state_forwardsc             C   s  | j  j | |  j  } |  j | j j |  r| j  j | |  j  } | j | | j j	 | j j	  x | j j
 D] } | j | k r | } | |  j f }	 n' | j } | j j j | j j j f }	 | j  j |	   j j | j j  }
 | j | | j |
  qt Wt | j j | j j  } x | D] \ } } | j | j k s(| j j j j r_q(n  | j j } | j j } | j | | j j	 | j j	  | j | | j j | j j  | j j | j j   q(Wn  d  S)N)r=   r>   r]   r?   r@   rA   r\   alter_db_tabler/   db_tableZrelated_objectsrl   rf   r   rm   	get_fieldrT   r   Zalter_fieldziplocal_many_to_manyrF   rR   rX   rg   )r   r   rC   rD   rE   	new_model	old_modelrp   rF   rq   Zto_fieldr(   	old_field	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rG   N  sF    			%	zRenameModel.database_forwardsc             C   s~   |  j  |  j |  _ |  _  |  j |  j |  _ |  _ |  j | | | |  |  j  |  j |  _ |  _  |  j |  j |  _ |  _ d  S)N)r`   rf   r\   r]   rG   )r   r   rC   rD   rE   r   r   r   rI     s
    zRenameModel.database_backwardsNc             C   s(   | j    |  j k p' | j    |  j k S)N)r   r`   rf   )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   rM     s    zRenameModel.describec                sl   t  | t  r7 |  j | j k r7 t |  j | j  g St t |   j | | d | pk | j	 |  j |  S)Nr   )
r1   r_   rf   r`   r\   r]   r   r   r    r   )r   r!   r"   r   )r#   r   r   r      s    !zRenameModel.reduce)r$   r%   r&   rc   r   r   r`   rf   r7   r<   rG   rI   r   rM   r    r   r   )r#   r   r_      s   ;3	r_   c                   sy   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
   S)AlterModelTablez!
    Renames a model's table
    c                s#   | |  _  t t |   j |  d  S)N)tabler   r}   r   )r   r   r~   )r#   r   r   r     s    	zAlterModelTable.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r~   )r   r~   r#   r$   )r   r6   r   r   r   r7     s    
	zAlterModelTable.deconstructc             C   s7   |  j  | j | |  j f j d <| j | |  j  d  S)Nru   )r~   r   r   r)   ro   )r   r   r;   r   r   r   r<     s     zAlterModelTable.state_forwardsc       	      C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j | | j j | j j  xr t	 | j j
 | j j
  D]R \ } } | j j j j r | j | j j | j j j j | j j j j  q q Wn  d  S)N)r=   r>   r   r?   r@   rA   rt   r/   ru   rw   rx   rR   rX   rg   )	r   r   rC   rD   rE   ry   rz   r{   r|   r   r   r   rG     s    	(	z!AlterModelTable.database_forwardsc             C   s   |  j  | | | |  S)N)rG   )r   r   rC   rD   rE   r   r   r   rI     s    z"AlterModelTable.database_backwardsc             C   s   d |  j  |  j f S)NzRename table for %s to %s)r   r~   )r   r   r   r   rM     s    zAlterModelTable.describeNc                sM   t  | t t f  r. |  j | j k r. | g St t |   j | | d | S)Nr   )r1   r}   r^   r   r   r    )r   r!   r"   r   )r#   r   r   r      s    'zAlterModelTable.reduce)r$   r%   r&   rc   r   r7   r<   rG   rI   rM   r    r   r   )r#   r   r}     s   r}   c                   s%   e  Z d  Z d   f d d  Z   S)ModelOptionOperationNc                sP   t  | |  j t f  r1 |  j | j k r1 | g St t |   j | | d | S)Nr   )r1   r#   r^   r   r   r   r    )r   r!   r"   r   )r#   r   r   r      s    *zModelOptionOperation.reduce)r$   r%   r&   r    r   r   )r#   r   r     s   r   c                   s%   e  Z d  Z d   f d d  Z   S)FieldRelatedOptionOperationNc                sc   t  | t  rD |  j | j k rD |  j | j | j  rD | |  g St t |   j	 | | d | S)Nr   )
r1   r   r   ra   references_fieldrm   r   r   r   r    )r   r!   r"   r   )r#   r   r   r      s
    
z"FieldRelatedOptionOperation.reduce)r$   r%   r&   r    r   r   )r#   r   r     s   r   c                   sy   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   S)AlterUniqueTogetherz}
    Changes the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    unique_togetherc                sB   t  |  } t d d   | D  |  _ t t |   j |  d  S)Nc             s   s   |  ] } t  |  Vq d  S)N)r:   )r+   consr   r   r   r-     s    z/AlterUniqueTogether.__init__.<locals>.<genexpr>)r   r   r   r   r   r   )r   r   r   )r#   r   r   r     s    zAlterUniqueTogether.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r#   r$   )r   r6   r   r   r   r7     s    
	zAlterUniqueTogether.deconstructc             C   s@   | j  | |  j f } |  j | j |  j <| j | |  j  d  S)N)r   r   r   r)   option_namero   )r   r   r;   model_stater   r   r   r<     s    z"AlterUniqueTogether.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j | t | j |  j	 t
    t | j |  j	 t
     n  d  S)N)r=   r>   r   r?   r@   rA   Zalter_unique_togetherrb   r/   r   r   )r   r   rC   rD   rE   ry   rz   r   r   r   rG     s    z%AlterUniqueTogether.database_forwardsc             C   s   |  j  | | | |  S)N)rG   )r   r   rC   rD   rE   r   r   r   rI     s    z&AlterUniqueTogether.database_backwardsNc                s<   |  j  | |  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   rm   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))rK   )r   r   lenr   )r   r   r   r   rM     s    zAlterUniqueTogether.describe)r$   r%   r&   rc   r   r   r7   r<   rG   rI   r   rM   r   r   )r#   r   r     s   
	r   c                   sy   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   S)AlterIndexTogetherz{
    Changes the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    index_togetherc                sB   t  |  } t d d   | D  |  _ t t |   j |  d  S)Nc             s   s   |  ] } t  |  Vq d  S)N)r:   )r+   r   r   r   r   r-   )  s    z.AlterIndexTogether.__init__.<locals>.<genexpr>)r   r   r   r   r   r   )r   r   r   )r#   r   r   r   '  s    zAlterIndexTogether.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r#   r$   )r   r6   r   r   r   r7   ,  s    
	zAlterIndexTogether.deconstructc             C   s@   | j  | |  j f } |  j | j |  j <| j | |  j  d  S)N)r   r   r   r)   r   ro   )r   r   r;   r   r   r   r   r<   7  s    z!AlterIndexTogether.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j | t | j |  j	 t
    t | j |  j	 t
     n  d  S)N)r=   r>   r   r?   r@   rA   Zalter_index_togetherrb   r/   r   r   )r   r   rC   rD   rE   ry   rz   r   r   r   rG   <  s    z$AlterIndexTogether.database_forwardsc             C   s   |  j  | | | |  S)N)rG   )r   r   rC   rD   rE   r   r   r   rI   F  s    z%AlterIndexTogether.database_backwardsNc                s<   |  j  | |  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   rm   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))rK   )r   r   r   r   )r   r   r   r   rM   R  s    zAlterIndexTogether.describe)r$   r%   r&   rc   r   r   r7   r<   rG   rI   r   rM   r   r   )r#   r   r      s   
	r   c                   ss   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
   S)AlterOrderWithRespectTozD
    Represents a change with the order_with_respect_to option.
    c                s#   | |  _  t t |   j |  d  S)N)order_with_respect_tor   r   r   )r   r   r   )r#   r   r   r   [  s    	z AlterOrderWithRespectTo.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r#   r$   )r   r6   r   r   r   r7   _  s    
	z#AlterOrderWithRespectTo.deconstructc             C   s=   | j  | |  j f } |  j | j d <| j | |  j  d  S)Nr   )r   r   r   r)   ro   )r   r   r;   r   r   r   r   r<   j  s    z&AlterOrderWithRespectTo.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j j r | j j r | j | | j j	 d   q | j j r | j j r | j j	 d  } | j
   s d | _ n  | j | |  q n  d  S)NZ_orderr   )r=   r>   r   r?   r@   rA   r/   r   Zremove_fieldrv   Zhas_defaultdefaultZ	add_field)r   r   rC   rD   rE   Zto_modelZ
from_modelrT   r   r   r   rG   o  s    z)AlterOrderWithRespectTo.database_forwardsc             C   s   |  j  | | | |  d  S)N)rG   )r   r   rC   rD   rE   r   r   r   rI     s    z*AlterOrderWithRespectTo.database_backwardsNc             C   s.   |  j  | |  o- |  j d  k p- | |  j k S)N)r   r   )r   rm   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   rM     s    z AlterOrderWithRespectTo.describe)r$   r%   r&   rc   r   r7   r<   rG   rI   r   rM   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
   S)AlterModelOptionsz
    Sets 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orderingZpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                s#   | |  _  t t |   j |  d  S)N)r)   r   r   r   )r   r   r)   )r#   r   r   r     s    	zAlterModelOptions.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r)   )r   r)   r#   r$   )r   r6   r   r   r   r7     s    
	zAlterModelOptions.deconstructc             C   s   | j  | |  j f } t | j  | _ | j j |  j  x< |  j D]1 } | |  j k rE | | j k rE | j | =qE qE W| j | |  j  d  S)N)r   r   r9   r)   updateALTER_OPTION_KEYSro   )r   r   r;   r   keyr   r   r   r<     s    z AlterModelOptions.state_forwardsc             C   s   d  S)Nr   )r   r   rC   rD   rE   r   r   r   rG     s    z#AlterModelOptions.database_forwardsc             C   s   d  S)Nr   )r   r   rC   rD   rE   r   r   r   rI     s    z$AlterModelOptions.database_backwardsc             C   s   d |  j  f S)NzChange Meta options on %s)r   )r   r   r   r   rM     s    zAlterModelOptions.describe)r$   r%   r&   rc   r   r   r7   r<   rG   rI   rM   r   r   )r#   r   r     s"   		r   c                   sm   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
   S)AlterModelManagersz%
    Alters the model's managers
    r*   c                s#   | |  _  t t |   j |  d  S)N)r*   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   r7     s    	zAlterModelManagers.deconstructc             C   s?   | j  | |  j f } t |  j  | _ | j | |  j  d  S)N)r   r   r8   r*   ro   )r   r   r;   r   r   r   r   r<     s    z!AlterModelManagers.state_forwardsc             C   s   d  S)Nr   )r   r   rC   rD   rE   r   r   r   rG     s    z$AlterModelManagers.database_forwardsc             C   s   d  S)Nr   )r   r   rC   rD   rE   r   r   r   rI     s    z%AlterModelManagers.database_backwardsc             C   s   d |  j  f S)NzChange managers on %s)r   )r   r   r   r   rM     s    zAlterModelManagers.describe)r$   r%   r&   rc   rd   r   r7   r<   rG   rI   rM   r   r   )r#   r   r     s   	r   N)!
__future__r   Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.optionsr   Zdjango.utilsr   Zdjango.utils.functionalr   r(   r
   r   r   r   r   r   r   r'   r^   r_   r}   r   r   r   r   r   r   r   r   r   r   r   <module>   s(   (
 6	66;7