Ë
    Ñ{;f[ü  ã                   óD  — d Z ddl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 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.
é    N)Úsync_to_async)Ú
FieldError)ÚDEFAULT_DB_ALIASÚNotSupportedErrorÚconnectionsÚrouterÚtransaction)ÚQÚWindowÚsignals)Ú	RowNumber)ÚGreaterThanÚLessThanOrEqual)ÚQuerySet)ÚDeferredAttribute)Ú
AltersDataÚresolve_callables)ÚRemovedInDjango60Warning)Ú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      újC:\Users\user\Documents\project_loop\venv\Lib\site-packages\django/db/models/fields/related_descriptors.pyÚ__set__z#ForeignKeyDeferredAttribute.__set__Y   sh   € Ø×Ñ× Ñ  §¡×!3Ñ!3Ó4¸Ò=À$Ç*Á*×BVÑBVØôC
ð �J‰J×*Ñ*¨8Ô4Ø05ˆ×Ñ˜$Ÿ*™*×,Ñ,Ò-ó    N)Ú__name__Ú
__module__Ú__qualname__r%   © r&   r$   r   r   X   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Údbr5   r6   ÚexprÚ_r/   Úwindows              r$   Ú_filter_prefetch_querysetrC   a   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                   ó\   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zd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$   rK   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   rN   rO   Ú_base_managerÚ
db_managerÚall©r!   rX   s     r$   Úget_querysetz'ForwardManyToOneDescriptor.get_queryset›   s5   € Ø�z‰z×&Ñ&×,Ñ,×:Ñ:×EÑEÈEÐEÓR×VÑVÓXÐXr&   Nc                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S ©NzLget_prefetch_queryset() is deprecated. Use get_prefetch_querysets() instead.é   )Ú
stacklevel©ÚwarningsÚwarnr   Úget_prefetch_querysets©r!   r=   r;   s      r$   Úget_prefetch_querysetz0ForwardManyToOneDescriptor.get_prefetch_querysetž   óG   € Ü�‰ðä$Øõ		
ð ÐØ×.Ñ.¨yÓ9Ð9Ø×*Ñ*¨9°x°jÓAÐAr&   c                 ó>  — |rt        |«      dk7  rt        d«      ‚|r|d   n| 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 ©	Né   úIquerysets argument of get_prefetch_querysets() should have a length of 1.r   ©r"   ú%s__inTFr*   )ÚlenÚ
ValueErrorr]   Ú
_add_hintsr   Úget_foreign_related_valueÚget_local_related_valueÚforeign_related_fieldsrN   Ú	is_hiddenrR   Úrelated_query_namer:   ÚmultipleÚset_cached_valueÚget_cache_name)r!   r=   Ú	querysetsr;   Úrel_obj_attrÚinstance_attrÚinstÚinstances_dictÚrelated_fieldrN   r1   Úrel_objr"   s                r$   re   z1ForwardManyToOneDescriptor.get_prefetch_querysets©   s¥  € Ùœ˜Y›¨1Ò,Üðóð ñ $-�9˜Q’<°$×2CÑ2CÓ2EˆØ×Ñ 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   Á8FÃ=Fc                 óz   — | j                  |¬«      }|j                  | j                  j                  |«      «      S ©Nrm   )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 rL   )r   Úget_cached_valueÚKeyErrorrs   Ú_metaÚget_ancestor_linkrO   r   r…   rN   rw   rx   ÚnullrK   r'   rR   )r!   r"   Úclsr€   Ú	has_valueÚancestor_linkÚancestorrN   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 "ú": "rL   ú" must be a "ú" instance.rm   úGCannot assign "%r": the current database router prevents this relation.r‡   )Ú
isinstancer   rN   rO   rŒ   Úconcrete_modelrp   Úobject_namerR   Ú_stater?   r   Údb_for_writeÚ	__class__Úallow_relationrŠ   rx   Úrelated_fieldsÚsetattrr   Úgetattrrw   )r!   r"   r#   rN   Ú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   rO   rR   rS   s    r$   Ú
__reduce__z%ForwardManyToOneDescriptor.__reduce__Z  s&   € ô ˜Ÿ™×)Ñ)¨4¯:©:¯?©?Ð;Ð;Ð;r&   r   )r'   r(   r)   Ú__doc__rH   r   rK   r   r]   rg   re   r…   r“   r%   r¨   r*   r&   r$   rE   rE   v   sO   „ ñ
ò$ð ñ
ó ð
ò".òYó	Bó+
òZGó
1òfJ;óX<r&   rE   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>z  s   øè ø€ Ò=¨5�u ”Ñ=ùs   ƒr*   )r   rN   Úparent_linkÚget_deferred_fieldsrO   rŒ   Úconcrete_fieldsr   Úanyr£   r�   Úaddingr?   Úsuperr…   )	r!   r"   ÚdeferredÚ	rel_modelr   ÚkwargsÚobjr¯   rŸ   s	          @€r$   r…   z$ForwardOneToOneDescriptor.get_objecto  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_keyrN   r±   rŒ   r³   rO   Úpkr   r£   r¢   )	r!   r"   r#   Úoptsr   Úinherited_pk_fieldsÚrel_model_pk_nameÚ	raw_valuerŸ   s	           €r$   r%   z!ForwardOneToOneDescriptor.__set__‚  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©   r…   r%   Ú__classcell__©rŸ   s   @r$   r«   r«   c  s   ø„ ñ	ô,÷&@ð @r&   r«   c                   óV   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zd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$   rH   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 rJ   )	rM   r¤   Úrelated_modelrP   rQ   rO   r(   r)   rR   rS   s    r$   rK   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   rU   s     r$   r   z#ReverseOneToOneDescriptor.is_cached¹  s   € Ø�|‰|×%Ñ% hÓ/Ð/r&   c                 ó~   — | j                   j                  j                  j                  |¬«      j	                  «       S rW   )r¤   rÈ   rY   rZ   r[   r\   s     r$   r]   z&ReverseOneToOneDescriptor.get_queryset¼  s/   € Ø�|‰|×)Ñ)×7Ñ7×BÑBÈÐBÓO×SÑSÓUÐUr&   Nc                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S r_   rb   rf   s      r$   rg   z/ReverseOneToOneDescriptor.get_prefetch_queryset¿  rh   r&   c                 ód  — |rt        |«      dk7  rt        d«      ‚|r|d   n| 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 rj   )ro   rp   r]   rq   r¤   r   rs   rr   rR   r:   rx   ry   )r!   r=   rz   r;   r{   r|   r}   r~   r1   r€   r"   s              r$   re   z0ReverseOneToOneDescriptor.get_prefetch_querysetsÊ  s5  € Ùœ˜Y›¨1Ò,Üðóð ñ $-�9˜Q’<°$×2CÑ2CÓ2EˆØ×Ñ 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``.
        Nrm   r‰   rL   r*   )r¤   rŠ   r‹   r½   r   Úget_forward_related_filterr]   r   rx   rÈ   rP   rK   rŸ   r'   Úget_accessor_name)r!   r"   r�   r€   Ú
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``.
        Nr‡   r•   r–   rL   r—   r˜   rm   r™   c              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr   )r£   r   )r®   r   r"   s     €r$   r°   z4ReverseOneToOneDescriptor.__set__.<locals>.<genexpr>J  s$   øè ø€ ò àô ˜ %§-¡-×0ñùs   ƒ #)r¤   rŠ   r   r¢   r   rR   rš   rÈ   rp   rŒ   rœ   rÏ   r�   r?   r   rž   rŸ   r    Útuplert   Ú	enumerateÚlocal_related_fieldsr   rx   )r!   r"   r#   r€   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¤   rO   rR   rS   s    r$   r¨   z$ReverseOneToOneDescriptor.__reduce__[  s&   € ä˜Ÿ™×+Ñ+¨T¯\©\×->Ñ->Ð?Ð?Ð?r&   r   )r'   r(   r)   r©   rH   r   rK   r   r]   rg   re   r“   r%   r¨   r*   r&   r$   rÅ   rÅ   –  sJ   „ ñ
òð
 ñ
ó ð
ò 0òVó	Bó
ó:+ò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$   rH   z#ReverseManyToOneDescriptor.__init__p  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_clst  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Ï   rS   s    r$   Ú_get_set_deprecation_msg_paramsz:ReverseManyToOneDescriptor._get_set_deprecation_msg_paramsŒ  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__’  s#   € ÜØNØ×2Ñ2Ó4ñ5ó
ð 	
r&   r   )
r'   r(   r)   r©   rH   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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¶   rH   r"   rÈ   rO   r   rR   Úcore_filters)r!   r"   rŸ   rÜ   s     €€r$   rH   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£   rO   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   rt   r£   r"   r   rp   )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.
            rm   TÚ éÿÿÿÿr*   )r0   r   Údb_for_readrO   r"   r   r3   Ú!interprets_empty_strings_as_nullsrq   r-   Ú_defer_next_filterr:   rë   r   rt   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   rN   ry   rQ   r‹   rS   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½   rp   rŸ   r'   r  r   rN   ry   rQ   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                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S r_   rb   rf   s      r$   rg   zPcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_prefetch_querysetû  óG   € Ü�M‰Mðä(Øõ	ð ÐØ×2Ñ2°9Ó=Ð=Ø×.Ñ.¨y¸8¸*ÓEÐEr&   c                 ó¦  •— |rt        |«      dk7  rt        d«      ‚|r|d   n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 )Nrk   rl   r   rm   F)ro   rp   r¶   r]   rq   r-   r0   r   rs   rr   rC   rR   r   r¢   rN   ry   )r!   r=   rz   r;   r{   r|   r}   r~   r€   r"   Ú
cache_namerŸ   s              €r$   re   zQcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_prefetch_querysets  s6  ø€ ÙœS ›^¨qÒ0Ü ð#óð ñ (1�y ’|´e±gÑ6JÓ6LˆHØ×Ñ¨°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   Â E©Ú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)Nrm   c                 óæ   •— t        | ‰j                  «      s/t        d‰j                  j                  j                  ›d| ›�«      ‚t        | ‰j                  j                  ‰j                  «       y )Nú'ú' instance expected, got )	rš   rO   ræ   rŒ   rœ   r¢   r   rR   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ž   rO   r"   r�   rµ   r?   rp   Úappendr½   rY   r-   r:   Úupdater   rR   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.aaddE  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 ©Nrm   r*   )
ró   r"   r   rR   r   rž   rO   r¶   rZ   Úcreate©r!   r¹   r?   ÚRelatedManagerrŸ   s      €€r$   r)  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.createJ  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.acreateR  s%   è ø€ Ø3œ t§{¡{Ó3Ñ=°fÑ=×=Ð=Ð=úr&  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r(  )
ró   r"   r   rR   r   rž   rO   r¶   rZ   Úget_or_creater*  s      €€r$   r2  zHcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_or_createW  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   r2  r/  s     r$   Úaget_or_createzIcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aget_or_create_  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   rR   r   rž   rO   r¶   rZ   Úupdate_or_creater*  s      €€r$   r7  zKcreate_reverse_many_to_one_manager.<locals>.RelatedManager.update_or_created  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   r7  r/  s     r$   Úaupdate_or_createzLcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aupdate_or_createl  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 rL   r  )ró   r   rr   r"   Úsetrš   rO   ræ   rŒ   rœ   rs   r   r½   rN   rP   Ú_clearr:   )r!   r  r  r  Úold_idsrº   s         r$   ÚremovezAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.removeu  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.clear”  s   € Ø×"Ñ"Ô$Ø—‘˜D $Õ'r&   c             “   óV   K  —  t        | j                  «      |¬«      ƒ d {  –—† S 7 Œ­w)Nr  ©r   rE  rD  s     r$   ÚaclearzAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aclearš  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)Nrm   Fr  )Úupdate_fieldsr*   )r  r   rž   rO   r"   r-   r  r   rR   r	   r  r¢   r  )r!   r;   r  r?   rº   s        r$   r=  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager._clearŸ  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  rE  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)Nrm   Fr  r  r  )ró   rÔ   r   rŽ   r   rž   rO   r"   r	   r  rE  r   r<  r-   r[   r?  r  )r!   r  r  rE  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  rE  ©r   r<  )r!   r  r  rE  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)   rH   rï   Údo_not_call_in_templatesró   r  r  r]   rg   re   r   Úalters_datar%  r)  r0  r2  r5  r7  r:  r   rŽ   r?  rB  rE  rH  r=  r<  rP  rÂ   )rŸ   r+  rÜ   s   @€€r$   r+  ré   ¡  sP  ù„ õ	<ô	0ð
 $(Ð ò	ò&	òP	ô	9ó"		Fõ	Sð0 #'ô #	#ð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Þ   ™  s   ù€ ÷l ˜¤Zô l ð\	 Ð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¶   rH   Úreverse)r!   rÜ   rY  rŸ   s      €r$   rH   zManyToManyDescriptor.__init__ã  s   ø€ Ü‰Ñ˜Ôàˆ�r&   c                 ó.   — | j                   j                  S r   )rÜ   ÚthroughrS   s    r$   r[  zManyToManyDescriptor.throughè  s   € ð
 �x‰x×ÑÐr&   c                 óÞ   — | j                   r| j                  j                  n| j                  j                  }t	        |j
                  j                  | j                  | j                   ¬«      S )N)rY  )rY  rÜ   rÈ   rO   Ú#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 setrY  Úforward)rY  rÜ   rÏ   r   rR   rS   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©   rH   Úpropertyr[  r   rá   rä   rÂ   rÃ   s   @r$   rW  rW  Ò  s:   ø„ ñõ ð
 ñ ó ð ð ñ
ó ð
ö
r&   rW  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!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¶   rH   r"   rO   r   rv   Úquery_field_namerR   Úprefetch_cache_nameÚm2m_field_nameÚsource_field_nameÚm2m_reverse_field_nameÚtarget_field_nameÚsymmetricalrÈ   r[  rY  rŒ   Ú	get_fieldÚsource_fieldrý   rë   Úpk_field_namesr¡   r£   r   rr   Úrelated_valrp   r½   rŸ   r'   )r!   r"   r¥   r¦   Úcore_filter_keyrŸ   rÜ   rY  s        €€€r$   rH   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 r‚   )r£   rO   r]  rŸ   r"   )r!   rí   rî   rÜ   rY  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)  ri  rp  rš   r   Ú_has_filtersrk  rl  )r!   Úremoved_valsÚfiltersÚremoved_vals_filtersÚsymmetrical_filterss        r$   Ú_build_remove_filterszUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._build_remove_filtersE  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õ   rm   Tr*   )rq   r"   r0   r-   rú   Ú_next_is_stickyr:   rë   )r!   r;   s     r$   r  zRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._apply_rel_filtersY  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  rg  rQ   r‹   rS   s    r$   r  zZcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_prefetched_objectsc  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  rg  rQ   r‹   r¶   r]   r  r
  s     €r$   r]   zLcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_queryseti  sU   ø€ ð9Ø—}‘}×>Ñ>¸t×?WÑ?WÑXÐXøÜ"¤HÐ-ò 9Ü ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ò8ð9ús   ƒ"& ¦.AÁAc                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S r_   rb   rf   s      r$   rg   zUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysetp  r  r&   c                 ó  •‡‡— |rt        |«      dk7  rt        d«      ‚|r|d   n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
| j0                  d
fS c c}w )Nrk   rl   r   rm   z_prefetch_related_val_%srL   )Úselectc                 óD   •‡ — t        ˆˆ fd„‰j                  D «       «      S )Nc              3   óp   •K  — | ]-  }|j                  t        ‰d |j                  › �«      ‰«      –— Œ/ y­w)Ú_prefetch_related_val_N©Úget_db_prep_valuer£   r   )r®   ÚfÚ
connectionÚresults     €€r$   r°   z{create_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>.<locals>.<genexpr>�  s?   øè ø€ ò %ð
 ð	 ×'Ñ'Ü Ð*@ÀÇÁÀÐ(LÓMØ"÷ñ%ùs   ƒ36)rÔ   rÖ   )rˆ  r‡  Úfks   `€€r$   ú<lambda>zhcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<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   r„  )r®   r†  r‡  r}   s     €€r$   r°   z{create_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>.<locals>.<genexpr>¤  s1   øè ø€ ò #àð ×'Ñ'¬°°a·i±iÓ(@À*×Mñ#ùs   ƒ03)rÔ   rt   )r}   r‡  r‰  s   `€€r$   rŠ  zhcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>¤  s   ù€ œUô #à×6Ñ6ô#ó € r&   F)ro   rp   r¶   r]   rq   r-   r0   rC   r{  rf  r[  rŒ   rm  ri  rO   Údb_tabler   r?   ÚopsÚ
quote_nameÚextrarÖ   r   Úcolumnrg  )
r!   r=   rz   r;   Ú
join_tableÚqnr†  r‡  r‰  rŸ   s
          @@€r$   re   zVcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets{  se  ú€ ÙœS ›^¨qÒ0Ü ð#óð ñ (1�y ’|´e±gÑ6JÓ6LˆHØ×Ñ¨°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)Nrm   Fr  r•  )r  r   rž   r[  r"   r	   r  Ú
_add_itemsri  rk  rl  )r!   r•  r  r?   s       r$   r   zCcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.add­  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_itemsri  rk  ©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   rA  r›  s     r$   rB  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)Nrm   Fr  Ú	pre_clear©ÚsenderÚactionr"   rY  rO   Úpk_setr-   Ú
post_clear)r   rž   r[  r"   r	   r  r   Úm2m_changedÚsendrY  rO   r  ry  r¶   r]   r-   rß   r:   Údelete)r!   r?   rv  rŸ   s      €r$   rE  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   rG  rS   s    r$   rH  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aclearñ  s    è ø€ Ø2œ t§z¡zÓ2Ó4×4Ð4Ð4ús   ‚' %¡'F)rE  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)Nrm   Fr  r•  T©Úflatr   )rÔ   r   rž   r[  r"   r	   r  rE  r   r<  r-   Úvalues_listrý   r   rš   rO   rr   Úget_prep_valuer?  r  )	r!   r  rE  r•  r?   r>  rM  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  rE  r•  rO  )r!   r  rE  r•  s       r$   rP  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aset  s0   è ø€ Ø0œ t§x¡xÓ0Ø Ð9Iô÷ ð ð úrQ  c                óÔ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž}| j                  ||¬«       |S ©Nrm   r”  r*   )r   rž   r"   rŸ   r¶   rZ   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$   r0  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¶   rZ   r2  r   ©r!   r•  r¹   r?   rº   Úcreatedr²  rŸ   s         €€r$   r2  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´  r4  rµ  s      r$   r5  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¶   rZ   r7  r   r¸  s         €€r$   r7  zPcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.update_or_createB  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´  r9  rµ  s      r$   r:  zQcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aupdate_or_createO  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<  r[  rŒ   rm  rš   rO   r   r    r"   rp   r�   r?   rr   r   ræ   rœ   r¬  )r!   rk  r  r¾  Ú
target_idsrý   rº   Ú	target_ids           r$   Ú_get_target_idszOcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_target_idsV  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   rn   r*   )r[  rß   r-   r«  r:   rp  Ú
difference)r!   ri  rk  r?   rÀ  Úvalss         r$   Ú_get_missing_target_idszWcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_missing_target_idsv  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)r[  rŒ   Úauto_createdr   r3   Úsupports_ignore_conflictsrY  ri  r   r¤  Úhas_listeners)r!   r?   ri  Úcan_ignore_conflictsÚmust_send_signalss        r$   Ú_get_add_planzMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_add_plan‰  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)Nrm   z%s_idr   T)Úignore_conflictsFr  Úpre_addrŸ  Úpost_addr*   )Údictr   rÂ  r   rž   r[  r"   rÍ  rß   r-   Úbulk_createrp  rÆ  r	   r  r   r¤  r¥  rY  rO   )r!   ri  rk  r•  r  rÀ  r?   rË  rÌ  Úcan_fast_addrÁ  Úmissing_target_idss               r$   r—  zJcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._add_itemsª  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   rm   Fr  Ú
pre_removerŸ  rn   Úpost_remover*   )r<  rš   rO   rý   rr   r   r   rž   r[  r"   r	   r  r   r¤  r¥  rY  r¶   r]   rt  r-   r:   r   ry  rß   r¦  )r!   ri  rk  r  r>  rº   r­  r?   Útarget_model_qsÚold_valsrv  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)   rH   rï   rR  ry  r  r  r]   rg   re   r   rS  r%  r?  rB  rE  rH  r<  rP  r)  r0  r2  r5  r7  r:  rÂ  rÆ  rÍ  r—  rš  rÂ   )rŸ   r²  rÜ   rY  s   @€€€r$   r²  rc  	  sY  ù„ ÷0	õd	9ð $(Ð ò	ò(	Jò	ô	9ó		Fõ0	ðd /3ô 	ð( ˆŒà59ô 	ð
  ˆÔò	Vð "ˆÔò	;ð #ˆÔô	ð4 !ˆÔò	5ð "ˆÔà%*¸Tô 	Kð@ ˆŒà,1ÀDô 	ð
  ˆÔà-1÷ 	ð "ˆÔà48ô 	ð
 #ˆÔà48÷ 		 ð %)ˆÔ!à;?ô 	ð
 &*ˆÔ"à7;÷ 		 ð (,ÐÔ$à>Bô 	ð
 )-ÐÔ%ò	ò@	/ò&	ðD QUôE	÷N/	ð /	r&   r²  rT  )rU  rÜ   rY  r²  s    ``@r$   r]  r]    s"   ú€ ÷Wð W˜Z¬ô Wðr Ðr&   ))r©   rc   Ú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.deprecationr   Údjango.utils.functionalr   r   rC   rE   r«   rÅ   rÚ   rÞ   rW  r]  r*   r&   r$   ú<module>rå     s¡   ðñ?óB å &å -÷õ ÷ 0Ñ /Ý 0ß AÝ +Ý :ß @Ý =Ý 3ô6Ð"3ô 6ò&÷*j<ñ j<ôZ0@Ð :ô 0@÷fG@ñ G@÷T6
ñ 6
òrvôr	,
Ð5ô ,
ó^ar&   