Ë
    ¹ûàg ã                   óH  — 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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)ÚManagerÚ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      úi/var/www/skyplay_api_hub/venv/lib/python3.12/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Údbr6   r7   ÚexprÚ_r0   Úwindows              r%   Ú_filter_prefetch_querysetrD   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%   rL   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   rO   rP   Ú_base_managerÚ
db_managerÚall©r"   rZ   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                 ób  — |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                  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#   ú%s__inTFr+   )ÚlenÚ
ValueErrorr_   Ú
_add_hintsr   Úget_foreign_related_valueÚget_local_related_valueÚforeign_related_fieldsrO   ÚhiddenrS   Úrelated_query_namer;   r2   Úclear_orderingÚmultipleÚset_cached_valueÚ
cache_name)r"   r>   Ú	querysetsr<   Úrel_obj_attrÚinstance_attrÚinstÚinstances_dictÚrelated_fieldrO   r2   Úrel_objr#   s                r%   rg   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×.Ñ.ˆð ×Ò¤# d§j¡j×&GÑ&GÓ"HÈAÒ"MàØ×$Ñ$ñ%ØJSÖ&TÀ$¡}°TÓ':¸1Ó'=Ò&Tð‰Eð
  §
¡
× =Ñ =Ó ?Ñ?ÀÐKˆEØ"�8—?‘?Ñ+ UÑ+ˆð 	�‰×%Ñ%Ô'ð ×$Ò$Ø#ò A�Ø)©,°wÓ*?Ñ@�Ø×-Ñ-¨g°xÕ@ðAð ØØØØ�J‰J×!Ñ!Øð
ð 	
ùò9 Kùò 'Us   Á8F'Ã9F,c                 óz   — | j                  |¬«      }|j                  | j                  j                  |«      «      S ©Nro   )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 rM   )r   Úget_cached_valueÚKeyErrorru   Ú_metaÚget_ancestor_linkrP   r   rˆ   rO   rz   r{   ÚnullrL   r(   rS   )r"   r#   Úclsrƒ   Ú	has_valueÚancestor_linkÚancestorrO   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 "ú": "rM   ú" must be a "ú" instance.ro   úGCannot assign "%r": the current database router prevents this relation.rŠ   )Ú
isinstancer   rO   rP   r�   Úconcrete_modelrr   Úobject_namerS   Ú_stater@   r   Údb_for_writeÚ	__class__Úallow_relationr�   r{   Úrelated_fieldsÚsetattrr   Úgetattrrz   )r"   r#   r$   rO   Ú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   rP   rS   rT   s    r%   Ú
__reduce__z%ForwardManyToOneDescriptor.__reduce__]  s&   € ô ˜Ÿ™×)Ñ)¨4¯:©:¯?©?Ð;Ð;Ð;r'   r   )r(   r)   r*   Ú__doc__rI   r   rL   r   r_   ri   rg   rˆ   r–   r&   r«   r+   r'   r%   rF   rF   v   sO   „ ñ
ò$ð ñ
ó ð
ò".òYó	Bó.
ò`Gó
1òfJ;óX<r'   rF   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   rO   Úparent_linkÚget_deferred_fieldsrP   r�   Úconcrete_fieldsr   Úanyr¦   r    Úaddingr@   Úsuperrˆ   )	r"   r#   ÚdeferredÚ	rel_modelr   ÚkwargsÚobjr²   r¢   s	          @€r%   rˆ   z$ForwardOneToOneDescriptor.get_objectr  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_keyrO   r´   r�   r¶   rP   Ú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                   ó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%   rI   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 rK   )	rN   r§   Úrelated_modelrQ   rR   rP   r)   r*   rS   rT   s    r%   rL   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   rV   s     r%   r   z#ReverseOneToOneDescriptor.is_cached¼  s   € Ø�|‰|×%Ñ% hÓ/Ð/r'   c                 ó~   — | j                   j                  j                  j                  |¬«      j	                  «       S rX   )r§   rË   r[   r\   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 ra   rd   rh   s      r%   ri   z/ReverseOneToOneDescriptor.get_prefetch_querysetÂ  rj   r'   c                 ó�  — |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 rl   )rq   rr   r_   rs   r§   r   ru   rt   rS   r;   r2   ry   r{   r|   )r"   r>   r}   r<   r~   r   r€   r�   r2   rƒ   r#   s              r%   rg   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                 óv  — |€| S 	 | j                   j                  |«      }|€?| 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``.
        Nro   rŒ   rM   r+   )r§   r�   rŽ   rÀ   r   Úget_forward_related_filterr_   r   r{   rË   rQ   rL   r¢   r(   Ú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à×%Ñ%×.Ó.°·±×0JÓ0JðLóð ð
 ˆ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$ Á$?D8Â$"C-Ã'D8Ã-%DÄD8ÄDÄD8Ä7D8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™   rM   rš   r›   ro   rœ   c              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr   )r¦   r   )r±   r   r#   s     €r%   r³   z4ReverseOneToOneDescriptor.__set__.<locals>.<genexpr>P  s$   øè ø€ ò àô ˜ %§-¡-×0ñùs   ƒ #)r§   r�   r    r¥   r   rS   r�   rË   rr   r�   rŸ   rÒ   r    r@   r   r¡   r¢   r£   Útuplerv   Ú	enumerateÚlocal_related_fieldsr   r{   )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×.Ó.Ø—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§   rP   rS   rT   s    r%   r«   z$ReverseOneToOneDescriptor.__reduce__a  s&   € ä˜Ÿ™×+Ñ+¨T¯\©\×->Ñ->Ð?Ð?Ð?r'   r   )r(   r)   r*   r¬   rI   r   rL   r   r_   ri   rg   r–   r&   r«   r+   r'   r%   rÈ   rÈ   ™  sK   „ ñ
òð
 ñ
ó ð
ò 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%   rI   z#ReverseManyToOneDescriptor.__init__v  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_clsz  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                 ó2   — d| j                   j                  fS )Nzreverse side of a related set)rß   rÒ   rT   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¬   rI   r   rä   r–   rç   r&   r+   r'   r%   rÝ   rÝ   f  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¹   rI   r#   rË   rP   r   rS   Úcore_filters)r"   r#   r¢   rß   s     €€r%   rI   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¦   rP   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   rv   r¦   r#   r   rr   )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.
            ro   TÚ éÿÿÿÿr+   )r1   r   Údb_for_readrP   r#   r   r4   Ú!interprets_empty_strings_as_nullsrs   r.   Ú_defer_next_filterr;   rî   r   rv   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   rO   r|   rR   rŽ   rT   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                 ó`  •— | 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À   rr   r¢   r(   r	  r   rO   r|   rR   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×+Ñ+×6Ñ6ñð øô #¤HÐ-ò 9Ü ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ò8ð9ús   Á6A< Á<.B-Â,B-c                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S ra   rd   rh   s      r%   ri   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 )Nrm   rn   r   ro   F)rq   rr   r¹   r_   rs   r.   r1   r   ru   rt   rD   rS   r   r¥   rO   r|   )r"   r>   r}   r<   r~   r   r€   r�   rƒ   r#   r|   r¢   s              €r%   rg   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ð $ò @�Ø—z‘z×+Ñ+¨GÕ4Ø-©l¸7Ó.CÑD�HÜ˜G T§Z¡Z§_¡_°hÕ?ð@ð Ÿ™×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)Nro   c                 óæ   •— t        | ‰j                  «      s/t        d‰j                  j                  j                  ›d| ›�«      ‚t        | ‰j                  j                  ‰j                  «       y )Nú'ú' instance expected, got )	r�   rP   ré   r�   rŸ   r¥   r   rS   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¡   rP   r#   r    r¸   r@   rr   ÚappendrÀ   r[   r.   r;   Úupdater   rS   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.aaddK  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 ©Nro   r+   )rö   r  r#   r   rS   r   r¡   rP   r¹   r\   Úcreate©r"   r¼   r@   ÚRelatedManagerr¢   s      €€r%   r*  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.createP  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.acreateY  s%   è ø€ Ø3œ t§{¡{Ó3Ñ=°fÑ=×=Ð=Ð=úr'  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r)  )
rö   r#   r   rS   r   r¡   rP   r¹   r\   Úget_or_creater+  s      €€r%   r3  zHcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_or_create^  s]   ø€ Ø×ÑÔ Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑKÑUÈfÑUÐUr'   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­wr.  ©r   r3  r0  s     r%   Úaget_or_createzIcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aget_or_createf  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   rS   r   r¡   rP   r¹   r\   Úupdate_or_creater+  s      €€r%   r8  zKcreate_reverse_many_to_one_manager.<locals>.RelatedManager.update_or_createk  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   r8  r0  s     r%   Úaupdate_or_createzLcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aupdate_or_creates  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 rM   r  )rö   r   rt   r#   Úsetr�   rP   ré   r�   rŸ   ru   r!  rÀ   rO   rQ   Ú_clearr;   )r"   r  r  r  Úold_idsr½   s         r%   ÚremovezAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.remove|  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   rF  rE  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)Nro   Fr  )Úupdate_fieldsr+   )r  r   r¡   rP   r#   r.   r  r   rS   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  rF  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)Nro   Fr  r  r  )rö   r×   r   r‘   r   r¡   rP   r#   r	   r  rF  r!  r=  r.   r]   r@  r  )r"   r  r  rF  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  rF  ©r   r=  )r"   r  r  rF  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*   rI   rò   Údo_not_call_in_templatesrö   r  r  r_   ri   rg   r!  Úalters_datar&  r*  r1  r3  r6  r8  r;  r   r‘   r@  rC  rF  rI  r>  r=  rQ  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   ù€ ÷m ˜¤Zô m ð^	 Ð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¹   rI   Úreverse)r"   rß   rZ  r¢   s      €r%   rI   zManyToManyDescriptor.__init__ê  s   ø€ Ü‰Ñ˜Ôàˆ�r'   c                 ó.   — | j                   j                  S r   )rß   ÚthroughrT   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)rZ  )rZ  rß   rË   rP   Ú#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 setrZ  Úforward)rZ  rß   rÒ   r   rS   rT   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¬   rI   Úpropertyr\  r   rä   rç   rÅ   rÆ   s   @r%   rX  rX  Ù  s:   ø„ ñõ ð
 ñ ó ð ð ñ
ó ð
ö
r'   rX  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d„ Zd„ Z	ˆ fd	„Z
d%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:                  €"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¹   rI   r#   rP   r   rx   Úquery_field_namerS   Úprefetch_cache_nameÚm2m_field_nameÚsource_field_nameÚm2m_reverse_field_nameÚtarget_field_nameÚsymmetricalrË   r\  rZ  r�   Ú	get_fieldÚsource_fieldr   rî   Úpk_field_namesr¤   r¦   r   rt   Úrelated_valrr   rÀ   r¢   r(   )r"   r#   r¨   r©   Úcore_filter_keyr¢   rß   rZ  s        €€€r%   rI   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¦   rP   r^  r¢   r#   )r"   rð   rñ   rß   rZ  s      €€r%   rò   zHcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.__call__C  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*  rj  rq  r�   r   Ú_has_filtersrl  rm  )r"   Úremoved_valsÚfiltersÚremoved_vals_filtersÚsymmetrical_filterss        r%   Ú_build_remove_filterszUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._build_remove_filtersL  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ø   ro   Tr+   )rs   r#   r1   r.   rý   Ú_next_is_stickyr;   rî   )r"   r<   s     r%   r  zRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._apply_rel_filters`  s_   € ð ×Ñ¨¯©ÐÔ7Ø�xŠxØ#Ÿ>™>¨$¯(©(Ó3�Ø*.ˆHÔ'Ø4�8×+Ñ+Ó-×4Ñ4ÑI°t×7HÑ7HÑIÐIr'   c                 ót   — 	 | j                   j                  | j                     S # t        t        f$ r Y y w xY wr   )r#   r	  rh  rR   rŽ   rT   s    r%   Úget_prefetch_cachezRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_cachej  s9   € ðØ—}‘}×>Ñ>¸t×?WÑ?WÑXÐXøÜ"¤HÐ-ò Ùðús   ‚"% ¥7¶7c                 óŽ   — 	 | j                   j                  j                  | j                  «       y # t        t
        f$ r Y y w xY wr   )r#   r	  r
  rh  rR   rŽ   rT   s    r%   r  zZcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_prefetched_objectsp  s<   € ðØ—‘×7Ñ7×;Ñ;¸D×<TÑ<TÕUøÜ"¤HÐ-ò Ùðús   ‚/2 ²AÁAc                 ój   •— | j                  «       x}�|S t        ‰| �	  «       }| j                  |«      S r   )r~  r¹   r_   r  )r"   Úcacher<   r¢   s      €r%   r_   zLcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_querysetv  s:   ø€ Ø×0Ñ0Ó2Ð2�Ð?Ø�ä ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ð8r'   c                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S ra   rd   rh   s      r%   ri   zUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_queryset}  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 )Nrm   rn   r   ro   z_prefetch_related_val_%srM   )Ú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×   rv   )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)rq   rr   r¹   r_   rs   r.   r1   rD   r|  rg  r\  r�   rn  rj  rP   Údb_tabler   r@   ÚopsÚ
quote_nameÚextrarÙ   r   Úcolumnrh  )
r"   r>   r}   r<   Ú
join_tableÚqnrŠ  r‹  r�  r¢   s
          @@€r%   rg   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<c                 óä  — | j                   j                  sy t        j                  | j                  | j
                  ¬«      }t        |   j                  j                  sy d| j
                  i}| j                  j                  j                  ||¬«      }| j                  | j
                  j                  i}| j                   j                  rd|d| j                  z  <    |j                  di |¤ŽS )Nro   r#   rY   Fz
%s__isnullr+   )r   Údb_constraintr   rû   r\  r#   r   r4   Úsupports_foreign_keysr[   r\   rj  rÀ   r‘   rl  r;   )r"   r@   rZ   rð   rw  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¯}©}×/?Ñ/?Ð@ˆ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¢   rV  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)Nro   Fr  r¢  )r  r   r¡   r\  r#   r	   r  Ú
_add_itemsrj  rl  rm  )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_itemsrj  rl  ©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   rB  r¨  s     r%   rC  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)Nro   Fr  Ú	pre_clear©ÚsenderÚactionr#   rZ  rP   Úpk_setr.   Ú
post_clear)r   r¡   r\  r#   r	   r  r   Úm2m_changedÚsendrZ  rP   r  rz  r¹   r_   r.   râ   r;   Údelete)r"   r@   rw  r¢   s      €r%   rF  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   rH  rT   s    r%   rI  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aclear%  s    è ø€ Ø2œ t§z¡zÓ2Ó4×4Ð4Ð4ús   ‚' %¡'F)rF  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)Nro   Fr  r¢  T©Úflatr   )r×   r   r¡   r\  r#   r	   r  rF  r!  r=  r.   Úvalues_listr   r   r�   rP   rt   Úget_prep_valuer@  r  )	r"   r  rF  r¢  r@   r?  rN  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  rF  r¢  rP  )r"   r  rF  r¢  s       r%   rQ  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.asetL  s0   è ø€ Ø0œ t§x¡xÓ0Ø Ð9Iô÷ ð ð úrR  c                óÔ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž}| j                  ||¬«       |S ©Nro   r¡  r+   )r   r¡   r#   r¢   r¹   r\   r*  r!  )r"   r¢  r¼   r@   Únew_objÚManyRelatedManagerr¢   s        €€r%   r*  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.createS  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%   r1  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¹   r\   r3  r!  ©r"   r¢  r¼   r@   r½   Úcreatedr¿  r¢   s         €€r%   r3  zMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_or_createb  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Á  r5  rÂ  s      r%   r6  zNcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aget_or_createo  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¹   r\   r8  r!  rÅ  s         €€r%   r8  zPcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.update_or_createv  so   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜ Ø" D§O¡O°BÓ$7ñàñ)à!'ñ)‰LˆC�ñ
 Ø—‘˜Ð/?�Ô@Ø˜�<Ðr'   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­wrÁ  r:  rÂ  s      r%   r;  zQcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aupdate_or_createƒ  s:   è ø€ Ø=œ t×'<Ñ'<Ó=ñ Ø!1ðØ5;ñ÷ ð ð úrÃ  c           
      ó¦  — ddl m} t        «       }| j                  j                  j                  |«      }|D �]  }t        || j                  «      r¡t        j                  || j                  «      sGt        d|›d| j                  j                  j                  ›d|j                  j                  ›d�«      ‚|j                  |«      d   }|€t        d|›d|›d�«      ‚|j                  |«       Œ»t        ||«      r/t!        d	| j                  j                  j"                  ›d
|›�«      ‚|j                  |j%                  |«      «       �Œ |S )z[
            Return the set of ids of `objs` that the target field references.
            r   )ÚModelzCannot add "z": instance is on database "z", value is on database "rô   z": the value for field "z	" is Noner  r  )Údjango.db.modelsrË  r=  r\  r�   rn  r�   rP   r   r£   r#   rr   r    r@   rt   r!  ré   rŸ   r¹  )r"   rl  r  rË  Ú
target_idsr   r½   Ú	target_ids           r%   Ú_get_target_idszOcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_target_idsŠ  s%  € õ /ä›ˆJØŸ<™<×-Ñ-×7Ñ7Ð8IÓJˆLØó E�Ü˜c 4§:¡:Ô.Ü!×0Ñ0°°d·m±mÔDÝ(ò  # D§M¡M×$8Ñ$8×$;Ó$;¸S¿Z¹Z¿]»]ðLóð ð
 !-× FÑ FÀsÓ KÈAÑ N�IØ Ð(Ý(â"Ò$5ð7óð ð —N‘N 9Õ-Ü  UÔ+Ý#àŸ:™:×+Ñ+×7Ó7¹ð>óð ð
 —N‘N <×#>Ñ#>¸sÓ#CÖDð+Eð, Ðr'   c                 óØ   —  | j                   j                  j                  |«      j                  |d¬«      j                  di || j
                  d   d|z  |i¤Ž}|j                  |«      S )z{
            Return the subset of ids of `objs` that aren't already assigned to
            this relationship.
            Tr¶  r   rp   r+   )r\  râ   r.   r¸  r;   rq  Ú
difference)r"   rj  rl  r@   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)r\  r�   Úauto_createdr   r4   Úsupports_ignore_conflictsrZ  rj  r   r±  Úhas_listeners)r"   r@   rj  Ú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)Nro   z%s_idr   T)Úignore_conflictsFr  Úpre_addr¬  Úpost_addr+   )Údictr   rÏ  r   r¡   r\  r#   rÚ  râ   r.   Úbulk_createrq  rÓ  r	   r  r   r±  r²  rZ  rP   )r"   rj  rl  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   ro   Fr  Ú
pre_remover¬  rp   Úpost_remover+   )r=  r�   rP   r   rt   r!  r   r¡   r\  r#   r	   r  r   r±  r²  rZ  r¹   r_   ru  r.   r;   r   rz  râ   r³  )r"   rj  rl  r  r?  r½   rº  r@   Útarget_model_qsÚold_valsrw  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*   rI   rò   rS  rz  r  r~  r  r_   ri   rg   ra  r›  r�  r   r!  rT  r&  r@  rC  rF  rI  r=  rQ  r*  r1  r3  r6  r8  r;  rÏ  rÓ  rÚ  r¤  r§  rÅ   )r¢   r¿  rß   rZ  rV  s   @€€€€r%   r¿  rd    s|  ù„ ÷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¿  rU  )rV  rß   rZ  r¿  s   ```@r%   r^  r^    s"   û€ ÷D	ñ D	˜Z¬ô D	ðL Ðr'   )*r¬   re   Úasgiref.syncr   Údjango.core.exceptionsr   Ú	django.dbr   r   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   rD   rF   r®   rÈ   rÝ   rá   rX  r^  r+   r'   r%   ú<module>rò     s¡   ðñ?óB å &å -÷õ ÷ 9Ó 8Ý 0ß AÝ +Ý :ß @Ý =Ý 3ô6Ð"3ô 6ò&÷*m<ñ m<ô`0@Ð :ô 0@÷fJ@ñ J@÷Z6
ñ 6
òrwôt	,
Ð5ô ,
ó^N	r'   