Ë
    Ç]jZ  ã                   óR  — 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mZ ddl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 ddlmZmZ ddl m!Z!  G d„ de«      Z"d„ 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)ÚManagerÚQÚWindowÚsignals)ÚColPairs)ÚTupleIn)Ú	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      úb/var/www/zogu/zoguvenv/lib/python3.12/site-packages/django/db/models/fields/related_descriptors.pyÚ__set__z#ForeignKeyDeferredAttribute.__set__X   sh   € Ø×Ñ× Ñ  §¡×!3Ñ!3Ó4¸Ò=À$Ç*Á*×BVÑBVØôC
ð �J‰J×*Ñ*¨8Ô4Ø05ˆ×Ñ˜$Ÿ*™*×,Ñ,Ò-ó    N)Ú__name__Ú
__module__Ú__qualname__r'   © r(   r&   r   r   W   s   „ ó6r(   r   c                 ó€  — 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                  j%                  |d¬«       | S c c}}w )NÚ__inz`Prefetching from a limited queryset is only supported on backends that support window functions.)Úusing)Úpartition_byÚorder_byT)Ú	reuse_allr,   )r   Ú_dbr   ÚqueryÚ	is_slicedr   ÚfeaturesÚsupports_over_clauser   Úlow_markÚ	high_markÚget_compilerÚget_order_byr   r   r   r   Úclear_limitsÚadd_q)ÚquerysetÚ
field_nameÚ	instancesÚ	predicateÚdbr8   r9   ÚexprÚ_r1   Úwindows              r&   Ú_filter_prefetch_querysetrF   `   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Ø�‰×#Ñ#Ô%ð ‡N�N×Ñ˜¨dÐÔ3Ø€Oùó
s   Â<D:c              #   ó˜   K  — |}|�B|j                   j                  | «      }|s|d f–— y |j                  |d «      }||f–— |}|�ŒAy y ­wr   )Ú_metaÚget_ancestor_linkÚget_cached_value)ÚmodelÚstarting_instanceÚcurrent_instanceÚancestor_linkÚancestors        r&   Ú_traverse_ancestorsrP   x   se   è ø€ Ø(ÐØ
Ð
&Ø(×.Ñ.×@Ñ@ÀÓGˆÙØ" DÐ(Ò(ØØ ×1Ñ1Ð2BÀDÓIˆØ Ð(Ò(Ø#Ðð Ó
&ùs   ‚AA
ÁA
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_fieldrK   ÚDoesNotExistÚAttributeErrorr*   r+   Úname©r#   s    r&   rX   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   r[   rK   Ú_base_managerÚ
db_managerÚall©r#   re   s     r&   Úget_querysetz'ForwardManyToOneDescriptor.get_queryset©   s5   € Ø�z‰z×&Ñ&×,Ñ,×:Ñ:×EÑEÈEÐEÓR×VÑVÓXÐXr(   Nc           
      óp  — |rt        |«      dk7  rt        d«      ‚|r|d   n| j                  «       }|j                  |d   ¬«       | j                  j
                  }| j                  j                  }|D �ci c]  } ||«      |“Œ }}| j                  j                  }| j                  j                  D �	cg c]1  }	|j                  j                  |	j                  «      j                  ‘Œ3 }
}	|j                  t        t        |j                   j"                  j$                  |
|
| j                  «      t'        |«      «      «      }|j                  j)                  «        |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$   TF)ÚlenÚ
ValueErrorrj   Ú
_add_hintsr   Úget_foreign_related_valueÚget_local_related_valuer[   Úforeign_related_fieldsr4   Úresolve_refr^   ÚtargetÚfilterr   r   rK   rH   Údb_tableÚlistÚclear_orderingÚmultipleÚset_cached_valueÚ
cache_name)r#   r@   Ú	querysetsr>   Úrel_obj_attrÚinstance_attrÚinstÚinstances_dictr[   r   Úrelated_fieldsÚrel_objr$   s                r&   Úget_prefetch_querysetsz1ForwardManyToOneDescriptor.get_prefetch_querysets¬   s¥  € Ùœ˜Y›¨1Ò,Üðóð ñ $-�9˜Q’<°$×2CÑ2CÓ2EˆØ×Ñ Y¨q¡\ÐÔ2à—z‘z×;Ñ;ˆØŸ
™
×:Ñ:ˆØ@IÖJ¸™-¨Ó-¨tÑ3ÐJˆÐJØ—z‘z×.Ñ.ˆð Ÿ™×:Ñ:ö
àð �N‰N×&Ñ& u§z¡zÓ2×9Ó9ð
ˆð 
ð —?‘?ÜÜØ—N‘N×(Ñ(×1Ñ1Ø"Ø"Ø—J‘Jó	ô �^Ó$óó

ˆð 	�‰×%Ñ%Ô'ð ×$Ò$Ø#ò A�Ø)©,°wÓ*?Ñ@�Ø×-Ñ-¨g°xÕ@ðAð ØØØØ�J‰J×!Ñ!Øð
ð 	
ùò7 Kùò
s   Á8F.Â86F3c                 óz   — | j                  |¬«      }|j                  | j                  j                  |«      «      S ©Nrn   )rj   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}d| j                   j                  |«      v}|rN| j                   j                  }t        ||«      D ])  \  }}|sŒ	| j                   j                  |d¬«      }|€Œ) n |€G|rE| j                  |«      }| j                   j                  }|j                  s|j                  ||«       | j                   j                  ||«       Y �ŒCw 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 rY   )r   rJ   ÚKeyErrorrs   rK   rP   rŠ   r[   r{   r|   ÚnullrX   r)   r^   )	r#   r$   Úclsr„   Ú	has_valuerK   rM   rO   r[   s	            r&   Ú__get__z"ForwardManyToOneDescriptor.__get__à   sM  € ð ÐØˆKð
	;Ø—j‘j×1Ñ1°(Ó;ˆGð2 ˆ? 4§:¡:§?¢?Ø×0Ñ0Ø#'§:¡:×#3Ñ#3×#<Ó#<¸d¿j¹j¿o»oÐNóð ð ˆNøô; ò 	;ØˆGØ D§J¡J×$FÑ$FÀxÓ$PÐPˆIÙØŸ
™
×(Ñ(�Ü2EÀeÈXÓ2Vò "Ñ.Ð$ hÚð #'§*¡*×"=Ñ"=¸hÐPTÐ"=Ó"U˜Ø"Ñ.Ù!ð"ð ˆ¡9ØŸ/™/¨(Ó3�Ø#Ÿz™z×6Ñ6�ð $×,Ò,Ø ×1Ñ1°'¸8ÔDØ�J‰J×'Ñ'¨°'×:ð-	;ús   †B ÂAE%ÃE%Ã9A(E%Å$E%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 "ú": "rY   ú" must be a "ú" instance.rn   úGCannot assign "%r": the current database router prevents this relation.rŒ   )Ú
isinstancer   r[   rK   rH   Úconcrete_modelrp   Úobject_namer^   Ú_staterB   r   Údb_for_writeÚ	__class__Úallow_relationrJ   r|   rƒ   Úsetattrr   Úgetattrr{   )r#   r$   r%   r[   Ú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   rK   r^   r_   s    r&   Ú
__reduce__z%ForwardManyToOneDescriptor.__reduce__]  s&   € ô ˜Ÿ™×)Ñ)¨4¯:©:¯?©?Ð;Ð;Ð;r(   r   )r)   r*   r+   Ú__doc__rU   r   rX   r    rj   r…   rŠ   r“   r'   r§   r,   r(   r&   rR   rR   „   sI   „ ñ
ò$ð ñ
ó ð
ò".òYó-
ò^Gó
/òbJ;óX<r(   rR   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>~  s   øè ø€ Ò=¨5�u ”Ñ=ùs   ƒr,   )r   r[   Úparent_linkÚget_deferred_fieldsrK   rH   Úconcrete_fieldsr   Úanyr¢   r�   ÚaddingrB   ÚsuperrŠ   )	r#   r$   ÚdeferredÚ	rel_modelr   ÚkwargsÚobjr®   rŸ   s	          @€r&   rŠ   z$ForwardOneToOneDescriptor.get_objects  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_keyr[   r°   rH   r²   rK   Ú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ª   f  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&   rU   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 rW   )	rZ   r£   Úrelated_modelr\   r]   rK   r*   r+   r^   r_   s    r&   rX   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    ra   s     r&   r    z#ReverseOneToOneDescriptor.is_cached½  s   € Ø�|‰|×%Ñ% hÓ/Ð/r(   c                 ó~   — | j                   j                  j                  j                  |¬«      j	                  «       S rc   )r£   rÇ   rf   rg   rh   ri   s     r&   rj   z&ReverseOneToOneDescriptor.get_querysetÀ  s/   € Ø�|‰|×)Ñ)×7Ñ7×BÑBÈÐBÓO×SÑSÓUÐUr(   Nc                 ó�  — |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 |¤Ž}|j                  j                  «        |D ]3  }	| ||	«         }
| j                  j
                  j                  |	|
«       Œ5 |||d| j                  j                  dfS c c}w )	Nrl   rm   r   rn   ú%s__inTFr,   )ro   rp   rj   rq   r£   r   rs   rr   r^   rw   r4   rz   r|   r}   )r#   r@   r~   r>   r   r€   r�   r‚   r4   r„   r$   s              r&   r…   z0ReverseOneToOneDescriptor.get_prefetch_querysetsÃ  sD  € Ùœ˜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   ÂEc                 óz  — |€| S 	 | j                   j                  |«      }|€?| j                  |j                  j                  ›d| j                   j                  ›d�«      ‚|S # t        $ rÍ |j                  «       s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``.
        Nrn   rŽ   rY   r,   )r£   rJ   r�   Ú
_is_pk_setr   Úget_forward_related_filterrj   r   r|   rÇ   r\   rX   rŸ   r)   Úaccessor_name)r#   r$   r‘   r„   Úfilter_argss        r&   r“   z!ReverseOneToOneDescriptor.__get__ã  s'  € ð ÐØˆKð
	=Ø—l‘l×3Ñ3°HÓ=ˆGð" ˆ?Ø×0Ñ0à×%Ñ%×.Ó.°·±×0JÓ0JðLóð ð
 ˆNøô- ò 	=Ø×&Ñ&Ô(Ø‘à"Ÿ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×<ð	=ús6   †A$ Á$AD:Â&"C/Ã'D:Ã/%DÄD:ÄDÄD:Ä9D:c                 óÆ  ‡— |€g| j                   j                  ‰d¬«      }|�G| j                   j                  ‰«       t        || j                   j                  j
                  d«       yyt        || j                   j                  «      sht        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–   rY   r—   r˜   rn   r™   c              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr   )r¢   r   )r­   r   r$   s     €r&   r¯   z4ReverseOneToOneDescriptor.__set__.<locals>.<genexpr>F  s$   øè ø€ ò àô ˜ %§-¡-×0ñùs   ƒ #)r£   rJ   r!   r¡   r   r^   rš   rÇ   rp   rH   rœ   rÏ   r�   rB   r   rž   rŸ   r    Útuplert   Ú	enumerateÚlocal_related_fieldsr   r|   )r#   r$   r%   r„   Ú
related_pkÚ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×.Ó.Ø—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£   rK   r^   r_   s    r&   r§   z$ReverseOneToOneDescriptor.__reduce__X  s&   € ä˜Ÿ™×+Ñ+¨T¯\©\×->Ñ->Ð?Ð?Ð?r(   r   )r)   r*   r+   r¨   rU   r   rX   r    rj   r…   r“   r'   r§   r,   r(   r&   rÄ   rÄ   š  sE   „ ñ
òð
 ñ
ó ð
ò 0òVó
ó@*òXGAóR@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_reverse_many_to_one_manager()`` defined below.
    c                 ó4   — || _         |j                  | _        y r   )Úrelr   )r#   rÜ   s     r&   rU   z#ReverseManyToOneDescriptor.__init__m  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_clsq  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__z  s    € ð ÐØˆKà×'Ñ'¨Ó1Ð1r(   c                 ó2   — d| j                   j                  fS )Nzreverse side of a related set)rÜ   rÏ   r_   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¨   rU   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µ   rU   r$   rÇ   rK   r   r^   Úcore_filters)r#   r$   rŸ   rÜ   s     €€r&   rU   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¢   rK   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.
            rn   TÚ éÿÿÿÿr,   )r3   r   Údb_for_readrK   r$   r   r6   Ú!interprets_empty_strings_as_nullsrq   r/   Ú_defer_next_filterrw   rë   r   rt   r¢   r   ÚnoneÚmany_to_oneÚtarget_fieldr   rÓ   Ú
path_infosÚtarget_fieldsÚ_known_related_objects)r#   r>   rB   Ú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   r[   r}   r]   r�   r_   s    r&   Ú_remove_prefetched_objectszUcreate_reverse_many_to_one_manager.<locals>.RelatedManager._remove_prefetched_objectsß  sK   € ðØ—‘×7Ñ7×;Ñ;Ø—J‘J×+Ñ+×6Ñ6õøô #¤HÐ-ò Ùðús   ‚AA ÁAÁAc                 óh  •— | j                   j                  «       s,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   r[   r}   r]   r�   rµ   rj   r  )r#   r>   rŸ   s     €r&   rj   zGcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_querysetç  s§   ø€ ð —=‘=×+Ñ+Ô-Ü Ø—}‘}×.Ñ.×7Ñ7Ð:ð ;Nð Oóð ð9Ø—}‘}×>Ñ>Ø—J‘J×+Ñ+×6Ñ6ñð øô #¤HÐ-ò 9Ü ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ò8ð9ús   Á	6B  Â .B1Â0B1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 ]E  }| j                  j                  |«      rŒ| ||«         }	| j                  j                  ||	«       ŒG | j                  j                  j                  }
|||d|
dfS c c}w )Nrl   rm   r   rn   F)ro   rp   rµ   rj   rq   r/   r3   r   rs   rr   rF   r^   r    r|   r[   r}   )r#   r@   r~   r>   r   r€   r�   r‚   r„   r$   r}   rŸ   s              €r&   r…   zQcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_prefetch_querysetsø  s3  ø€ Ùœ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ð $ò C�Ø—z‘z×+Ñ+¨GÕ4Ø-©l¸7Ó.CÑD�HØ—J‘J×/Ñ/°¸ÕBðCð Ÿ™×0Ñ0×;Ñ;ˆ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)Nrn   c                 óæ   •— t        | ‰j                  «      s/t        d‰j                  j                  j                  ›d| ›�«      ‚t        | ‰j                  j                  ‰j                  «       y )Nú'ú' instance expected, got )	rš   rK   ræ   rH   rœ   r¡   r   r^   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ž   rK   r$   r�   r´   rB   rp   Úappendr¼   rf   r/   rw   Úupdater   r^   r	   ÚatomicÚsave)r#   r  ÚobjsrB   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.aadd7  s'   è ø€ Ø0œ t§x¡xÓ0°$ÐB¸TÑB×BÐBÐBúó   ‚(¡&¢(c                 ó  •— | j                  «        | j                  «        | j                  || j                  j                  <   t        j                  | j                  | j                  ¬«      }t        ‰| j                  |«      �*  di |¤ŽS ©Nrn   r,   )ró   r  r$   r   r^   r   rž   rK   rµ   rg   Úcreate©r#   r¸   rB   ÚRelatedManagerrŸ   s      €€r&   r%  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.create<  si   ø€ Ø×ÑÔ Ø×+Ñ+Ô-Ø&*§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.acreateE  s%   è ø€ Ø3œ t§{¡{Ó3Ñ=°fÑ=×=Ð=Ð=úr"  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r$  )
ró   r$   r   r^   r   rž   rK   rµ   rg   Úget_or_creater&  s      €€r&   r.  zHcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_or_createJ  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_createR  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   r^   r   rž   rK   rµ   rg   Úupdate_or_creater&  s      €€r&   r3  zKcreate_reverse_many_to_one_manager.<locals>.RelatedManager.update_or_createW  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   r3  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 rY   r  )ró   r   rr   r$   Úsetrš   rK   ræ   rH   rœ   rs   r  r¼   r[   r\   Ú_clearrw   )r#   r  r  r  Úold_idsr¹   s         r&   ÚremovezAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.removeh  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ó   r9  ©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   rA  r@  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)Nrn   Fr  )Úupdate_fieldsr,   )r  r   rž   rK   r$   r/   r  r   r^   r	   r  r¡   r  )r#   r>   r  rB   r¹   s        r&   r9  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  rA  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)Nrn   Fr  r  r  )ró   rÓ   r   r�   r   rž   rK   r$   r	   r  rA  r  r8  r/   rh   r;  r  )r#   r  r  rA  rB   Úold_objsÚnew_objsr¹   s           r&   r8  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  rA  ©r   r8  )r#   r  r  rA  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+   rU   rï   Údo_not_call_in_templatesró   r  r  rj   r…   r  Úalters_datar!  r%  r,  r.  r1  r3  r6  r   r�   r;  r>  rA  rD  r9  r8  rL  rÁ   )rŸ   r'  rÜ   s   @€€r&   r'  ré   ž  sJ  ù„ õ	<ô	0ð
 $(Ð ò	ò&	òP	ô	9õ"	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   ù€ ÷b ˜¤Zô b ðH	 Ð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µ   rU   Úreverse)r#   rÜ   rU  rŸ   s      €r&   rU   zManyToManyDescriptor.__init__Ö  s   ø€ Ü‰Ñ˜Ôàˆ�r(   c                 ó.   — | j                   j                  S r   )rÜ   Úthroughr_   s    r&   rW  zManyToManyDescriptor.throughÛ  s   € ð
 �x‰x×ÑÐr(   c                 óÞ   — | j                   r| j                  j                  n| j                  j                  }t	        |j
                  j                  | j                  | j                   ¬«      S )N)rU  )rU  rÜ   rÇ   rK   Ú#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 setrU  Úforward)rU  rÜ   rÏ   r   r^   r_   s    r&   rä   z4ManyToManyDescriptor._get_set_deprecation_msg_paramsì  sI   € à+Ø ŸLšL‰y¨iñ9à&*§l¢lˆD�H‰H×"Ñ"ð
ð 	
ð 9=¿
¹
¿¹ð
ð 	
r(   )F)r)   r*   r+   r¨   rU   ÚpropertyrW  r   rá   rä   rÁ   rÂ   s   @r&   rS  rS  Å  s:   ø„ ñõ ð
 ñ ó ð ð ñ
ó ð
ö
r(   rS  c                 ó8   ‡ ‡‡‡—  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ˆfd„Zˆfd„Z	ˆ fd	„Z
d$ˆ fd
„	Zed„ «       Zˆ ˆfd„Zˆ ˆ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;                  «       s"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µ   rU   r$   rK   r   Úrelated_query_nameÚquery_field_namer^   Úprefetch_cache_nameÚm2m_field_nameÚsource_field_nameÚm2m_reverse_field_nameÚtarget_field_nameÚsymmetricalrÇ   rW  rU  rH   Ú	get_fieldÚsource_fieldrý   rë   Úpk_field_namesrƒ   r¢   r   rr   Úrelated_valrp   rÍ   rŸ   r)   )r#   r$   r¤   r¥   Úcore_filter_keyrŸ   rÜ   rU  s        €€€r&   rU   zHcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.__init__ý  sB  ø€ Ü‰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¢   rK   rY  rŸ   r$   )r#   rí   rî   rÜ   rU  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%  rf  rm  rš   r   Ú_has_filtersrh  ri  )r#   Úremoved_valsÚfiltersÚremoved_vals_filtersÚsymmetrical_filterss        r&   Ú_build_remove_filterszUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._build_remove_filters8  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õ   rn   Tr,   )rq   r$   r3   r/   rú   Ú_next_is_stickyrw   rë   )r#   r>   s     r&   r  zRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._apply_rel_filtersL  s_   € ð ×Ñ¨¯©ÐÔ7Ø�xŠxØ#Ÿ>™>¨$¯(©(Ó3�Ø*.ˆHÔ'Ø4�8×+Ñ+Ó-×4Ñ4ÑI°t×7HÑ7HÑIÐIr(   c                 óÊ   •— t        ‰j                  j                  | j                  «      D ]   \  }}	 |j                  | j
                     c S  y # t        t        f$ r Y Œ5w xY wr   )rP   r   rK   r$   r  rd  r]   r�   ©r#   r$   rD   rÜ   s      €r&   Úget_prefetch_cachezRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_cacheV  se   ø€ ô  3°3·9±9·?±?ÀDÇMÁMÓRò ‘�˜!ðØ#×=Ñ=¸d×>VÑ>VÑWÒWðð
 øô '¬Ð1ò Ùðús   ³AÁA"Á!A"c                 óà   •— t        ‰j                  j                  | j                  «      D ]+  \  }}	 |j                  j                  | j                  «       Œ- y # t        t        f$ r Y Œ@w xY wr   )	rP   r   rK   r$   r  r  rd  r]   r�   rz  s      €r&   r  zZcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_prefetched_objects`  sc   ø€ ô  3°3·9±9·?±?ÀDÇMÁMÓRò ‘�˜!ðØ×6Ñ6×:Ñ:¸4×;SÑ;SÕTñøô '¬Ð1ò Ùðús   ³%AÁA-Á,A-c                 ój   •— | j                  «       x}�|S t        ‰| �	  «       }| j                  |«      S r   )r{  rµ   rj   r  )r#   Úcacher>   rŸ   s      €r&   rj   zLcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_queryseti  s:   ø€ Ø×0Ñ0Ó2Ð2�Ð?Ø�ä ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ð8r(   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                  }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 )Nrl   rm   r   rn   z_prefetch_related_val_%srY   )Ú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µ   rj   rq   r/   r3   rF   rc  rW  rH   rj  rf  rK   rx   r   rB   ÚopsÚ
quote_nameÚextrarÕ   r   Úcolumnrd  )
r#   r@   r~   r>   Ú
join_tableÚqnr†  r‡  r‰  rŸ   s
          @@€r&   r…   zVcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysetsp  s\  ú€ ÙœS ›^¨qÒ0Ü ð#óð ñ (1�y ’|´e±gÑ6JÓ6LˆHØ×Ñ¨°1©ÐÔ6Ø—~‘~ h§l¡lÒ&>°d·h±hÓ?ˆHÜ0Ø˜$×/Ñ/°óˆHð —‘×#Ñ#×-Ñ-¨d×.DÑ.DÓEˆBØŸ™Ÿ™×0Ñ0ˆJÜ$ X§[¡[Ñ1ˆJØ—‘×*Ñ*ˆBØ—~‘~ð
  ×4Ñ4ö	ð ð /Ø—i‘iñ á˜*•~¡r¨!¯(©(¤|ð"5ñ5òð &ó ˆHð ôôð Ø×(Ñ(Øðð ùòs   Ä2E.c                 óÖ  — | j                   j                  sy t        j                  | j                  | j
                  ¬«      }t        |   j                  j                  sy d| j
                  i}| j                  j                  j                  ||¬«      }| j                  | j                  d   i}| j                   j                  rd|d| j                  z  <    |j                  di |¤ŽS )Nrn   r$   rd   r   Fz
%s__isnullr,   )rý   Údb_constraintr   rø   rW  r$   r   r6   Úsupports_foreign_keysrf   rg   rf  rm  r�   rh  rw   )r#   rB   re   rí   rs  s        r&   Úconstrained_targetzRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.constrained_target¢  sÈ   € ð
 ×$Ñ$×2Ò2ØÜ×#Ñ# D§L¡L¸4¿=¹=ÔIˆBÜ˜r‘?×+Ñ+×AÒAØØ §¡Ð/ˆEØ—l‘l×0Ñ0×;Ñ;¸BÀeÐ;ÓLˆGØ×-Ñ-¨t×/?Ñ/?ÀÑ/BÐCˆGð × Ñ ×%Ò%ØAF�˜ t×'=Ñ'=Ñ=Ñ>Ø!�7—>‘>Ñ, GÑ,Ð,r(   c                 óŒ   •— ‰t         u r.| j                  «       €| j                  x}�|j                  «       S t        ‰| �  «       S r   )r
   r{  r–  Úexistsrµ   ©r#   r–  rŸ   rQ  s     €€r&   r˜  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.existsµ  sH   ø€ àœgÑ%Ø×+Ñ+Ó-Ð5Ø+/×+BÑ+BÐBÐ'ÐOà)×0Ñ0Ó2Ð2ä‘w‘~Ó'Ð'r(   c                 óŒ   •— ‰t         u r.| j                  «       €| j                  x}�|j                  «       S t        ‰| �  «       S r   )r
   r{  r–  Úcountrµ   r™  s     €€r&   r›  zEcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.count¿  sG   ø€ àœgÑ%Ø×+Ñ+Ó-Ð5Ø+/×+BÑ+BÐBÐ'ÐOà)×/Ñ/Ó1Ð1ä‘w‘}“Ð&r(   ©Ú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)Nrn   Fr  r�  )r  r   rž   rW  r$   r	   r  Ú
_add_itemsrf  rh  ri  )r#   r�  r  rB   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_itemsrf  rh  ©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   r=  r£  s     r&   r>  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)Nrn   Fr  Ú	pre_clear©ÚsenderÚactionr$   rU  rK   Úpk_setr/   Ú
post_clear)r   rž   rW  r$   r	   r  r   Úm2m_changedÚsendrU  rK   r  rv  rµ   rj   r/   rß   rw   Údelete)r#   rB   rs  rŸ   s      €r&   rA  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   rC  r_   s    r&   rD  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aclear  s    è ø€ Ø2œ t§z¡zÓ2Ó4×4Ð4Ð4ús   ‚' %¡'F)rA  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)Nrn   Fr  r�  T©Úflatr   )rÓ   r   rž   rW  r$   r	   r  rA  r  r8  r/   Úvalues_listrý   r   rš   rK   rr   Úget_prep_valuer;  r  )	r#   r  rA  r�  rB   r:  rI  r¹   Úfk_vals	            r&   r8  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  rA  r�  rK  )r#   r  rA  r�  s       r&   rL  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aset4  s0   è ø€ Ø0œ t§x¡xÓ0Ø Ð9Iô÷ ð ð úrM  c                óÔ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž}| j                  ||¬«       |S ©Nrn   rœ  r,   )r   rž   r$   rŸ   rµ   rg   r%  r  )r#   r�  r¸   rB   Ú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.acreateC  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µ   rg   r.  r  ©r#   r�  r¸   rB   r¹   Úcreatedrº  rŸ   s         €€r&   r.  zMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_or_createJ  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¼  r0  r½  s      r&   r1  zNcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aget_or_createW  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µ   rg   r3  r  rÀ  s         €€r&   r3  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¼  r5  r½  s      r&   r6  zQcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aupdate_or_createk  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Æ  r8  rW  rH   rj  rš   rK   r   r    r$   rp   r�   rB   rr   r  ræ   rœ   r´  )r#   rh  r  rÆ  Ú
target_idsrý   r¹   Ú	target_ids           r&   Ú_get_target_idszOcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_target_idsr  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,   )rW  rß   r/   r³  rw   rm  Ú
difference)r#   rf  rh  rB   rÈ  Úvalss         r&   Ú_get_missing_target_idszWcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_missing_target_ids’  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)rW  rH   Úauto_createdr   r6   Úsupports_ignore_conflictsrU  rf  r   r¬  Úhas_listeners)r#   rB   rf  Ú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)Nrn   z%s_idr   T)Úignore_conflictsFr  Úpre_addr§  Úpost_addr,   )Údictr   rÊ  r   rž   rW  r$   rÕ  rß   r/   Úbulk_createrm  rÎ  r	   r  r   r¬  r­  rU  rK   )r#   rf  rh  r�  r  rÈ  rB   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   rn   Fr  Ú
pre_remover§  rË   Úpost_remover,   )r8  rš   rK   rý   rr   r  r   rž   rW  r$   r	   r  r   r¬  r­  rU  rµ   rj   rq  r/   rw   r   rv  rß   r®  )r#   rf  rh  r  r:  r¹   rµ  rB   Útarget_model_qsÚold_valsrs  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+   rU   rï   rN  rv  r  r{  r  rj   r…   r\  r–  r˜  r›  r  rO  r!  r;  r>  rA  rD  r8  rL  r%  r,  r.  r1  r3  r6  rÊ  rÎ  rÕ  rŸ  r¢  rÁ   )rŸ   rº  rÜ   rU  rQ  s   @€€€€r&   rº  r_  ü  sv  ù„ ÷0	õd	9ð $(Ð ò	ò(	Jô	ô	ô	9õ0	ðd 
ñ	-ó 
ð	-õ$	(õ	'ð /3ô 	ð( ˆŒà59ô 	ð
  ˆÔò	Vð "ˆÔò	;ð #ˆÔô	ð4 !ˆÔò	5ð "ˆÔà%*¸Tô 	Kð@ ˆŒà,1ÀDô 	ð
  ˆÔà-1÷ 	ð "ˆÔà48ô 	ð
 #ˆÔà48÷ 		 ð %)ˆÔ!à;?ô 	ð
 &*ˆÔ"à7;÷ 		 ð (,ÐÔ$à>Bô 	ð
 )-ÐÔ%ò	ò@	/ò&	ðD QUôE	÷N/	ð /	r(   rº  rP  )rQ  rÜ   rU  rº  s   ```@r&   rY  rY  ô  s"   û€ ÷@	ñ @	˜Z¬ô @	ðD Ðr(   N),r¨   Úasgiref.syncr   Údjango.core.exceptionsr   Ú	django.dbr   r   r   r   r	   rÇ  r
   r   r   r   Údjango.db.models.expressionsr   Ú%django.db.models.fields.tuple_lookupsr   Ú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   rF   rP   rR   rª   rÄ   rÚ   rÞ   rS  rY  r,   r(   r&   ú<module>rî     s¦   ðñ?õB 'å -÷õ ÷ 9Ó 8Ý 1Ý 9Ý 0ß AÝ +Ý :ß @Ý 3ô6Ð"3ô 6òò0	$÷_<ñ _<ôD1@Ð :ô 1@÷h@@ñ @@÷F6
ñ 6
òrlô^	,
Ð5ô ,
ó^J	r(   