Ë
    bõhi€ñ  ã                   ó0  — d 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lmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ  G d„ de«      Zd„ Z G d„ d«      Z G d„ de«      Z  G d„ d«      Z! G d„ d«      Z"d„ Z# G d„ de"«      Z$d„ Z%y)aª
  
Accessors for related objects.

When a field defines a relation between two models, each model class provides
an attribute to access related instances of the other model class (unless the
reverse accessor has been disabled with related_name='+').

Accessors are implemented as descriptors in order to customize access and
assignment. This module defines the descriptor classes.

Forward accessors follow foreign keys. Reverse accessors trace them back. For
example, with the following models::

    class Parent(Model):
        pass

    class Child(Model):
        parent = ForeignKey(Parent, related_name='children')

 ``child.parent`` is a forward many-to-one relation. ``parent.children`` is a
reverse many-to-one relation.

There are three types of relations (many-to-one, one-to-one, and many-to-many)
and two directions (forward and reverse) for a total of six combinations.

1. Related instance on the forward side of a many-to-one relation:
   ``ForwardManyToOneDescriptor``.

   Uniqueness of foreign key values is irrelevant to accessing the related
   instance, making the many-to-one and one-to-one cases identical as far as
   the descriptor is concerned. The constraint is checked upstream (unicity
   validation in forms) or downstream (unique indexes in the database).

2. Related instance on the forward side of a one-to-one
   relation: ``ForwardOneToOneDescriptor``.

   It avoids querying the database when accessing the parent link field in
   a multi-table inheritance scenario.

3. Related instance on the reverse side of a one-to-one relation:
   ``ReverseOneToOneDescriptor``.

   One-to-one relations are asymmetrical, despite the apparent symmetry of the
   name, because they're implemented in the database with a foreign key from
   one table to another. As a consequence ``ReverseOneToOneDescriptor`` is
   slightly different from ``ForwardManyToOneDescriptor``.

4. Related objects manager for related instances on the reverse side of a
   many-to-one relation: ``ReverseManyToOneDescriptor``.

   Unlike the previous two classes, this one provides access to a collection
   of objects. It returns a manager rather than an instance.

5. Related objects manager for related instances on the forward or reverse
   sides of a many-to-many relation: ``ManyToManyDescriptor``.

   Many-to-many relations are symmetrical. The syntax of Django models
   requires declaring them on one side but that's an implementation detail.
   They could be declared on the other side without any change in behavior.
   Therefore the forward and reverse descriptors can be the same.

   If you're looking for ``ForwardManyToManyDescriptor`` or
   ``ReverseManyToManyDescriptor``, use ``ManyToManyDescriptor`` instead.
é    )Úsync_to_async)Ú
FieldError)ÚDEFAULT_DB_ALIASÚNotSupportedErrorÚconnectionsÚrouterÚtransaction)ÚQÚWindowÚsignals)Ú	RowNumber)ÚGreaterThanÚLessThanOrEqual)ÚQuerySet)ÚDeferredAttribute)Ú
AltersDataÚresolve_callables)Úcached_propertyc                   ó   — e Zd Zd„ Zy)ÚForeignKeyDeferredAttributec                 ó  — |j                   j                  | j                  j                  «      |k7  r6| j                  j	                  |«      r| j                  j                  |«       ||j                   | j                  j                  <   y ©N)Ú__dict__ÚgetÚfieldÚattnameÚ	is_cachedÚdelete_cached_value©ÚselfÚinstanceÚvalues      úa/var/www/alwasay/venv/lib/python3.12/site-packages/django/db/models/fields/related_descriptors.pyÚ__set__z#ForeignKeyDeferredAttribute.__set__V   sh   € Ø×Ñ× Ñ  §¡×!3Ñ!3Ó4¸Ò=À$Ç*Á*×BVÑBVØôC
ð �J‰J×*Ñ*¨8Ô4Ø05ˆ×Ñ˜$Ÿ*™*×,Ñ,Ò-ó    N)Ú__name__Ú
__module__Ú__qualname__r$   © r%   r#   r   r   U   s   „ ó6r%   r   c                 ód  — t        di |› d�|i¤Ž}| j                  xs t        }| j                  j                  ràt
        |   j                  j                  st        d«      ‚| j                  j                  | j                  j                  }}| j                  j                  |¬«      j                  «       D ��cg c]  \  }}|‘Œ	 }	}}t        t        «       ||	¬«      }
|t        |
|«      z  }|�|t!        |
|«      z  }| j                  j#                  «        | j%                  |«      S c c}}w )NÚ__inz`Prefetching from a limited queryset is only supported on backends that support window functions.)Úusing)Úpartition_byÚorder_byr)   )r
   Ú_dbr   ÚqueryÚ	is_slicedr   ÚfeaturesÚsupports_over_clauser   Úlow_markÚ	high_markÚget_compilerÚget_order_byr   r   r   r   Úclear_limitsÚfilter)ÚquerysetÚ
field_nameÚ	instancesÚ	predicateÚdbr4   r5   ÚexprÚ_r.   Úwindows              r#   Ú_filter_prefetch_querysetrB   ^   s  € ÜÑ5˜
�| 4Ð(¨)Ð4Ñ5€IØ	�‰Ò	)Ô)€BØ‡~�~×ÒÜ˜2‰×'Ñ'×<Ò<Ü#ð1óð ð 'Ÿn™n×5Ñ5°x·~±~×7OÑ7O�)ˆà (§¡× ;Ñ ;À"Ð ;Ó E× RÑ RÓ T÷
Ù�T˜1ŠDð
ˆñ 
ô œ	›°*ÀxÔPˆØ”[ ¨Ó2Ñ2ˆ	ØÐ Øœ¨°Ó;Ñ;ˆIØ�‰×#Ñ#Ô%Ø�?‰?˜9Ó%Ð%ùó
s   Â<D,c                   óT   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zdd„Z	d„ Z
dd	„Zd
„ Zd„ Zy)ÚForwardManyToOneDescriptoraJ  
    Accessor to the related object on the forward side of a many-to-one or
    one-to-one (via ForwardOneToOneDescriptor subclass) relation.

    In the example::

        class Child(Model):
            parent = ForeignKey(Parent, related_name='children')

    ``Child.parent`` is a ``ForwardManyToOneDescriptor`` instance.
    c                 ó   — || _         y r   )r   )r    Úfield_with_rels     r#   Ú__init__z#ForwardManyToOneDescriptor.__init__€   s	   € Ø#ˆ�
r%   c           	      ó*  — t        d| j                  j                  j                  j                  t
        f| j                  j                  j                  | j                  j                  j                  ›d| j                  j                  ›d�dœ«      S ©NÚRelatedObjectDoesNotExistú.z.RelatedObjectDoesNotExist)r'   r(   )	Útyper   Úremote_fieldÚmodelÚDoesNotExistÚAttributeErrorr'   r(   Úname©r    s    r#   rJ   z4ForwardManyToOneDescriptor.RelatedObjectDoesNotExistƒ   so   € ô
 Ø'Ø�Z‰Z×$Ñ$×*Ñ*×7Ñ7¼ÐHà"Ÿj™j×.Ñ.×9Ñ9ð —J‘J×$Ñ$×1Ó1Ø—J‘J—O“Oð!ñó
ð 	
r%   c                 ó8   — | j                   j                  |«      S r   )r   r   ©r    r!   s     r#   r   z$ForwardManyToOneDescriptor.is_cached•   s   € Ø�z‰z×#Ñ# HÓ-Ð-r%   c                 ó’   — | j                   j                  j                  j                  j	                  |¬«      j                  «       S ©N)Úhints)r   rM   rN   Ú_base_managerÚ
db_managerÚall©r    rW   s     r#   Úget_querysetz'ForwardManyToOneDescriptor.get_queryset˜   s5   € Ø�z‰z×&Ñ&×,Ñ,×:Ñ:×EÑEÈEÐEÓR×VÑVÓXÐXr%   Nc                 óþ  — |€| j                  «       }|j                  |d   ¬«       | j                  j                  }| j                  j                  }|D �ci c]  } ||«      |“Œ }}| j                  j
                  d   }| j                  j                  }|j                  «       s"t        | j                  j
                  «      dk(  r)d|j                  z  |D �ch c]  } ||«      d   ’Œ c}i}	nd| j                  j                  «       z  |i}	 |j                  di |	¤Ž}|j                  s$|D ]  }
| ||
«         }|j                  |
|«       Œ! |||d| j                  j                  «       dfS c c}w c c}w )Nr   ©r!   é   ú%s__inTFr)   )r\   Ú
_add_hintsr   Úget_foreign_related_valueÚget_local_related_valueÚforeign_related_fieldsrM   Ú	is_hiddenÚlenrQ   Úrelated_query_namer9   ÚmultipleÚset_cached_valueÚget_cache_name)r    r<   r:   Úrel_obj_attrÚinstance_attrÚinstÚinstances_dictÚrelated_fieldrM   r0   Úrel_objr!   s               r#   Úget_prefetch_querysetz0ForwardManyToOneDescriptor.get_prefetch_queryset›   s�  € ØÐØ×(Ñ(Ó*ˆHØ×Ñ Y¨q¡\ÐÔ2à—z‘z×;Ñ;ˆØŸ
™
×:Ñ:ˆØ@IÖJ¸™-¨Ó-¨tÑ3ÐJˆÐJØŸ
™
×9Ñ9¸!Ñ<ˆØ—z‘z×.Ñ.ˆð ×!Ñ!Ô#¤s¨4¯:©:×+LÑ+LÓ'MÐQRÒ'RàØ×$Ñ$ñ%ØJSÖ&TÀ$¡}°TÓ':¸1Ó'=Ò&Tð‰Eð
  §
¡
× =Ñ =Ó ?Ñ?ÀÐKˆEØ"�8—?‘?Ñ+ UÑ+ˆð ×$Ò$Ø#ò A�Ø)©,°wÓ*?Ñ@�Ø×-Ñ-¨g°xÕ@ðAð ØØØØ�J‰J×%Ñ%Ó'Øð
ð 	
ùò3 Kùò 'Us   ÁE5ÃE:c                 óz   — | j                  |¬«      }|j                  | j                  j                  |«      «      S ©Nr^   )r\   r   r   Úget_reverse_related_filter)r    r!   Úqss      r#   Ú
get_objectz%ForwardManyToOneDescriptor.get_objectÄ   s3   € Ø×Ñ¨ÐÓ1ˆà�v‰v�d—j‘j×;Ñ;¸HÓEÓFÐFr%   c                 ó  — |€| S 	 | j                   j                  |«      }|€_| j                   j                  sI| j                  | j                   j                  j                  ›d| j                   j                  ›d�«      ‚|S # t        $ rý d| j                   j                  |«      v}|r/|j                  j                  | j                   j                  «      nd}|r@|j                  |«      r/|j                  |«      }| j                   j                  |d¬«      }nd}|€G|rE| j                  |«      }| j                   j                  }|j                  s|j                  ||«       | j                   j                  ||«       Y �Œhw xY w)a=  
        Get the related instance through the forward relation.

        With the example above, when getting ``child.parent``:

        - ``self`` is the descriptor managing the ``parent`` attribute
        - ``instance`` is the ``child`` instance
        - ``cls`` is the ``Child`` class (we don't need it)
        N©Údefaultú has no rK   )r   Úget_cached_valueÚKeyErrorrc   Ú_metaÚget_ancestor_linkrN   r   rv   rM   rh   ri   ÚnullrJ   r&   rQ   )r    r!   Úclsrp   Ú	has_valueÚancestor_linkÚancestorrM   s           r#   Ú__get__z"ForwardManyToOneDescriptor.__get__É   s_  € ð ÐØˆKð
	;Ø—j‘j×1Ñ1°(Ó;ˆGð6 ˆ? 4§:¡:§?¢?Ø×0Ñ0Ø#'§:¡:×#3Ñ#3×#<Ó#<¸d¿j¹j¿o»oÐNóð ð ˆNøô? ò 	;Ø D§J¡J×$FÑ$FÀxÓ$PÐPˆIñ ð —‘×0Ñ0°·±×1AÑ1AÔBàð ñ
  ×!8Ñ!8¸Ô!Bð )×9Ñ9¸(ÓC�ð Ÿ*™*×5Ñ5°hÈÐ5ÓM‘à�Øˆ¡9ØŸ/™/¨(Ó3�Ø#Ÿz™z×6Ñ6�ð $×,Ò,Ø ×1Ñ1°'¸8ÔDØ�J‰J×'Ñ'¨°'×:ð1	;ús   †B ÂDF
Æ	F
c                 óØ  — |�°t        || j                  j                  j                  j                  j
                  «      srt        d|›d|j                  j                  ›d| j                  j                  ›d| j                  j                  j                  j                  j                  ›d�	«      ‚|�°|j                  j                  €0t        j                  |j                  |¬«      |j                  _
        |j                  j                  €0t        j                  |j                  |¬«      |j                  _
        t        j                  ||«      st        d|z  «      ‚| j                  j                  }|€g| j                  j                  |d¬	«      }|�|j!                  |d«       | j                  j"                  D ]  \  }}t%        ||j&                  d«       Œ nI| j                  j"                  D ]0  \  }}t%        ||j&                  t)        ||j&                  «      «       Œ2 | j                  j!                  ||«       |� |j*                  s|j!                  ||«       yyy)
aX  
        Set the related instance through the forward relation.

        With the example above, when setting ``child.parent = parent``:

        - ``self`` is the descriptor managing the ``parent`` attribute
        - ``instance`` is the ``child`` instance
        - ``value`` is the ``parent`` instance on the right of the equal sign
        NúCannot assign "ú": "rK   ú" must be a "ú" instance.r^   úGCannot assign "%r": the current database router prevents this relation.rx   )Ú
isinstancer   rM   rN   r}   Úconcrete_modelÚ
ValueErrorÚobject_namerQ   Ú_stater>   r   Údb_for_writeÚ	__class__Úallow_relationr{   ri   Úrelated_fieldsÚsetattrr   Úgetattrrh   )r    r!   r"   rM   ÚrelatedÚlh_fieldÚrh_fields          r#   r$   z"ForwardManyToOneDescriptor.__set__ü   s  € ð Ð¤ZØ�4—:‘:×*Ñ*×0Ñ0×6Ñ6×EÑEô&
õ ò Ø—N‘N×.Ó.Ø—J‘J—O“OØ—J‘J×+Ñ+×1Ñ1×7Ñ7×CÓCðóð ð ÐØ�‰×!Ñ!Ð)Ü%+×%8Ñ%8Ø×&Ñ&°ô&�—‘Ô"ð �|‰|�‰Ð&Ü"(×"5Ñ"5Ø—O‘O¨hô#�—‘”ô ×(Ñ(¨°Ô9Ü ð Ø"'ñ(óð ð
 —z‘z×.Ñ.ˆð
 ˆ=ð —j‘j×1Ñ1°(ÀDÐ1ÓIˆGð
 Ð"Ø×-Ñ-¨g°tÔ<à&*§j¡j×&?Ñ&?ò :Ñ"�˜(Ü˜ (×"2Ñ"2°DÕ9ñ:ð
 '+§j¡j×&?Ñ&?ò VÑ"�˜(Ü˜ (×"2Ñ"2´G¸EÀ8×CSÑCSÓ4TÕUðVð
 	�
‰
×#Ñ# H¨eÔ4ð
 Ð \×%:Ò%:Ø×)Ñ)¨%°Õ:ð &;Ðr%   c                 óf   — t         | j                  j                  | j                  j                  ffS )zÍ
        Pickling should return the instance attached by self.field on the
        model, not a new copy of that descriptor. Use getattr() to retrieve
        the instance directly from the model.
        )r•   r   rN   rQ   rR   s    r#   Ú
__reduce__z%ForwardManyToOneDescriptor.__reduce__H  s&   € ô ˜Ÿ™×)Ñ)¨4¯:©:¯?©?Ð;Ð;Ð;r%   r   )r&   r'   r(   Ú__doc__rG   r   rJ   r   r\   rq   rv   r„   r$   rš   r)   r%   r#   rD   rD   s   sI   „ ñ
ò$ð ñ
ó ð
ò".òYó'
òRGó
1òfJ;óX<r%   rD   c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )ÚForwardOneToOneDescriptora  
    Accessor to the related object on the forward side of a one-to-one relation.

    In the example::

        class Restaurant(Model):
            place = OneToOneField(Place, related_name='restaurant')

    ``Restaurant.place`` is a ``ForwardOneToOneDescriptor`` instance.
    c                 ó8  •‡— | j                   j                  j                  rà|j                  «       }| j                   j                  j                  }|j
                  j                  D �cg c]  }|j                  ‘Œ c}Št        ˆfd„|D «       «      sn‰D �ci c]  }|t        ||«      “Œ }} |di |¤Ž}|j                  j                  |j                  _        |j                  j                  |j                  _        |S t        ‰| �9  |«      S c c}w c c}w )Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r)   )Ú.0r   Úfieldss     €r#   ú	<genexpr>z7ForwardOneToOneDescriptor.get_object.<locals>.<genexpr>h  s   øè ø€ Ò=¨5�u ”Ñ=ùs   ƒr)   )r   rM   Úparent_linkÚget_deferred_fieldsrN   r}   Úconcrete_fieldsr   Úanyr•   r�   Úaddingr>   Úsuperrv   )	r    r!   ÚdeferredÚ	rel_modelr   ÚkwargsÚobjr¡   r‘   s	          @€r#   rv   z$ForwardOneToOneDescriptor.get_object]  sá   ù€ Ø�:‰:×"Ñ"×.Ò.Ø×3Ñ3Ó5ˆHð Ÿ
™
×/Ñ/×5Ñ5ˆIØ1:·±×1PÑ1PÖQ¨�e—m“mÒQˆFô
 Ó=°HÔ=Ô=ØGMÖN¸e˜%¤¨°5Ó!9Ñ9ÐN�ÐNÙÑ) &Ñ)�Ø$,§O¡O×$:Ñ$:�—
‘
Ô!Ø (§¡× 2Ñ 2�—
‘
”Ø�
Ü‰wÑ! (Ó+Ð+ùò Rùò Os   Á+DÂDc                 óÊ  •— t         ‰| �  ||«       | j                  j                  r·| j                  j                  j
                  r–|j                  }|j                  D �cg c]  }|j                  r|j                  r|‘Œ }}|D ]S  }|j                  j                  j                  j                  j                  }|�t        ||«      nd }t        |||«       ŒU y y y c c}w r   )r¨   r$   r   Úprimary_keyrM   r£   r}   r¥   rN   Úpkr   r•   r”   )	r    r!   r"   Úoptsr   Úinherited_pk_fieldsÚrel_model_pk_nameÚ	raw_valuer‘   s	           €r#   r$   z!ForwardOneToOneDescriptor.__set__p  sÞ   ø€ Ü‰‰˜ %Ô(ð �:‰:×!Ò! d§j¡j×&=Ñ&=×&IÒ&IØ—>‘>ˆDð "×1Ñ1ö#àØ×$Ò$¨×);Ò);ò ð#Ðð #ð
 -ò @�Ø$)×$6Ñ$6×$<Ñ$<×$BÑ$B×$EÑ$E×$MÑ$MÐ!à9>Ð9J”G˜EÐ#4Ô5ÐPTð ô ˜Ð"3°YÕ?ñ@ð 'JÐ!ùò#s   Á"!C )r&   r'   r(   r›   rv   r$   Ú__classcell__©r‘   s   @r#   r�   r�   Q  s   ø„ ñ	ô,÷&@ð @r%   r�   c                   óN   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zdd„Z	dd„Z
d	„ Zd
„ Zy)ÚReverseOneToOneDescriptora  
    Accessor to the related object on the reverse side of a one-to-one
    relation.

    In the example::

        class Restaurant(Model):
            place = OneToOneField(Place, related_name='restaurant')

    ``Place.restaurant`` is a ``ReverseOneToOneDescriptor`` instance.
    c                 ó   — || _         y r   )r–   )r    r–   s     r#   rG   z"ReverseOneToOneDescriptor.__init__‘  s   € ð ˆ�r%   c           	      ó  — t        d| j                  j                  j                  t        f| j                  j
                  j                  | j                  j
                  j                  ›d| j                  j                  ›d�dœ«      S rI   )	rL   r–   Úrelated_modelrO   rP   rN   r'   r(   rQ   rR   s    r#   rJ   z3ReverseOneToOneDescriptor.RelatedObjectDoesNotExist–  sk   € ô Ø'Ø�\‰\×'Ñ'×4Ñ4´nÐEà"Ÿl™l×0Ñ0×;Ñ;ð —L‘L×&Ñ&×3Ó3Ø—L‘L×%Ó%ð!ñó
ð 	
r%   c                 ó8   — | j                   j                  |«      S r   )r–   r   rT   s     r#   r   z#ReverseOneToOneDescriptor.is_cached§  s   € Ø�|‰|×%Ñ% hÓ/Ð/r%   c                 ó~   — | j                   j                  j                  j                  |¬«      j	                  «       S rV   )r–   rº   rX   rY   rZ   r[   s     r#   r\   z&ReverseOneToOneDescriptor.get_querysetª  s/   € Ø�|‰|×)Ñ)×7Ñ7×BÑBÈÐBÓO×SÑSÓUÐUr%   Nc                 ó$  — |€| j                  «       }|j                  |d   ¬«       | j                  j                  j                  }| j                  j                  j
                  }|D �ci c]  } ||«      |“Œ }}d| j                  j                  j                  z  |i} |j                  di |¤Ž}|D ]3  }| ||«         }	| j                  j                  j                  ||	«       Œ5 |||d| j                  j                  «       dfS c c}w )Nr   r^   r`   TFr)   )
r\   ra   r–   r   rc   rb   rQ   r9   ri   rj   )
r    r<   r:   rk   rl   rm   rn   r0   rp   r!   s
             r#   rq   z/ReverseOneToOneDescriptor.get_prefetch_queryset­  s  € ØÐØ×(Ñ(Ó*ˆHØ×Ñ Y¨q¡\ÐÔ2à—|‘|×)Ñ)×AÑAˆØŸ™×*Ñ*×DÑDˆØ@IÖJ¸™-¨Ó-¨tÑ3ÐJˆÐJØ˜DŸL™L×.Ñ.×3Ñ3Ñ3°YÐ?ˆØ"�8—?‘?Ñ+ UÑ+ˆð  ò 	CˆGØ%¡l°7Ó&;Ñ<ˆHØ�L‰L×Ñ×/Ñ/°¸ÕBð	Cð ØØØØ�L‰L×'Ñ'Ó)Øð
ð 	
ùò Ks   Á,Dc                 ó~  — |€| S 	 | j                   j                  |«      }|€C| j                  |j                  j                  ›d| j                   j                  «       ›d�«      ‚|S # t        $ rË |j                  }|€d}nš| j                   j                  j                  |«      }	  | j                  |¬«      j                  di |¤Ž}| j                   j                  j                  ||«       n+# | j                   j                  j                  $ r d}Y nw xY w| j                   j                  ||«       Y �Œw xY w)a‰  
        Get the related instance through the reverse relation.

        With the example above, when getting ``place.restaurant``:

        - ``self`` is the descriptor managing the ``restaurant`` attribute
        - ``instance`` is the ``place`` instance
        - ``cls`` is the ``Place`` class (unused)

        Keep in mind that ``Restaurant`` holds the foreign key to ``Place``.
        Nr^   rz   rK   r)   )r–   r{   r|   r¯   r   Úget_forward_related_filterr\   r   ri   rº   rO   rJ   r‘   r&   Úget_accessor_name)r    r!   r€   rp   Ú
related_pkÚfilter_argss         r#   r„   z!ReverseOneToOneDescriptor.__get__Æ  s-  € ð ÐØˆKð
	=Ø—l‘l×3Ñ3°HÓ=ˆGð$ ˆ?Ø×0Ñ0à×%Ñ%×.Ó.°·±×0NÑ0NÕ0PðRóð ð
 ˆNøô/ ò 	=Ø!Ÿ™ˆJØÐ!Ø‘à"Ÿl™l×0Ñ0×KÑKÈHÓU�ðKØF˜d×/Ñ/¸Ð/ÓB×FÑFÑUÈÑU�Gð —L‘L×&Ñ&×7Ñ7¸ÀÕJøð —|‘|×1Ñ1×>Ñ>ò #Ø"’Gð#úð �L‰L×)Ñ)¨(°G×<ð	=ús5   †A( Á(?D<Â("C1Ã
'D<Ã1%DÄD<ÄDÄD<Ä;D<c                 óÎ  ‡— |€g| j                   j                  ‰d¬«      }|�G| j                   j                  ‰«       t        || j                   j                  j
                  d«       yyt        || j                   j                  «      slt        d|›d‰j                  j                  ›d| j                   j                  «       ›d| j                   j                  j                  j                  ›d�	«      ‚‰j                  j                  €0t        j                  ‰j                   |¬«      ‰j                  _        |j                  j                  €0t        j                  |j                   ‰¬«      |j                  _        t        j"                  |‰«      st        d	|z  «      ‚t%        ˆfd
„| j                   j                  j&                  D «       «      }t)        | j                   j                  j*                  «      D ]  \  }}t        ||j,                  ||   «       Œ! | j                   j/                  ‰|«       | j                   j                  j/                  |‰«       y)a¶  
        Set the related instance through the reverse relation.

        With the example above, when setting ``place.restaurant = restaurant``:

        - ``self`` is the descriptor managing the ``restaurant`` attribute
        - ``instance`` is the ``place`` instance
        - ``value`` is the ``restaurant`` instance on the right of the equal sign

        Keep in mind that ``Restaurant`` holds the foreign key to ``Place``.
        Nrx   r†   r‡   rK   rˆ   r‰   r^   rŠ   c              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr   ©r•   r   )r    r   r!   s     €r#   r¢   z4ReverseOneToOneDescriptor.__set__.<locals>.<genexpr>)  s$   øè ø€ ò àô ˜ %§-¡-×0ñùs   ƒ #)r–   r{   r   r”   r   rQ   r‹   rº   r�   r}   rŽ   rÀ   r�   r>   r   r�   r‘   r’   Útuplerd   Ú	enumerateÚlocal_related_fieldsr   ri   )r    r!   r"   rp   rÁ   Úindexr   s    `     r#   r$   z!ReverseOneToOneDescriptor.__set__ó  sð  ø€ ð  ˆ=ð —l‘l×3Ñ3°HÀdÐ3ÓKˆGØÐ"ð —‘×0Ñ0°Ô:ô ˜ §¡×!3Ñ!3×!8Ñ!8¸$Õ?ð #ô ˜E 4§<¡<×#=Ñ#=Ô>åò Ø—N‘N×.Ó.Ø—L‘L×2Ñ2Õ4Ø—L‘L×.Ñ.×4Ñ4×@Ó@ðóð ð �‰×!Ñ!Ð)Ü%+×%8Ñ%8Ø×&Ñ&°ô&�—‘Ô"ð �|‰|�‰Ð&Ü"(×"5Ñ"5Ø—O‘O¨hô#�—‘”ô ×(Ñ(¨°Ô9Ü ð Ø"'ñ(óð ô
 ó à!Ÿ\™\×/Ñ/×FÑFôó ˆJô !*¨$¯,©,×*<Ñ*<×*QÑ*QÓ Rò A‘��uÜ˜˜uŸ}™}¨j¸Ñ.?Õ@ðAð
 �L‰L×)Ñ)¨(°EÔ:ð �L‰L×Ñ×/Ñ/°°xÕ@r%   c                 óf   — t         | j                  j                  | j                  j                  ffS r   )r•   r–   rN   rQ   rR   s    r#   rš   z$ReverseOneToOneDescriptor.__reduce__:  s&   € ä˜Ÿ™×+Ñ+¨T¯\©\×->Ñ->Ð?Ð?Ð?r%   r   )r&   r'   r(   r›   rG   r   rJ   r   r\   rq   r„   r$   rš   r)   r%   r#   r·   r·   „  sD   „ ñ
òð
 ñ
ó ð
ò 0òVó
ó2+òZEAóN@r%   r·   c                   ó:   — e Zd ZdZd„ Zed„ «       Zdd„Zd„ Zd„ Z	y)	ÚReverseManyToOneDescriptora¹  
    Accessor to the related objects manager on the reverse side of a
    many-to-one relation.

    In the example::

        class Child(Model):
            parent = ForeignKey(Parent, related_name='children')

    ``Parent.children`` is a ``ReverseManyToOneDescriptor`` instance.

    Most of the implementation is delegated to a dynamically defined manager
    class built by ``create_forward_many_to_many_manager()`` defined below.
    c                 ó4   — || _         |j                  | _        y r   )Úrelr   )r    rÎ   s     r#   rG   z#ReverseManyToOneDescriptor.__init__O  s   € ØˆŒØ—Y‘Yˆ�
r%   c                 ó‚   — | j                   j                  }t        |j                  j                  | j                   «      S r   )rÎ   rº   Ú"create_reverse_many_to_one_managerÚ_default_managerr‘   ©r    rº   s     r#   Úrelated_manager_clsz.ReverseManyToOneDescriptor.related_manager_clsS  s4   € àŸ™×.Ñ.ˆä1Ø×*Ñ*×4Ñ4Ø�H‰Hó
ð 	
r%   Nc                 ó,   — |€| S | j                  |«      S )a9  
        Get the related objects through the reverse relation.

        With the example above, when getting ``parent.children``:

        - ``self`` is the descriptor managing the ``children`` attribute
        - ``instance`` is the ``parent`` instance
        - ``cls`` is the ``Parent`` class (unused)
        )rÓ   )r    r!   r€   s      r#   r„   z"ReverseManyToOneDescriptor.__get__\  s    € ð ÐØˆKà×'Ñ'¨Ó1Ð1r%   c                 ó:   — d| j                   j                  «       fS )Nzreverse side of a related set)rÎ   rÀ   rR   s    r#   Ú_get_set_deprecation_msg_paramsz:ReverseManyToOneDescriptor._get_set_deprecation_msg_paramsk  s   € à+Ø�H‰H×&Ñ&Ó(ð
ð 	
r%   c                 ó:   — t        d| j                  «       z  «      ‚)Nz@Direct assignment to the %s is prohibited. Use %s.set() instead.)Ú	TypeErrorrÖ   r   s      r#   r$   z"ReverseManyToOneDescriptor.__set__q  s#   € ÜØNØ×2Ñ2Ó4ñ5ó
ð 	
r%   r   )
r&   r'   r(   r›   rG   r   rÓ   r„   rÖ   r$   r)   r%   r#   rÌ   rÌ   ?  s/   „ ñòð ñ
ó ð
ó2ò
ó
r%   rÌ   c                 ó0   ‡‡—  G ˆˆfd„d| t         «      Š‰S )zæ
    Create a manager for the reverse side of a many-to-one relation.

    This manager subclasses another manager, generally the default manager of
    the related model, and adds behaviors specific to many-to-one relations.
    c                   óø  •‡ — e Zd Zˆ ˆfd„Zˆfd„ZdZd„ Zd„ Zd„ Zˆ fd„Z	dˆ fd„	Z
dd	œd
„Zde_        dd	œd„Zde_        ˆˆ fd„Zde_        d„ Zde_        ˆˆ fd„Zde_        d„ Zde_        ˆˆ fd„Zde_        d„ Zde_        W °j(                  j*                  r>dd	œd„Zde_        dd	œd„Zde_        dd	œd„Zde_        dd	œd„Zde_        d„ Zde_        dddœd„Zde_        dddœd„Zde_        ˆ xZS )ú:create_reverse_many_to_one_manager.<locals>.RelatedManagerc                 ó®   •— t         ‰| �  «        || _        ‰j                  | _        ‰j
                  | _        | j
                  j                  |i| _        y r   )r¨   rG   r!   rº   rN   r   rQ   Úcore_filters)r    r!   r‘   rÎ   s     €€r#   rG   zCcreate_reverse_many_to_one_manager.<locals>.RelatedManager.__init__�  sB   ø€ Ü‰GÑÔà$ˆDŒMØ×*Ñ*ˆDŒJØŸ™ˆDŒJà!%§¡§¡°(Ð ;ˆDÕr%   c                ó€   •— t        | j                  |«      }t        |j                  ‰«      } || j                  «      S r   )r•   rN   rÐ   r‘   r!   )r    ÚmanagerÚmanager_classrÎ   s      €r#   Ú__call__zCcreate_reverse_many_to_one_manager.<locals>.RelatedManager.__call__Š  s5   ø€ Ü˜dŸj™j¨'Ó2ˆGÜ>¸w×?PÑ?PÐRUÓVˆMÙ  §¡Ó/Ð/r%   Tc                 óÆ   — | j                   j                  D ]H  }t        | j                  |j                  «      �Œ$t        d| j                  ›d|j                  › d�«      ‚ y )Nú"ú#" needs to have a value for field "z'" before this relationship can be used.)r   rd   r•   r!   r   r�   )r    r   s     r#   Ú_check_fk_valzHcreate_reverse_many_to_one_manager.<locals>.RelatedManager._check_fk_val‘  s`   € ØŸ™×:Ñ:ò �Ü˜4Ÿ=™=¨%¯-©-Ó8Ñ@Ü$Ø˜DŸM™MÐ,ð -Ø!ŸM™M˜?Ð*QðSóð ñr%   c           
      óÞ  — | j                   xs+ t        j                  | j                  | j                  ¬«      }t
        |   j                  j                  }|j                  | j                  ¬«       | j                   r|j                  | j                   «      }d|_
         |j                  di | j                  ¤Ž}| j                  j                  D ]>  }t        | j                  |j                   «      }|�	|dk(  sŒ+|sŒ.|j#                  «       c S  | j                  j$                  rV	 | j                  j&                  }t        | j                  |j                   «      }| j                  || j                  ii|_        |S # t(        $ ra t+        | j                  j,                  d   j.                  D �cg c]"  }t        | j                  |j                   «      ‘Œ$ nc c}w c}«      }Y ŒŠw xY w)úX
            Filter the queryset for the instance this manager is bound to.
            r^   TÚ éÿÿÿÿr)   )r/   r   Údb_for_readrN   r!   r   r2   Ú!interprets_empty_strings_as_nullsra   r,   Ú_defer_next_filterr9   rÝ   r   rd   r•   r   ÚnoneÚmany_to_oneÚtarget_fieldr   rÆ   Ú
path_infosÚtarget_fieldsÚ_known_related_objects)r    r:   r>   Úempty_strings_as_nullr   Úvalrï   Ú
rel_obj_ids           r#   Ú_apply_rel_filterszMcreate_reverse_many_to_one_manager.<locals>.RelatedManager._apply_rel_filters™  s™  € ð —‘ÒSœV×/Ñ/°·
±
ÀTÇ]Á]ÔSˆBÜ$/Øñ%ç‰h×8Ñ8ð "ð ×Ñ¨¯©ÐÔ7Ø�xŠxØ#Ÿ>™>¨$¯(©(Ó3�Ø*.ˆHÔ'Ø&�x—‘Ñ;¨×):Ñ):Ñ;ˆHØŸ™×:Ñ:ò +�Ü˜dŸm™m¨U¯]©]Ó;�Ø�; 3¨"£9Ò1FØ#Ÿ=™=›?Ò*ð+ð �z‰z×%Ò%ð
NØ#'§:¡:×#:Ñ#:�Lô ")¨¯©¸×8LÑ8LÓ!M�Jà—J‘J ¨T¯]©]Ð ;ð3�Ô/ð ˆOøô "ò ô "'ð 15·
±
×0EÑ0EÀbÑ0I×0WÑ0Wöà ,ô $ D§M¡M°<×3GÑ3GÕHñùô ó"’Jðús   Ä+F Æ3G,Æ5'G
ÇG,Ç+G,c                 ó¾   — 	 | j                   j                  j                  | j                  j                  j                  «       «       y # t        t        f$ r Y y w xY wr   )r!   Ú_prefetched_objects_cacheÚpopr   rM   rj   rP   r|   rR   s    r#   Ú_remove_prefetched_objectszUcreate_reverse_many_to_one_manager.<locals>.RelatedManager._remove_prefetched_objectsÁ  sN   € ðØ—‘×7Ñ7×;Ñ;Ø—J‘J×+Ñ+×:Ñ:Ó<õøô #¤HÐ-ò Ùðús   ‚AA
 Á
AÁAc                 óh  •— | j                   j                  €,t        | j                   j                  j                  ›d�«      ‚	 | j                   j
                  | j                  j                  j                  «          S # t        t        f$ r" t        ‰| �1  «       }| j                  |«      cY S w xY w)NzQ instance needs to have a primary key value before this relationship can be used.)r!   r¯   r�   r‘   r&   rø   r   rM   rj   rP   r|   r¨   r\   rö   ©r    r:   r‘   s     €r#   r\   zGcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_querysetÉ  sª   ø€ ð �}‰}×ÑÐ'Ü Ø—}‘}×.Ñ.×7Ñ7Ð:ð ;Nð Oóð ð9Ø—}‘}×>Ñ>Ø—J‘J×+Ñ+×:Ñ:Ó<ñð øô #¤HÐ-ò 9Ü ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ò8ð9ús   Á:B  Â .B1Â0B1c                 óf  •— |€t         ‰
| �  «       }|j                  |d   ¬«       |j                  |j                  xs | j                  «      }| j
                  j                  }| j
                  j                  }|D �ci c]  } ||«      |“Œ }}t        || j
                  j                  |«      }|D ]J  }| j
                  j                  |«      rŒ| ||«         }t        || j
                  j                  |«       ŒL | j
                  j                  j                  «       }	|||d|	dfS c c}w )Nr   r^   F)r¨   r\   ra   r,   r/   r   rc   rb   rB   rQ   r   r”   rM   rj   )r    r<   r:   rk   rl   rm   rn   rp   r!   Ú
cache_namer‘   s             €r#   rq   zPcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_prefetch_querysetÚ  s  ø€ ØÐÜ ™7Ñ/Ó1�à×Ñ¨°1©ÐÔ6Ø—~‘~ h§l¡lÒ&>°d·h±hÓ?ˆHàŸ:™:×=Ñ=ˆLØ ŸJ™J×@Ñ@ˆMØDMÖN¸D™m¨DÓ1°4Ñ7ÐNˆNÐNÜ0°¸4¿:¹:¿?¹?ÈIÓVˆHð $ò @�Ø—z‘z×+Ñ+¨GÕ4Ø-©l¸7Ó.CÑD�HÜ˜G T§Z¡Z§_¡_°hÕ?ð@ð Ÿ™×0Ñ0×?Ñ?ÓAˆJØ˜\¨=¸%ÀÈUÐRÐRùò Os   Â D.©Úbulkc                óà  ‡ — ‰ j                  «        ‰ j                  «        t        j                  ‰ j                  ‰ j
                  ¬«      }ˆ fd„}|rÏg }|D ]b  } ||«       |j                  j                  s|j                  j                  |k7  rt        d|z  «      ‚|j                  |j                  «       Œd  ‰ j                  j                  j                  |«      j                  |¬«      j                  di ‰ j                   j"                  ‰ j
                  i¤Ž y t%        j&                  |d¬«      5  |D ]  } ||«       |j)                  «        Œ 	 d d d «       y # 1 sw Y   y xY w)Nr^   c                 óæ   •— t        | ‰j                  «      s/t        d‰j                  j                  j                  ›d| ›�«      ‚t        | ‰j                  j                  ‰j                  «       y )Nú'ú' instance expected, got )	r‹   rN   rØ   r}   rŽ   r”   r   rQ   r!   )r¬   r    s    €r#   Úcheck_and_update_objz\create_reverse_many_to_one_manager.<locals>.RelatedManager.add.<locals>.check_and_update_objô  sU   ø€ Ü! # t§z¡zÔ2Ý#ð !ŸJ™J×,Ñ,×8Ó8Ùðóð ô ˜˜TŸZ™ZŸ_™_¨d¯m©mÕ<r%   zA%r instance isn't saved. Use bulk=False or save the object first.©Úpk__inF©r,   Ú	savepointr)   )rå   rú   r   r�   rN   r!   r�   r§   r>   r�   Úappendr¯   rX   r,   r9   Úupdater   rQ   r	   ÚatomicÚsave)r    r   Úobjsr>   r  Úpksr¬   s   `      r#   Úaddz>create_reverse_many_to_one_manager.<locals>.RelatedManager.addï  s;  ø€ Ø×ÑÔ Ø×+Ñ+Ô-Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBô	=ñ Ø�Øò '�CÙ(¨Ô-Ø—z‘z×(Ò(¨C¯J©J¯M©M¸RÒ,?Ü(ð0Ø25ñ6óð ð —J‘J˜sŸv™vÕ&ð'ð M�—
‘
×(Ñ(×.Ñ.¨rÓ2×9Ñ9ÀÐ9ÓE×LÑLñ àŸ
™
Ÿ™¨¯©ðóô !×'Ñ'¨b¸EÔBñ #Ø#ò #˜Ù,¨SÔ1ØŸ™�
ñ#÷#÷ #ñ #ús   Ä: E$Å$E-c             —   óT   K  —  t        | j                  «      |d|iŽƒ d {  –—† S 7 Œ­w©Nr   ©r   r  ©r    r   r  s      r#   Úaaddz?create_reverse_many_to_one_manager.<locals>.RelatedManager.aadd  s'   è ø€ Ø0œ t§x¡xÓ0°$ÐB¸TÑB×BÐBÐBúó   ‚(¡&¢(c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS ©Nr^   r)   )
rå   r!   r   rQ   r   r�   rN   r¨   rY   Úcreate©r    r«   r>   ÚRelatedManagerr‘   s      €€r#   r  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.create  s]   ø€ Ø×ÑÔ Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑDÑNÀvÑNÐNr%   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­w©Nr)   ©r   r  ©r    r«   s     r#   ÚacreatezBcreate_reverse_many_to_one_manager.<locals>.RelatedManager.acreate#  s%   è ø€ Ø3œ t§{¡{Ó3Ñ=°fÑ=×=Ð=Ð=úr  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r  )
rå   r!   r   rQ   r   r�   rN   r¨   rY   Úget_or_creater  s      €€r#   r"  zHcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_or_create(  s]   ø€ Ø×ÑÔ Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑKÑUÈfÑUÐUr%   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­wr  ©r   r"  r  s     r#   Úaget_or_createzIcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aget_or_create0  s'   è ø€ Ø:œ t×'9Ñ'9Ó:ÑD¸VÑD×DÐDÐDúr  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r  )
rå   r!   r   rQ   r   r�   rN   r¨   rY   Úupdate_or_creater  s      €€r#   r'  zKcreate_reverse_many_to_one_manager.<locals>.RelatedManager.update_or_create5  s^   ø€ Ø×ÑÔ Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑNÑXÐQWÑXÐXr%   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­wr  ©r   r'  r  s     r#   Úaupdate_or_createzLcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aupdate_or_create=  s'   è ø€ Ø=œ t×'<Ñ'<Ó=ÑGÀÑG×GÐGÐGúr  c                óT  — |sy | j                  «        | j                  j                  | j                  «      }t	        «       }|D ]¿  }t        || j                  «      s/t        d| j                  j                  j                  ›d|›�«      ‚| j                  j                  |«      |k(  r|j                  |j                  «       Œ‚| j                  j                  j                  j                  |›d| j                  ›d�«      ‚ | j                  | j!                  |¬«      |«       y )Nr  r  z is not related to rK   r  )rå   r   rb   r!   Úsetr‹   rN   rØ   r}   rŽ   rc   r  r¯   rM   rO   Ú_clearr9   )r    r   r  rô   Úold_idsr¬   s         r#   ÚremovezAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.removeF  sí   € ÙØØ×"Ñ"Ô$Ø—j‘j×:Ñ:¸4¿=¹=ÓI�Ü›%�Øò �CÜ% c¨4¯:©:Ô6Ý'ð !%§
¡
× 0Ñ 0× <Ó <Ù #ðóð ð —z‘z×9Ñ9¸#Ó>À#ÒEØŸ™ C§F¡FÕ+à"Ÿj™j×5Ñ5×;Ñ;×HÑHÚ:=¸t¿}»}ÐMóð ðð  —‘˜DŸK™K¨w˜KÓ7¸Õ>r%   c             —   óT   K  —  t        | j                  «      |d|iŽƒ d {  –—† S 7 Œ­wr  ©r   r/  r  s      r#   ÚaremovezBcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aremove`  s'   è ø€ Ø7œ]¨4¯;©;Ó7¸ÐIÀDÑI×IÐIÐIúr  c                óH   — | j                  «        | j                  | |«       y r   )rå   r-  ©r    r   s     r#   Úclearz@create_reverse_many_to_one_manager.<locals>.RelatedManager.cleare  s   € Ø×"Ñ"Ô$Ø—‘˜D $Õ'r%   c             “   óV   K  —  t        | j                  «      |¬«      ƒ d {  –—† S 7 Œ­w)Nrÿ   ©r   r5  r4  s     r#   ÚaclearzAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.acleark  s"   è ø€ Ø6œ]¨4¯:©:Ó6¸DÔA×AÐAÐAús   ‚ )¢'£)c                 óê  — | j                  «        t        j                  | j                  | j                  ¬«      }|j                  |«      }|r) |j                  di | j                  j                  d i¤Ž y t        j                  |d¬«      5  |D ]J  }t        || j                  j                  d «       |j                  | j                  j                  g¬«       ŒL 	 d d d «       y # 1 sw Y   y xY w)Nr^   Fr  )Úupdate_fieldsr)   )rú   r   r�   rN   r!   r,   r  r   rQ   r	   r  r”   r  )r    r:   r   r>   r¬   s        r#   r-  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager._clearp  s¾   € Ø×/Ñ/Ô1Ü×(Ñ(¨¯©¸d¿m¹mÔL�Ø#Ÿ>™>¨"Ó-�Ùà#�H—O‘OÑ> t§z¡z§¡¸Ð&=Ó>ä$×+Ñ+°"ÀÔFñ FØ#+ò F˜CÜ# C¨¯©¯©¸$Ô?ØŸH™H°D·J±J·O±OÐ3D˜HÕEñF÷F÷ Fñ Fús   ÂAC)Ã)C2F)r   r5  c                ó€  — | j                  «        t        |«      }| j                  j                  rït	        j
                  | j                  | j                  ¬«      }t        j                  |d¬«      5  |r%| j                  |¬«        | j                  |d|iŽ n|t        | j                  |«      j                  «       «      }g }|D ])  }||v r|j                  |«       Œ|j!                  |«       Œ+  | j                  |d|iŽ  | j                  |d|iŽ d d d «       y  | j                  |d|iŽ y # 1 sw Y   y xY w)Nr^   Fr  rÿ   r   )rå   rÆ   r   r   r   r�   rN   r!   r	   r  r5  r  r,  r,   rZ   r/  r
  )r    r  r   r5  r>   Úold_objsÚnew_objsr¬   s           r#   r,  z>create_reverse_many_to_one_manager.<locals>.RelatedManager.set  s  € Ø×ÑÔ ô ˜“;ˆDà�z‰z�ŠÜ×(Ñ(¨¯©¸d¿m¹mÔL�Ü ×'Ñ'¨b¸EÔBñ 7ÙØŸ
™
¨˜
Ô-Ø ˜Ÿ™ $Ð2¨TÓ2ä#& t§z¡z°"£~×'9Ñ'9Ó';Ó#<˜Ø#%˜Ø#'ò 5˜CØ" h™Ø (§¡°Õ 4à (§¡°Õ 4ð	5ð $˜Ÿ™ XÐ9°DÒ9Ø ˜Ÿ™ (Ð6°Ò6÷7ð 7ð  �—‘˜$Ð* TÓ*÷!7ð 7ús   Á4B$D4Ä4D=c             “   óZ   K  —  t        | j                  «      |||¬«      ƒ d {  –—† S 7 Œ­w)N)r  r   r5  ©r   r,  )r    r  r   r5  s       r#   Úasetz?create_reverse_many_to_one_manager.<locals>.RelatedManager.aset›  s&   è ø€ Ø0œ t§x¡xÓ0°dÀÈUÔS×SÐSÐSúó   ‚"+¤)¥+r   )r&   r'   r(   rG   rá   Údo_not_call_in_templatesrå   rö   rú   r\   rq   r  Úalters_datar  r  r   r"  r%  r'  r*  r   r   r/  r2  r5  r8  r-  r,  r@  r´   )r‘   r  rÎ   s   @€€r#   r  rÛ   €  sJ  ù„ õ	<ô	0ð
 $(Ð ò	ò&	òP	ô	9õ"	Sð* #'ô #	#ðJ ˆŒà)-ô 	Cð  ˆÔõ	Oð "ˆÔò	>ð #ˆÔõ	Vð %)ˆÔ!ò	Eð &*ˆÔ"õ	Yð (,ÐÔ$ò	Hð )-ÐÔ%ñ �9‰9�>Š>à)-ô ?ð0 "&ˆFÔà04ô Jð #'ˆGÔà$(ô (ð !%ˆEÔà+/ô Bð "&ˆFÔòFð "&ˆFÔà$(°ô 	+ð4 ˆŒà+/°uô 	Tð  ˆ×Ðr%   r  ©r   )Ú
superclassrÎ   r  s    `@r#   rÐ   rÐ   x  s   ù€ ÷^ ˜¤Zô ^ ð@	 Ðr%   c                   óJ   ‡ — e Zd ZdZdˆ fd„	Zed„ «       Zed„ «       Zd„ Z	ˆ xZ
S )ÚManyToManyDescriptoraá  
    Accessor to the related objects manager on the forward and reverse sides of
    a many-to-many relation.

    In the example::

        class Pizza(Model):
            toppings = ManyToManyField(Topping, related_name='pizzas')

    ``Pizza.toppings`` and ``Topping.pizzas`` are ``ManyToManyDescriptor``
    instances.

    Most of the implementation is delegated to a dynamically defined manager
    class built by ``create_forward_many_to_many_manager()`` defined below.
    c                 ó2   •— t         ‰| �  |«       || _        y r   )r¨   rG   Úreverse)r    rÎ   rI  r‘   s      €r#   rG   zManyToManyDescriptor.__init__´  s   ø€ Ü‰Ñ˜Ôàˆ�r%   c                 ó.   — | j                   j                  S r   )rÎ   ÚthroughrR   s    r#   rK  zManyToManyDescriptor.through¹  s   € ð
 �x‰x×ÑÐr%   c                 óÞ   — | j                   r| j                  j                  n| j                  j                  }t	        |j
                  j                  | j                  | j                   ¬«      S )N)rI  )rI  rÎ   rº   rN   Ú#create_forward_many_to_many_managerrÑ   r‘   rÒ   s     r#   rÓ   z(ManyToManyDescriptor.related_manager_clsÀ  sK   € à26·,²,˜Ÿ™×.Ò.ÀDÇHÁHÇNÁNˆä2Ø×*Ñ*×4Ñ4Ø�H‰HØ—L‘Lô
ð 	
r%   c                 ó¢   — d| j                   rdndz  | j                   r| j                  j                  «       fS | j                  j                  fS )Nz%s side of a many-to-many setrI  Úforward)rI  rÎ   rÀ   r   rQ   rR   s    r#   rÖ   z4ManyToManyDescriptor._get_set_deprecation_msg_paramsÊ  sM   € à+Ø ŸLšL‰y¨iñ9à,0¯LªLˆD�H‰H×&Ñ&Ó(ð
ð 	
ð ?C¿j¹j¿o¹oð
ð 	
r%   )F)r&   r'   r(   r›   rG   ÚpropertyrK  r   rÓ   rÖ   r´   rµ   s   @r#   rG  rG  £  s:   ø„ ñõ ð
 ñ ó ð ð ñ
ó ð
ö
r%   rG  c                 ó4   ‡‡‡—  G ˆˆˆfd„d| t         «      Š‰S )zç
    Create a manager for the either side of a many-to-many relation.

    This manager subclasses another manager, generally the default manager of
    the related model, and adds behaviors specific to many-to-many relations.
    c                   óô  •‡ — e Zd Zd ˆ ˆˆfd„	Zˆˆfd„ZdZd„ Zd„ Zd„ Zˆ fd„Z	d ˆ fd	„	Z
dd
œd„Zde_        dd
œd„Zde_        d„ Zde_        d„ Zde_        ˆ fd„Zde_        d„ Zde_        dddœd„Zde_        dddœd„Zde_        dd
œˆˆ fd„
Zde_        dd
œd„Zde_        dd
œˆˆ fd„
Zde_        dd
œd„Zde_        dd
œˆˆ fd„
Zde_        dd
œd„Zde_        d„ Zd„ Zd„ Zdd
œd„Zˆ fd„Zˆ xZS )!ú?create_forward_many_to_many_manager.<locals>.ManyRelatedManagerNc                 ó®  •— t         ‰| �  «        || _        ‰s›‰j                  | _        ‰j                  j                  «       | _        ‰j                  j                  | _        ‰j                  j                  «       | _
        ‰j                  j                  «       | _        ‰j                  | _        n�‰j                  | _        ‰j                  j                  | _        ‰j                  j                  «       | _        ‰j                  j                  «       | _
        ‰j                  j                  «       | _        d| _        ‰j                  | _        ‰| _        | j                  j"                  j%                  | j                  «      | _        | j                  j"                  j%                  | j                  «      | _        i | _        i | _        | j&                  j.                  D ]f  \  }}| j                  ›d|j                  ›�}t1        ||j2                  «      | j*                  |<   |j                  | j,                  |j                  <   Œh | j&                  j5                  |«      | _        d | j6                  v r)t9        d|›d| j,                  | j                     ›d�«      ‚|j:                  €"t9        d|j<                  j>                  z  «      ‚y )NFÚ__rã   rä   z4" before this many-to-many relationship can be used.z]%r instance needs to have a primary key value before a many-to-many relationship can be used.) r¨   rG   r!   rN   r   rg   Úquery_field_namerQ   Úprefetch_cache_nameÚm2m_field_nameÚsource_field_nameÚm2m_reverse_field_nameÚtarget_field_nameÚsymmetricalrº   rK  rI  r}   Ú	get_fieldÚsource_fieldrï   rÝ   Úpk_field_namesr“   r•   r   rb   Úrelated_valr�   r¯   r‘   r&   )r    r!   r—   r˜   Úcore_filter_keyr‘   rÎ   rI  s        €€€r#   rG   zHcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.__init__Û  s@  ø€ Ü‰GÑÔà$ˆDŒMáØ ŸY™Y�”
Ø(+¯	©	×(DÑ(DÓ(F�Ô%Ø+.¯9©9¯>©>�Ô(Ø),¯©×)AÑ)AÓ)C�Ô&Ø),¯©×)IÑ)IÓ)K�Ô&Ø#&§?¡?�Õ à ×.Ñ.�”
Ø(+¯	©	¯©�Ô%Ø+.¯9©9×+GÑ+GÓ+I�Ô(Ø),¯©×)IÑ)IÓ)K�Ô&Ø),¯©×)AÑ)AÓ)C�Ô&Ø#(�Ô àŸ;™;ˆDŒLØ"ˆDŒLà $§¡× 2Ñ 2× <Ñ <¸T×=SÑ=SÓ TˆDÔØ $§¡× 2Ñ 2× <Ñ <¸T×=SÑ=SÓ TˆDÔà "ˆDÔØ"$ˆDÔØ&*×&7Ñ&7×&FÑ&Fò CÑ"�˜(Ø.2×.CÓ.CÀXÇ]Â]Ð"S�Ü5<¸XÀx×GWÑGWÓ5X�×!Ñ! /Ñ2Ø5=·]±]�×#Ñ# H§M¡MÒ2ðCð
  $×0Ñ0×JÑJÈ8ÓTˆDÔØ�t×'Ñ'Ñ'Ý ò   ×!4Ñ!4°T×5KÑ5KÓ!LðNóð ð �{‰{Ð"Ü ð?à×(Ñ(×1Ñ1ñ2óð ð #r%   c                ó„   •— t        | j                  |«      }t        |j                  ‰‰«      } || j                  ¬«      S rs   )r•   rN   rM  r‘   r!   )r    rß   rà   rÎ   rI  s      €€r#   rá   zHcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.__call__  s;   ø€ Ü˜dŸj™j¨'Ó2ˆGÜ?Ø×!Ñ! 3¨óˆMñ !¨$¯-©-Ô8Ð8r%   Tc                 óÆ  — t        j                  | j                  | j                  fg«      }t	        |t
        «       xs |j                  «       }|r(|t        j                  | j                  › d�|fg«      z  }| j                  r[t        j                  | j                  | j                  fg«      }|r(|t        j                  | j                  › d�|fg«      z  }||z  }|S )Nr+   )	r
   r  rY  r`  r‹   r   Ú_has_filtersr[  r\  )r    Úremoved_valsÚfiltersÚremoved_vals_filtersÚsymmetrical_filterss        r#   Ú_build_remove_filterszUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._build_remove_filters  sé   € Ü—h‘h ×!7Ñ!7¸×9IÑ9IÐ JÐKÓLˆGô ˜|¬XÓ6Ð6ÒU¸,×:SÑ:SÓ:Uð !ñ $Øœ1Ÿ8™8¨×)?Ñ)?Ð(@ÀÐ&EÀ|Ð%TÐ$UÓVÑV�Ø×ÒÜ&'§h¡hØ×,Ñ,¨d×.>Ñ.>Ð?Ð@ó'Ð#ñ (Ø'¬1¯8©8Ø!×3Ñ3Ð4°DÐ9¸<ÐHÐIó,ñ Ð'ð Ð.Ñ.�ØˆNr%   c                 óê   — |j                  | j                  ¬«       | j                  r|j                  | j                  «      }d|_         |j                  «       j                  di | j                  ¤ŽS )rç   r^   Tr)   )ra   r!   r/   r,   rì   Ú_next_is_stickyr9   rÝ   )r    r:   s     r#   rö   zRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._apply_rel_filters*  s_   € ð ×Ñ¨¯©ÐÔ7Ø�xŠxØ#Ÿ>™>¨$¯(©(Ó3�Ø*.ˆHÔ'Ø4�8×+Ñ+Ó-×4Ñ4ÑI°t×7HÑ7HÑIÐIr%   c                 óŽ   — 	 | j                   j                  j                  | j                  «       y # t        t
        f$ r Y y w xY wr   )r!   rø   rù   rW  rP   r|   rR   s    r#   rú   zZcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_prefetched_objects4  s<   € ðØ—‘×7Ñ7×;Ñ;¸D×<TÑ<TÕUøÜ"¤HÐ-ò Ùðús   ‚/2 ²AÁAc                 ó´   •— 	 | j                   j                  | j                     S # t        t        f$ r" t
        ‰| �  «       }| j                  |«      cY S w xY wr   )r!   rø   rW  rP   r|   r¨   r\   rö   rü   s     €r#   r\   zLcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_queryset:  sU   ø€ ð9Ø—}‘}×>Ñ>¸t×?WÑ?WÑXÐXøÜ"¤HÐ-ò 9Ü ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ò8ð9ús   ƒ"& ¦.AÁAc                 óÀ  •‡‡— |€t         ‰| �  «       }|j                  |d   ¬«       |j                  |j                  xs | j                  «      }t        |j                  «       | j                  |«      }| j                  j                  j                  | j                  «      Š‰j                  j                  j                  }t        |j                     Š‰j                   j"                  }|j%                  ‰j&                  D �ci c]-  }d|j(                  z   ||«      ›d ||j*                  «      ›�“Œ/ c}¬«      }|ˆfd„ˆˆfd„d| j,                  dfS c c}w )	Nr   r^   ú_prefetch_related_val_%srK   )Úselectc                 óB   •‡ — t        ˆ fd„‰j                  D «       «      S )Nc              3   óP   •K  — | ]  }t        ‰d |j                  z  «      –— Œ y­w)ro  NrÅ   )r    ÚfÚresults     €r#   r¢   zzcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_queryset.<locals>.<lambda>.<locals>.<genexpr>`  s*   øè ø€ ò %àô ˜FÐ$>ÀÇÁÑ$J×Kñ%ùs   ƒ#&)rÆ   rÈ   )rt  Úfks   `€r#   ú<lambda>zgcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_queryset.<locals>.<lambda>`  s   ù€ œuó %à×4Ñ4ô%ó  € r%   c                 óD   •‡ — t        ˆˆ fd„‰j                  D «       «      S )Nc              3   ój   •K  — | ]*  }|j                  t        ‰|j                  «      ‰«      –— Œ, y ­wr   )Úget_db_prep_valuer•   r   )r    rs  Ú
connectionrm   s     €€r#   r¢   zzcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_queryset.<locals>.<lambda>.<locals>.<genexpr>d  s1   øè ø€ ò #àð ×'Ñ'¬°°a·i±iÓ(@À*×Mñ#ùs   ƒ03)rÆ   rd   )rm   rz  ru  s   `€€r#   rv  zgcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_queryset.<locals>.<lambda>d  s   ù€ œUô #à×6Ñ6ô#ó € r%   F)r¨   r\   ra   r,   r/   rB   rk  rV  rK  r}   r]  rY  rN   Údb_tabler   r>   ÚopsÚ
quote_nameÚextrarÈ   r   ÚcolumnrW  )	r    r<   r:   Ú
join_tableÚqnrs  rz  ru  r‘   s	         @@€r#   rq   zUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysetA  sA  ú€ ØÐÜ ™7Ñ/Ó1�à×Ñ¨°1©ÐÔ6Ø—~‘~ h§l¡lÒ&>°d·h±hÓ?ˆHÜ0Ø×(Ñ(Ó*¨D×,AÑ,AÀ9óˆHð —‘×#Ñ#×-Ñ-¨d×.DÑ.DÓEˆBØŸ™Ÿ™×0Ñ0ˆJÜ$ X§[¡[Ñ1ˆJØ—‘×*Ñ*ˆBØ—~‘~ð
  ×4Ñ4ö	ð ð /Ø—i‘iñ á˜*•~¡r¨!¯(©(¤|ð"5ñ5òð &ó ˆHð óôð Ø×(Ñ(Øðð ùòs   Ä2E©Úthrough_defaultsc                ó–  — | j                  «        t        j                  | j                  | j                  ¬«      }t        j                  |d¬«      5   | j                  | j                  | j                  g|¢­d|iŽ | j                  r+ | j                  | j                  | j                  g|¢­d|iŽ d d d «       y # 1 sw Y   y xY w)Nr^   Fr  rƒ  )rú   r   r�   rK  r!   r	   r  Ú
_add_itemsrY  r[  r\  )r    rƒ  r  r>   s       r#   r  zCcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.addm  sÀ   € Ø×+Ñ+Ô-Ü×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ô>ñ Ø�—‘Ø×*Ñ*Ø×*Ñ*ðð òð &6ò	ð ×#Ò#Ø#�D—O‘OØ×.Ñ.Ø×.Ñ.ðð òð *:ò	÷÷ ñ ús   ÁA#B?Â?Cc             —   óT   K  —  t        | j                  «      |d|iŽƒ d {  –—† S 7 Œ­w)Nrƒ  r  )r    rƒ  r  s      r#   r  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aaddƒ  s3   è ø€ Ø0œ t§x¡xÓ0ØðØ(8ñ÷ ð ð úr  c                 ót   — | j                  «         | j                  | j                  | j                  g|¢­Ž  y r   )rú   Ú_remove_itemsrY  r[  ©r    r  s     r#   r/  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.removeŠ  s2   € Ø×+Ñ+Ô-ØˆD×Ñ˜t×5Ñ5°t×7MÑ7MÐUÐPTÔUr%   c              —   óN   K  —  t        | j                  «      |Ž ƒ d {  –—† S 7 Œ­wr   r1  r‰  s     r#   r2  zGcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aremove�  s"   è ø€ Ø3œ t§{¡{Ó3°TÐ:×:Ð:Ð:ús   ‚%ž#Ÿ%c           
      óè  •— t        j                  | j                  | j                  ¬«      }t	        j
                  |d¬«      5  t        j                  j                  | j                  d| j                  | j                  | j                  d |¬«       | j                  «        | j                  t        ‰| �9  «       j                  |«      «      }| j                  j                   j                  |«      j#                  |«      j%                  «        t        j                  j                  | j                  d| j                  | j                  | j                  d |¬«       d d d «       y # 1 sw Y   y xY w)Nr^   Fr  Ú	pre_clear©ÚsenderÚactionr!   rI  rN   Úpk_setr,   Ú
post_clear)r   r�   rK  r!   r	   r  r   Úm2m_changedÚsendrI  rN   rú   ri  r¨   r\   r,   rÑ   r9   Údelete)r    r>   rf  r‘   s      €r#   r5  zEcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.clear•  s  ø€ Ü×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ô>ñ Ü×#Ñ#×(Ñ(ØŸ<™<Ø&Ø!Ÿ]™]Ø ŸL™LØŸ*™*ØØð )ô ð ×/Ñ/Ô1Ø×4Ñ4´U±WÑ5IÓ5K×5QÑ5QÐRTÓ5UÓV�Ø—‘×-Ñ-×3Ñ3°BÓ7×>Ñ>¸wÓG×NÑNÔPä×#Ñ#×(Ñ(ØŸ<™<Ø'Ø!Ÿ]™]Ø ŸL™LØŸ*™*ØØð )ô ÷÷ ñ ús   ÁDE(Å(E1c              “   óR   K  —  t        | j                  «      «       ƒ d {  –—† S 7 Œ­wr   r7  rR   s    r#   r8  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aclear±  s    è ø€ Ø2œ t§z¡zÓ2Ó4×4Ð4Ð4ús   ‚' %¡'F)r5  rƒ  c                óä  — t        |«      }t        j                  | j                  | j                  ¬«      }t        j                  |d¬«      5  |r#| j                  «         | j                  |d|iŽ nét        | j                  |«      j                  | j                  j                  j                  d¬«      «      }g }|D ]x  }t        || j                  «      r| j                  j!                  |«      d   n| j                  j#                  |«      }||v r|j%                  |«       Œh|j'                  |«       Œz  | j$                  |Ž   | j                  |d|iŽ d d d «       y # 1 sw Y   y xY w)Nr^   Fr  rƒ  T©Úflatr   )rÆ   r   r�   rK  r!   r	   r  r5  r  r,  r,   Úvalues_listrï   r   r‹   rN   rb   Úget_prep_valuer/  r
  )	r    r  r5  rƒ  r>   r.  r=  r¬   Úfk_vals	            r#   r,  zCcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.set¶  sL  € ô ˜“;ˆDä×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ô>ñ KÙØ—J‘J”LØ�D—H‘H˜dÐFÐ5EÓFä!ØŸ
™
 2›×2Ñ2Ø ×-Ñ-×:Ñ:×BÑBÈð 3ó ó�Gð  "�HØ#ò 	1˜ô  *¨#¨t¯z©zÔ:ð !×-Ñ-×GÑGÈÓLÈQÒOà!%×!2Ñ!2×!AÑ!AÀ#Ó!Fð ð
 " WÑ,Ø#ŸN™N¨6Õ2à$ŸO™O¨CÕ0ð	1ð  �D—K‘K Ñ)Ø�D—H‘H˜hÐJÐ9IÒJ÷1K÷ Kñ Kús   ÁDE&Å&E/c             “   óZ   K  —  t        | j                  «      |||¬«      ƒ d {  –—† S 7 Œ­w)N)r  r5  rƒ  r?  )r    r  r5  rƒ  s       r#   r@  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.asetØ  s0   è ø€ Ø0œ t§x¡xÓ0Ø Ð9Iô÷ ð ð úrA  c                óÔ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž}| j                  ||¬«       |S ©Nr^   r‚  r)   )r   r�   r!   r‘   r¨   rY   r  r  )r    rƒ  r«   r>   Únew_objÚManyRelatedManagerr‘   s        €€r#   r  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.createß  sW   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜÐ.°·±ÀÓ0CÑKÑUÈfÑUˆGØ�H‰H�WÐ/?ˆHÔ@ØˆNr%   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­w©Nrƒ  r)   r  ©r    rƒ  r«   s      r#   r   zGcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.acreateç  s8   è ø€ Ø3œ t§{¡{Ó3ñ Ø!1ðØ5;ñ÷ ð ð úó   ‚!*£(¤*c                óâ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž\  }}|r| j                  ||¬«       ||fS rž  )r   r�   r!   r‘   r¨   rY   r"  r  ©r    rƒ  r«   r>   r¬   Úcreatedr   r‘   s         €€r#   r"  zMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_or_createî  sj   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜ Ð!3°T·_±_ÀRÓ5HÑWñ Øñ‰LˆC�ñ
 Ø—‘˜Ð/?�Ô@Ø˜�<Ðr%   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­wr¢  r$  r£  s      r#   r%  zNcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aget_or_createû  s:   è ø€ Ø:œ t×'9Ñ'9Ó:ñ Ø!1ðØ5;ñ÷ ð ð úr¤  c                óä   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  	 di |¤Ž\  }}|r| j                  ||¬«       ||fS rž  )r   r�   r!   r‘   r¨   rY   r'  r  r¦  s         €€r#   r'  zPcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.update_or_create  so   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜ Ø" D§O¡O°BÓ$7ñàñ)à!'ñ)‰LˆC�ñ
 Ø—‘˜Ð/?�Ô@Ø˜�<Ðr%   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­wr¢  r)  r£  s      r#   r*  zQcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aupdate_or_create  s:   è ø€ Ø=œ t×'<Ñ'<Ó=ñ Ø!1ðØ5;ñ÷ ð ð úr¤  c           
      ó¦  — ddl m} t        «       }| j                  j                  j                  |«      }|D �]  }t        || j                  «      r¡t        j                  || j                  «      sGt        d|›d| j                  j                  j                  ›d|j                  j                  ›d�«      ‚|j                  |«      d   }|€t        d|›d|›d�«      ‚|j                  |«       Œ»t        ||«      r/t!        d	| j                  j                  j"                  ›d
|›�«      ‚|j                  |j%                  |«      «       �Œ |S )z[
            Return the set of ids of `objs` that the target field references.
            r   )ÚModelzCannot add "z": instance is on database "z", value is on database "rã   z": the value for field "z	" is Noner  r  )Údjango.db.modelsr¬  r,  rK  r}   r]  r‹   rN   r   r’   r!   r�   r�   r>   rb   r  rØ   rŽ   rš  )r    r[  r  r¬  Ú
target_idsrï   r¬   Ú	target_ids           r#   Ú_get_target_idszOcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_target_ids  s%  € õ /ä›ˆJØŸ<™<×-Ñ-×7Ñ7Ð8IÓJˆLØó E�Ü˜c 4§:¡:Ô.Ü!×0Ñ0°°d·m±mÔDÝ(ò  # D§M¡M×$8Ñ$8×$;Ó$;¸S¿Z¹Z¿]»]ðLóð ð
 !-× FÑ FÀsÓ KÈAÑ N�IØ Ð(Ý(â"Ò$5ð7óð ð —N‘N 9Õ-Ü  UÔ+Ý#àŸ:™:×+Ñ+×7Ó7¹ð>óð ð
 —N‘N <×#>Ñ#>¸sÓ#CÖDð+Eð, Ðr%   c                 óØ   —  | j                   j                  j                  |«      j                  |d¬«      j                  di || j
                  d   d|z  |i¤Ž}|j                  |«      S )z{
            Return the subset of ids of `objs` that aren't already assigned to
            this relationship.
            Tr—  r   r`   r)   )rK  rÑ   r,   r™  r9   r`  Ú
difference)r    rY  r[  r>   r®  Úvalss         r#   Ú_get_missing_target_idszWcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_missing_target_ids6  sv   € ð�—‘×-Ñ-×3Ñ3°BÓ7ß‘Ð.°T�Ó:ß‘ñð *¨4×+;Ñ+;¸AÑ+>Ø Ð#4Ñ4°jðñð ð ×(Ñ(¨Ó.Ð.r%   c                 ó(  — | j                   j                  j                  duxr t        |   j                  j
                  }| j                  xs || j                  k(  xr) t        j                  j                  | j                   «      }|||xr | fS )aw  
            Return a boolean triple of the way the add should be performed.

            The first element is whether or not bulk_create(ignore_conflicts)
            can be used, the second whether or not signals must be sent, and
            the third element is whether or not the immediate bulk insertion
            with conflicts ignored can be performed.
            F)rK  r}   Úauto_createdr   r2   Úsupports_ignore_conflictsrI  rY  r   r’  Úhas_listeners)r    r>   rY  Úcan_ignore_conflictsÚmust_send_signalss        r#   Ú_get_add_planzMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_add_planI  s•   € ð —‘×"Ñ"×/Ñ/°uÐ<ò GÜ ‘O×,Ñ,×FÑFð !ð —‘ÒKÐ 1°T×5KÑ5KÑ Kò!Dä×&Ñ&×4Ñ4°T·\±\ÓBð ð %Ø!Ø%Ò?Ð.?Ð*?ðð r%   c                ój  — |sy t        t        |xs i «      «      }| j                  ||«      }t        j                  | j
                  | j                  ¬«      }| j                  ||«      \  }}}	|	rl| j
                  j                  j                  |«      j                  |D �
cg c]+  }
 | j
                  di d|z  | j                  d   d|z  |
i¤Ž‘Œ- c}
d¬«       y | j                  ||||«      }t        j                  |d¬«      5  |rNt        j                   j#                  | j
                  d| j                  | j$                  | j&                  ||¬	«       | j
                  j                  j                  |«      j                  |D �
cg c]-  }
 | j
                  di |¤d|z  | j                  d   d|z  |
i¤Ž‘Œ/ c}
|¬«       |rNt        j                   j#                  | j
                  d
| j                  | j$                  | j&                  ||¬	«       d d d «       y c c}
w c c}
w # 1 sw Y   y xY w)Nr^   z%s_idr   T)Úignore_conflictsFr  Úpre_addr�  Úpost_addr)   )Údictr   r°  r   r�   rK  r!   r»  rÑ   r,   Úbulk_creater`  r´  r	   r  r   r’  r“  rI  rN   )r    rY  r[  rƒ  r  r®  r>   r¹  rº  Úcan_fast_addr¯  Úmissing_target_idss               r#   r…  zJcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._add_itemsj  sU  € ñ Øä#Ô$5Ð6FÒ6LÈ"Ó$MÓNÐØ×-Ñ-Ð.?ÀÓFˆJÜ×$Ñ$ T§\¡\¸D¿M¹MÔJˆBØDH×DVÑDVØÐ%óEÑAÐ Ð"3°\ñ Ø—‘×-Ñ-×3Ñ3°BÓ7×CÑCð *4öð &ð %˜Ÿ™ñ à 'Ð*;Ñ ;¸T×=MÑ=MÈaÑ=PØ 'Ð*;Ñ ;¸Yðóòð &*ð Dô ð à!%×!=Ñ!=Ø!Ð#4°b¸*ó"Ðô ×#Ñ#¨"¸Ô>ñ #Ù$Ü×'Ñ'×,Ñ,Ø#Ÿ|™|Ø(Ø!%§¡Ø $§¡Ø"Ÿj™jØ1Ø ð -ô ð —‘×-Ñ-×3Ñ3°BÓ7×CÑCð *<ö	ð &ð %˜Ÿ™ñ Ø.ðð !(Ð*;Ñ ;¸T×=MÑ=MÈaÑ=PØ 'Ð*;Ñ ;¸Yðóò	ð &:ð Dô ñ %Ü×'Ñ'×,Ñ,Ø#Ÿ|™|Ø)Ø!%§¡Ø $§¡Ø"Ÿj™jØ1Ø ð -ô ÷7#ð #ùò!ùò:	÷#ð #ús&   Â#0HÄBH)Æ2H$
Æ=AH)È$H)È)H2c           
      ó2  •— |sy t        «       }|D ]Y  }t        || j                  «      r0| j                  j	                  |«      d   }|j                  |«       ŒI|j                  |«       Œ[ t        j                  | j                  | j                  ¬«      }t        j                  |d¬«      5  t        j                  j                  | j                  d| j                  | j                  | j                  ||¬«       t         ‰| �E  «       }|j%                  «       rE |j'                  |«      j(                  d	i d| j                  j                  j*                  z  |i¤Ž}	n|}	| j-                  |	«      }
| j                  j.                  j'                  |«      j)                  |
«      j1                  «        t        j                  j                  | j                  d| j                  | j                  | j                  ||¬«       d d d «       y # 1 sw Y   y xY w)
Nr   r^   Fr  Ú
pre_remover�  r`   Úpost_remover)   )r,  r‹   rN   rï   rb   r  r   r�   rK  r!   r	   r  r   r’  r“  rI  r¨   r\   rd  r,   r9   r   ri  rÑ   r”  )r    rY  r[  r  r.  r¬   r›  r>   Útarget_model_qsÚold_valsrf  r‘   s              €r#   rˆ  zMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_items±  sÀ  ø€ ñ
 Øô “eˆGØò %�Ü˜c 4§:¡:Ô.Ø!×.Ñ.×HÑHÈÓMÈaÑP�FØ—K‘K Õ'à—K‘K Õ$ð%ô ×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ô>ñ ä×#Ñ#×(Ñ(ØŸ<™<Ø'Ø!Ÿ]™]Ø ŸL™LØŸ*™*Ø"Øð )ô ô #(¡'Ñ"6Ó"8�Ø"×/Ñ/Ô1Ø?˜×4Ñ4°RÓ8×?Ñ?ñ  Ø# d×&7Ñ&7×&DÑ&D×&LÑ&LÑLÈgÐVñ ‘Hð  '�HØ×4Ñ4°XÓ>�Ø—‘×-Ñ-×3Ñ3°BÓ7×>Ñ>¸wÓG×NÑNÔPä×#Ñ#×(Ñ(ØŸ<™<Ø(Ø!Ÿ]™]Ø ŸL™LØŸ*™*Ø"Øð )ô ÷+÷ ñ ús   Â/EHÈHr   ) r&   r'   r(   rG   rá   rB  ri  rö   rú   r\   rq   r  rC  r  r/  r2  r5  r8  r,  r@  r  r   r"  r%  r'  r*  r°  r´  r»  r…  rˆ  r´   )r‘   r   rÎ   rI  s   @€€€r#   r   rS  Ú  sS  ù„ ÷0	õd	9ð $(Ð ò	ò(	Jò	ô	9õ*	ðX /3ô 	ð( ˆŒà59ô 	ð
  ˆÔò	Vð "ˆÔò	;ð #ˆÔô	ð4 !ˆÔò	5ð "ˆÔà%*¸Tô 	Kð@ ˆŒà,1ÀDô 	ð
  ˆÔà-1÷ 	ð "ˆÔà48ô 	ð
 #ˆÔà48÷ 		 ð %)ˆÔ!à;?ô 	ð
 &*ˆÔ"à7;÷ 		 ð (,ÐÔ$à>Bô 	ð
 )-ÐÔ%ò	ò@	/ò&	ðD QUôE	÷N/	ð /	r%   r   rD  )rE  rÎ   rI  r   s    ``@r#   rM  rM  Ò  s"   ú€ ÷Fð F˜Z¬ô FðP Ðr%   N)&r›   Úasgiref.syncr   Údjango.core.exceptionsr   Ú	django.dbr   r   r   r   r	   r­  r
   r   r   Údjango.db.models.functionsr   Údjango.db.models.lookupsr   r   Údjango.db.models.queryr   Údjango.db.models.query_utilsr   Údjango.db.models.utilsr   r   Údjango.utils.functionalr   r   rB   rD   r�   r·   rÌ   rÐ   rG  rM  r)   r%   r#   ú<module>rÒ     s›   ðñ?õB 'å -÷õ ÷ 0Ñ /Ý 0ß AÝ +Ý :ß @Ý 3ô6Ð"3ô 6ò&÷*[<ñ [<ô|0@Ð :ô 0@÷fx@ñ x@÷v6
ñ 6
òrhôV	,
Ð5ô ,
ó^Pr%   