
     h                       d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZmZmZ d d
lmZ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*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZK d dlLmMZN  G d d          ZO eO            ZPd ZQd ZR G d deS          ZT G d  d!          ZU G d" d#          ZV G d$ d%eCeT&          ZWd,d'ZXd( ZYd) ZZd* Z[d+e[_\        dS )-    N)partialmethod)chain)sync_to_async)apps)settings)checks)NON_FIELD_ERRORSFieldDoesNotExist
FieldErrorMultipleObjectsReturnedObjectDoesNotExistValidationError)DJANGO_VERSION_PICKLE_KEYDatabaseError
connectionconnectionsroutertransaction)NOT_PROVIDEDExpressionWrapperIntegerFieldMaxValue
LOOKUP_SEP)CheckConstraintUniqueConstraint)CASCADE	Collector)RawSQL)ForeignObjectRelOneToOneFieldlazy_related_operationresolve_relation)Coalesce)Manager)Options)FQ)class_prepared	post_init	post_savepre_initpre_save)
AltersDatamake_model_tuple)	force_str)make_hashable)capfirstget_text_list)gettext_lazyc                       e Zd Zd Zd ZdS )Deferredc                     dS Nz<Deferred field> selfs    T/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/db/models/base.py__repr__zDeferred.__repr__;       !!    c                     dS r9   r:   r;   s    r=   __str__zDeferred.__str__>   r?   r@   N)__name__
__module____qualname__r>   rB   r:   r@   r=   r7   r7   :   s2        " " "" " " " "r@   r7   c                 >    t          | |||j        d| d          S )z
    Create exception subclass. Used by ModelBase below.

    The exception is created in a way that allows it to be pickled, assuming
    that the returned exception class will be added as an attribute to the
    'attached_to' class.
    .)rD   rE   )typerE   )namebasesmoduleattached_tos       r=   subclass_exceptionrM   E   s<      '2'?'?'?F	
 	
  r@   c                 L    t          j        |            ot          | d          S )Ncontribute_to_class)inspectisclasshasattr)values    r=   _has_contribute_to_classrT   W   s%    u%%%O'%9N*O*OOr@   c                   Z     e Zd ZdZ fdZd Zd Zed             Zed             Z	 xZ
S )	ModelBasezMetaclass for all models.c                    t                      j        }d |D             }|s || |||          S |                    d          }d|i}|                    dd           }	|	|	|d<   |                    dd           }
i }|                                D ]\  }}t	          |          r|||<   |||<     || |||fi |}t          |
dd          }|
pt          |dd           }t          |dd           }d }t          j        |          }t          |dd           "||st          d	|d
|d          n|j	        }|
                    dt          ||                     |s|
                    dt          dt          d |D                       pt          f||                     |
                    dt          dt          d |D                       pt          f||                     |rI|j        sBt#          |d          s|j        |j        _        t#          |d          s|j        |j        _        |j        j        }|r#|r!|j        rt/          |d|j        d          |                                D ]\  }}|
                    ||           t1          |j        j        |j        j        |j        j                  }d |D             }|rd }d |D             D ]\}|j        j        r|j        j        rt/          d|z            -||}2|j        j        |j        j        urt/          d|z            ]|t/          d|z            |j                            |           |j        j        |j        _        n||j        _        i }t?          |g|z             D ]}t#          |d          s||k    r|j        j        s&|j        j        D ]O}tA          |tB                    r8|j"        j#        r,tI          ||j"        j%                  }||tM          |          <   PtO                      }|(                                D ]}||vst#          |d          s|)                    |j*                   2|j        j        |j        j        z   }|j        j        s|D ]H}|j+        |v r#tY          d|j+        d|d|j-        d
          |.                    |j+                   I|j        j        }tM          |          }||v r	||         }nu|sqd|j        j/        z  }tC          |t`          |dd          }||v rtY          d |d!|d"|j-        d#          t#          ||          s|
                    ||           nd }||j        j1        |<   n|j        j1        2                                } |D ]}}|j+        |vrr|j+        |j*        vrd|j+        |vr[te          j3        |          }!|
                    |j+        |!           |j4        r%|                                 D ]\  }}"||"k    r|!| |<   ~|j        j1        )                    |            |j        j        D ]}}|j+        |v r0|j        j        s#tY          d|j+        d|d|j-        d
          ;te          j3        |          }|j        j        sd|_5        |
                    |j+        |           ~d$ |j        j6        D             |j        _6        |rd|
_        |
|_7        |S |8                                 |j        j        9                    |j        j:        |           |S )%Nc                 <    g | ]}t          |t                    |S r:   )
isinstancerV   ).0bs     r=   
<listcomp>z%ModelBase.__new__.<locals>.<listcomp>d   s'    @@@z!Y'?'?@1@@@r@   rD   __classcell__MetaabstractF_meta	app_labelzModel class rG   zU doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.DoesNotExistc              3   \   K   | ]'}t          |d           |j        j        |j        V  (dS r`   N)rR   r`   r_   rb   rZ   xs     r=   	<genexpr>z$ModelBase.__new__.<locals>.<genexpr>   sW        "1g.. 89w7G     r@   )rL   r   c              3   \   K   | ]'}t          |d           |j        j        |j        V  (dS rd   )rR   r`   r_   r   re   s     r=   rg   z$ModelBase.__new__.<locals>.<genexpr>   sX        "1g.. 89w7G1     r@   orderingget_latest_byz! cannot proxy the swapped model ''.c                     h | ]	}|j         
S r:   rI   rZ   fs     r=   	<setcomp>z$ModelBase.__new__.<locals>.<setcomp>   s    222!qv222r@   c                 2    g | ]}t          |d           |S )r`   )rR   )rZ   klss     r=   r\   z%ModelBase.__new__.<locals>.<listcomp>   s'    KKK3WS'5J5JK3KKKr@   zOAbstract base class containing model fields not permitted for proxy model '%s'.zAProxy model '%s' has more than one non-abstract model base class.z6Proxy model '%s' has no non-abstract model base class.zLocal field z
 in class z5 clashes with field of the same name from base class z%s_ptrT)	on_deleterI   auto_createdparent_linkzAuto-generated field 'z' in class z for parent_link to base class z. clashes with declared field of the same name.c                 6    g | ]}t          j        |          S r:   )copydeepcopy)rZ   idxs     r=   r\   z%ModelBase.__new__.<locals>.<listcomp>a  s/     #
 #
 #
#&DM##
 #
 #
r@   );super__new__popitemsrT   getattrr   get_containing_app_configRuntimeErrorlabeladd_to_classr'   rM   tupler   r   r_   rR   ri   r`   rj   proxyswapped	TypeErrorr   local_fieldslocal_many_to_manyprivate_fieldsfieldsconcrete_modelsetup_proxyreversedrY   r"   remote_fieldru   r$   modelr0   setmroupdate__dict__rI   r   rC   add
model_namer   parentsrw   rx   
one_to_onemti_inheritedindexesr^   _prepareregister_modelra   )$clsrI   rJ   attrskwargs	super_newr   rK   	new_attrs	classcell	attr_metacontributable_attrsobj_nameobj	new_classr_   meta	base_metara   
app_configis_proxy
new_fieldsfield_namesbaseparentparent_linksfieldrelatedinherited_attributesparent_fieldsbase_key	attr_namebase_parents	new_fieldru   	__class__s$                                      r=   r{   zModelBase.__new___   sg	   GGO	 A@e@@@ 	69S$u555 <((!6*	IIot44	 )2Io&IIfd++	 !"[[]] 	* 	*MHc',, *03#H--&)	(##Ic4	DDVDD	9j%88<GIvt<<Iw55		 3F;;
4d++3! &, .4VVTTT;   ',	wi(@(@AAA $	L""""  !(     -
 +, )
 
 
   "")"-  !(     2
 01 )
 
 
    L!3 L tZ00 B/8/AIO,t_55 L4=4KIO1?(  		 	i&7 	=ATT9CTCTCTU   16688 	2 	2MHc""8S1111 O(O.O*
 


 32z222  	7DKK'KKK  <( !|* !'>@DE  
 !<!DD\0
8QQQ#!#'(   R
 |LtS   O''----1Z-FIO**-6IO* i[7233 	D 	DD4)) y  )< 0 D De]33 D8J8V D.y%:L:RSSG>CL!1'!:!:;D  #uuMMOO c	> c	>D7""'$*@*@" %++DM::: J3dj6SSM:& G= + = =Ez[00(j !&


 $ $   -00<<<< z0+D11|++(2EE! ! (4:+@ @I)")&%)$(  E !K//(j
 !*		 $ $	 	 	 #9i88 A!..y%@@@ E05	'--#z16688 + E EE
+55!Ji.@@@!J.BBB$(M%$8$8	!..uz9EEE !+ E7C7I7I7K7K E E 3#(K#7#7;DL$8 '..|<<< 2 > >:,,:. 	(j !&


 $ $  	 !M%00E:. 3.2+**5:u====!>(#
 #
*3/*A#
 #
 #
	  	 "'I&IN++IO,EyQQQr@   c                 v    t          |          r|                    | |           d S t          | ||           d S N)rT   rO   setattr)r   rI   rS   s      r=   r   zModelBase.add_to_classq  sF    #E** 	&%%c400000Cu%%%%%r@   c                 T   | j         }|                    |            |j        rkt          | j        d          | _        t          | j        d          | _        |j        j        r)|j        }|j        j        }t          t          | |           | j        4| j        dd                    d |j        D                       d| _        t          j                            |j                  }|rt'          | d	|           |j        s`t+          d
 |j        D                       rt-          d| j        z            t/                      }d|_        |                     d|           | j         j        D ]}|j        s|                    |            t;          j        |            dS )z7Create some methods once self._meta has been populated.T)is_nextFN(, c              3   $   K   | ]}|j         V  d S r   rm   rn   s     r=   rg   z%ModelBase._prepare.<locals>.<genexpr>  s$      66Q!&666666r@   )get_absolute_urlc              3   ,   K   | ]}|j         d k    V  dS )objectsNrm   rn   s     r=   rg   z%ModelBase._prepare.<locals>.<genexpr>  s)      <<116Y&<<<<<<r@   zOModel %s must specify a custom Manager, because it has a field named 'objects'.r   )sender)r`   r   order_with_respect_tor   _get_next_or_previous_in_orderget_next_in_orderget_previous_in_orderr   r   r#   make_foreign_order_accessors__doc__rC   joinr   r   ABSOLUTE_URL_OVERRIDESgetlabel_lowerr   managersany
ValueErrorr&   rt   r   r   rI   set_name_with_modelr*   send)r   optswrtremoteget_absolute_url_overridemanagerindexs          r=   r   zModelBase._preparew  s   yc% 	R$12D% % %C! )62E) ) )C% )6 R0)/&'CS&QQQ ;		66$+6666666CK
 %-$C$G$G%
 %
! % 	HC+-FGGG} 	1<<<<<<<  -/2|<   iiG#'G Y000
 Y& 	/ 	/E: /))#...3''''''r@   c                     | j         j        S r   )r`   base_managerr   s    r=   _base_managerzModelBase._base_manager  s    y%%r@   c                     | j         j        S r   )r`   default_managerr   s    r=   _default_managerzModelBase._default_manager  s    y((r@   )rC   rD   rE   r   r{   r   r   propertyr   r   r]   r   s   @r=   rV   rV   \   s        ##P P P P Pd& & &5( 5( 5(n & & X& ) ) X) ) ) ) )r@   rV   c                       e Zd ZddZdS )ModelStateFieldsCacheDescriptorNc                      || S i x}|_         |S r   )fields_cache)r<   instancer   ress       r=   __get__z'ModelStateFieldsCacheDescriptor.__get__  s    K&((h#
r@   r   )rC   rD   rE   r   r:   r@   r=   r   r     s(             r@   r   c                   .    e Zd ZdZdZdZ e            ZdS )
ModelStatezStore model instance state.NT)rC   rD   rE   r   dbaddingr   r   r:   r@   r=   r   r     s.        %%	B
 F2244LLLr@   r   c                       e Zd Z fdZed             Zd Zd Zd Zd Z	d Z
d Zd	 ZdCdZd Z eee          Zd ZdDdZdDdZd Z	 dEdZde_        	 dEdZde_        	 	 	 	 	 dFdZde_        d Z	 	 	 	 	 	 dGdZd Zd ZdCdZdHdZde_        dHdZde_        d Z d Z!d Z"dCd Z#d! Z$d" Z%dCd#Z&dHd$Z'd% Z(d& Z)d' Z*d( Z+d) Z,dCd*Z-dId+Z.dCd,Z/ed-             Z0ed.             Z1ed/             Z2ed0             Z3ed1             Z4ed2             Z5ed3             Z6ed4             Z7ed5             Z8ed6             Z9ed7             Z:ed8             Z;ed9             Z<ed:             Z=ed;             Z>ed<             Z?ed=             Z@ed>             ZAed?             ZBed@             ZCedA             ZDedB             ZE xZFS )JModelc                    | j         }| j        }t          }t          }|j        rt          d          t          j        |||           t                      | _	        t          |          t          |j                  k    rt          d          |sBt          |j                  }t          ||          D ]\  }}	||u r
 || |	j        |           nt          |j                  }t          ||          D ]b\  }}	||u r
 || |	j        |           |                    |	j        t&                    t&          urt          |j         d|	j         d          c|D ]$}	d}
|	j        |vr|	j        |rt-          |	j        t0                    rn	 |                    |	j                  }d}
n# t2          $ rC 	 |                    |	j                  }n$# t2          $ r |	                                }Y nw xY wY nXw xY w	 |                    |	j                  }n8# t2          $ r |	                                }Y nw xY w|	                                }|
r||ur || |	j        |           ||ur || |	j        |           &|r|j        }d}|                                D ]X\  }}||v r||ur || ||           	 |                    |           ||ur || ||           C# t<          $ r	 ||fz  }Y Uw xY w|r8d	                    d
 |D                       }t          |j          d|           tC                      "                                 tG          j        ||            d S )Nz'Abstract models cannot be instantiated.)r   argsr   z'Number of args exceeds number of fieldsz8() got both positional and keyword arguments for field 'rk   FTr:   r   c              3   4   K   | ]}t          |          V  d S r   )repr)rZ   ns     r=   rg   z!Model.__init__.<locals>.<genexpr>6  s(      ,I,IT!WW,I,I,I,I,I,Ir@   z%() got unexpected keyword arguments: )r   r   )$r   r`   r   DEFERREDr_   r   r-   r   r   _statelenconcrete_fields
IndexErroriterzipattnamer   r|   rI   r   rE   columnrY   r   r!   KeyErrorget_default_property_namesr}   	get_fieldr
   r   rC   rz   __init__r+   )r<   r   r   r   r   _setattr	_DEFERREDfields_itervalr   is_related_objectrel_objproperty_names
unexpectedproprS   unexpected_namesr   s                    r=   r  zModel.__init__  sg   nz	= 	GEFFFStF;;;; !ll t99s4/0000FGGG 	t344K
 "$44 3 3
U)##u}c22223 t{++K!$44  
U)##u}c222::ej,77|KK#+ G G8=
G G G   L ! &	7 &	7E %}F**u|/C *e02BCC 2	6"(**UZ"8"8,0))# 6 6 66"(**U]";";CC' 6 6 6"'"3"3"5"5CCC6	62$jj77# 2 2 2
 $//112 ''))  	7
 )++HT5:w777i''HT5=#666 	!1NJ%||~~ 8 8e >))I-- tU3338t,,, !	11$HT4777	 - . . ."tg-


.
  #'99,I,Ij,I,I,I#I#I | * *'* *   	cD111111sZ   F//
G<:GG<G63G<5G66G<;G< HH<;H< K''K:9K:c                     t          |          t          | j        j                  k    r(t          |          fd| j        j        D             } | | }d|j        _        ||j        _        |S )Nc                 N    g | ]!}|j         v rt                    nt          "S r:   )r   nextr   )rZ   ro   r   values_iters     r=   r\   z!Model.from_db.<locals>.<listcomp>B  sB        &'Y+%=%=[!!!8  r@   F)r   r`   r   r   r   r   r   )r   r   r   valuesnewr  s     `  @r=   from_dbzModel.from_db>  s    v;;#ci78888v,,K    2  F c6l!


r@   c                 (    d| j         j        d| dS )N<z: >)r   rC   r;   s    r=   r>   zModel.__repr__K  s     !^444ddd;;r@   c                 0    | j         j        d| j        dS )Nz	 object (r   )r   rC   pkr;   s    r=   rB   zModel.__str__N  s    #'>#:#:#:DGGGDDr@   c                     t          |t                    st          S | j        j        |j        j        k    rdS | j        }|| |u S ||j        k    S NF)rY   r   NotImplementedr`   r   r  )r<   othermy_pks      r=   __eq__zModel.__eq__Q  sW    %'' 	"!!:$(BBB5=5=   r@   c                 V    | j         t          d          t          | j                   S )Nz8Model instances without primary key value are unhashable)r  r   hashr;   s    r=   __hash__zModel.__hash__[  s&    7?VWWWDG}}r@   c                     |                                  }t          j        |t          <   | j        j        | j        j        f}t          |f|fS r   )__getstate__django__version__r   r`   ra   object_namemodel_unpickle)r<   dataclass_ids      r=   
__reduce__zModel.__reduce__`  sD      ""*0*<&':')??{D00r@   c                    | j                                         }t          j        |d                   |d<   |d         j                                        |d         _        g }|                                D ]>\  }}t	          |t
                    r$|                    |t          |          f           ?|r"||d<   |D ]\  }}|                    |           |S )z0Hook to allow choosing the attributes to pickle.r   _memoryview_attrs)	r   rw   r   r}   rY   
memoryviewappendbytesr|   )r<   stater-  attrrS   s        r=   r$  zModel.__getstate__f  s    ""$$)E(O44h',X'C'H'H'J'Jh$  ;;== 	? 	?KD%%,, ?!(($e)=>>> 	 ):E%&0    e		$r@   c                    |                     t                    }|r>|t          j        k    r-t	          j        d|dt          j        dt          d           nt	          j        dt          d           d|v r-|                    d          D ]\  }}t          |          ||<   | j	        
                    |           d S )Nz(Pickled model instance's Django version z$ does not match the current version rG      )
stacklevelz9Pickled model instance's Django version is not specified.r-  )r   r   r%  r&  warningswarnRuntimeWarningr|   r.  r   r   )r<   r1  pickled_versionr2  rS   s        r=   __setstate__zModel.__setstate__w  s    ))$=>> 	&"444 '(:(:(:< #     MK   
 %''$yy)<== 0 0e(//dU#####r@   Nc                 H    |p| j         }t          | |j        j                  S r   )r`   r~   r  r   )r<   r   s     r=   _get_pk_valzModel._get_pk_val  s"    !tztTW_---r@   c                     | j         j                                        D ]/}|r+|| j         j        k    rt	          | |j        j        |           0t	          | | j         j        j        |          S r   )r`   r   r  r  r   target_fieldr   )r<   rS   ru   s      r=   _set_pk_valzModel._set_pk_val  sm    :-4466 	G 	GK G{djm;;k6>FFFtTZ]2E:::r@   c                 4      fd j         j        D             S )zU
        Return a set containing names of deferred fields for this instance.
        c                 :    h | ]}|j         j        v|j         S r:   )r   r   )rZ   ro   r<   s     r=   rp   z,Model.get_deferred_fields.<locals>.<setcomp>  s4     
 
 
y-- I---r@   )r`   r   r;   s   `r=   get_deferred_fieldszModel.get_deferred_fields  s3    
 
 
 
Z/
 
 
 	
r@   c           	      `  	 |i | _         nft          | dd          }|D ]}||v r||= |                    |           |sdS t          d |D                       rt	          dt
          z            d| i}| j        j                            ||          	                    | j
                  }|                                 	|t          |          } |j        | }n$	r"	fd	| j        j        D             } |j        | }|                                }|                                }| j        j        D ]f}|j        |v rt%          | |j        t          ||j                             |j        r*|                    |           r|                    |            g| j        j        D ],}|                    |           r|                    |            -| j        j        D ]3}|j        r*|                    |           r|                    |            4|j        j        | j        _        dS )
aU  
        Reload field values from the database.

        By default, the reloading happens from the database this instance was
        loaded from, or by the read router if this instance wasn't loaded from
        any database. The using parameter will override the default.

        Fields can be used to specify which fields to reload. The fields
        should be an iterable of field attnames. If fields is None, then
        all non-deferred fields are reloaded.

        When accessing deferred fields of an instance, the deferred loading
        of the field will call this method.
        N_prefetched_objects_cacher:   c              3   (   K   | ]}t           |v V  d S r   r   rn   s     r=   rg   z(Model.refresh_from_db.<locals>.<genexpr>  s&      33q:?333333r@   zRFound "%s" in fields argument. Relations and transforms are not allowed in fields.r   )hintsr  c                 0    g | ]}|j         v|j         S r:   )r   )rZ   ro   deferred_fieldss     r=   r\   z)Model.refresh_from_db.<locals>.<listcomp>  s2       9O33 	333r@   )rD  r~   remover   r   r   r   r   
db_managerfilterr  rB  listonlyr`   r   r   r   r   is_relation	is_cacheddelete_cached_valuerelated_objectsr   r   r   )
r<   usingr   prefetched_objects_cacher   rF  db_instance_qsdb_instancenon_loaded_fieldsrI  s
            @r=   refresh_from_dbzModel.refresh_from_db  s    >-/D**'.t5PRT'U'U$ ) )44407MM%((( 33F33333  13=>  
 T"5@@ A 
 

&DG&

 	
 2244&\\F0^0&9NN 	:   3  F
 1^0&9N$((**';;==Z/ 	0 	0E} 111D%-em)L)LMMM  0U__T%:%: 0))$/// Z/ 	0 	0Et$$ 0))$/// Z. 	0 	0E  0U__T%:%: 0))$///$+.r@   c                 P   K    t          | j                  ||           d {V S )N)rS  r   )r   rX  )r<   rS  r   s      r=   arefresh_from_dbzModel.arefresh_from_db  s8      8]4#788uVTTTTTTTTTTr@   c                     	 | j                             |          }n # t          $ r t          | |          cY S w xY wt          | |j                  S )a  
        Return the value of the field name for this instance. If the field is
        a foreign key, return the id value instead of the object. If there's
        no Field object with this name on the model, return the model
        attribute's value.

        Used to serialize a field's value (in the serializer, or form output,
        for example). Normally, you would just access the attribute directly
        and not use this method.
        )r`   r  r
   r~   r   )r<   
field_namer   s      r=   serializable_valuezModel.serializable_value  sa    	-J((44EE  	- 	- 	-4,,,,,	-tU]+++s    ::Fc                    |                      d           |pt          j        | j        |           }|r|s|rt	          d          |                                 }|\|sdS t          |          }| j        j        }|	                    |          }|r%t	          dd
                    |          z            n|s|r|| j        j        k    rtt                      }| j        j        D ]3}|j        s*t!          |d          s|                    |j                   4|	                    |          }	|	rt          |	          }|                     ||||	           dS )
aa  
        Save the current instance. Override this in a subclass if you want to
        control the saving process.

        The 'force_insert' and 'force_update' parameters can be used to insist
        that the "save" must be an SQL insert or update (or equivalent for
        non-SQL backends), respectively. Normally, they should not be set.
        save)operation_namer   z6Cannot force both insert and updating in model saving.Nz_The following fields do not exist in this model, are m2m fields, or are non-concrete fields: %sr   through)rS  force_insertforce_updateupdate_fields) _prepare_related_fields_for_saver   db_for_writer   r   rB  	frozensetr`   _non_pk_concrete_field_names
differencer   r   r   r   r   primary_keyrR   r   r   	save_base)
r<   rc  rd  rS  re  rI  r   non_model_fieldsr   loaded_fieldss
             r=   r_  z
Model.save  s    	--V-DDDK,T^dKKK 	W\ 	W] 	WUVVV2244$ ! %m44M*AK,77DD  =ii 0112    	9/ 	9et{~6M6M%%K3 3 3( 3	1J1J 3OOEM222'22?CCM 9 )- 8 8%%'	 	 	
 	
 	
 	
 	
r@   Tc                 T   K    t          | j                  ||||           d {V S )N)rc  rd  rS  re  )r   r_  )r<   rc  rd  rS  re  s        r=   asavezModel.asave7  sU       .]49--%%'	
 
 
 
 
 
 
 
 
 	
r@   c           	      l   |pt          j        | j        |           }|r|s|rJ ||sJ | j        x}}|j        j        r|j        j        }|j        }|j        st          j        || |||           |j	        rt          j        |d          }	nt          j        |          }	|	5  d}
|s|                     |||          }
|                     |||p|
|||          }ddd           n# 1 swxY w Y   || j        _        d| j        _        |j        st%          j        || | |||           dS dS )av  
        Handle the parts of saving which should be done only once per save,
        yet need to be done in raw saves, too. This includes some sanity
        checks and signal sending.

        The 'raw' argument is telling save_base not to save any parent
        models and not to do any changes to the values before save. This
        is used by fixture loading.
        ra  N)r   r   rawrS  re  F)rS  	savepoint)rS  )r   r   createdre  rr  rS  )r   rg  r   r`   r   r   rt   r.   r   r   r   atomicmark_for_rollback_on_error_save_parents_save_tabler   r   r   r,   )r<   rr  rc  rd  rS  re  r   originr   context_managerparent_insertedupdateds               r=   rl  zModel.save_baseC  s   " K,T^dKKK ElEmEEE$$$$~%f9? 	+)*Cy  	M+    < 	R)0uNNNOO)D5QQQO 	 	#O P"&"4"4S%"O"O&&/ G		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "   	N$+     	 	s   )8C--C14C1c           	      F   |j         }d}|j                                        D ]\  }}|rgt          | |j         j        j                  Ht          | |j                  3t          | |j         j        j        t          | |j                             |                     |||          }|                     ||||          }	|	sd}|rXt          | |j        | 	                    |j                              |
                    |           r|                    |            |S )z3Save all the parents of cls using values from self.FN)r   rS  re  )r   rS  re  rc  T)r`   r   r}   r~   r  r   r   rw  rx  r<  rP  rQ  )
r<   r   rS  re  r   insertedr   r   r{  r|  s
             r=   rw  zModel._save_parents  s<   y!\//11 	4 	4MFE UD&,/"9::BD%-00<flo5wtU]7S7STTT"00%} 1  O &&+,	 '  G    4emT-=-=fl-K-KLLL ??4(( 4--d333r@   c           
          |j         d j        D             }rfd|D             }                               }|5j                                       }t           j        j        |           |du}	|	s|srt          d          d}
s/|s- j        j	        r!j        j
        rj        j
        t          urd}|	ro|sm|j                            |          } fd|D             }p|}                     |||||          }
|r|
st          d          r|
st          d	          |
s*j        rj        }|                               } |j                            |          j        di |                    t)          t+          t-          d
          t/          d          z   t1                                t/          d                              d          _        j        }|	sfd|D             }j        }                     |j        |||          }|r2t9          |d         |          D ]\  }}t           |j        |           |
S )zp
        Do the heavy-lifting involved in saving. Update or insert the data
        for a single table.
        c                      g | ]}|j         	|S r:   rk  rn   s     r=   r\   z%Model._save_table.<locals>.<listcomp>  s    NNNN1NNNr@   c                 8    g | ]}|j         v s	|j        v |S r:   )rI   r   )rZ   ro   re  s     r=   r\   z%Model._save_table.<locals>.<listcomp>  s<       6]**ai=.H.H .H.H.Hr@   Nz5Cannot force an update in save() with no primary key.FTc                 p    g | ]2}|d rt          |j                  n|                    d          f3S r  )r~   r   r.   )rZ   ro   rr  r<   s     r=   r\   z%Model._save_table.<locals>.<listcomp>  sZ        	 14QWT19---!**T5:Q:Q  r@   z&Forced update did not affect any rows.z0Save with update_fields did not affect any rows._order   )output_fieldr   )_order__maxr  c                 &    g | ]}|j         u|S r:   )
auto_field)rZ   ro   r   s     r=   r\   z%Model._save_table.<locals>.<listcomp>  s%    HHHq/G/G!/G/G/Gr@   r:   )r`   local_concrete_fieldsr<  r  get_pk_value_on_saver   r   r   r   r   defaultr   r   rS  
_do_updater   r   get_filter_kwargs_for_objectrL  	aggregater%   r   r   r   r   r  db_returning_fields
_do_insertr   )r<   rr  r   rc  rd  rS  re  non_pkspk_valpk_setr|  base_qsr  forced_updater   filter_argsr   returning_fieldsresultsrS   r   s   ``    `             @r=   rx  zModel._save_table  sD    yNNd8NNN 	      G !!$''>W11$77FD$'/6222t# 	V< 	V= 	VTUUU 	  	  "	  		 
 |33L 	X, 	X'--e44G     !  F *9\Moo} G  NG N#$LMMM XW X#$VWWW 	8)  2#@@FFC%++E22+ +)+ +Y$,- #Ha 8|~~   "!HH	% %    $	%  /F IHHHHVHHH#7oo!5&2BC G  8$'
4D$E$E 8 8LE5D%-7777r@   c                 2   |                     |          }|s|dup|                                S | j        j        rC|sA|                                o,|                    |          dk    p|                                S |                    |          dk    S )z
        Try to update the model. Return True if the model was updated (if an
        update query was done and a matching row was found in the DB).
        rG  Nr   )rL  existsr`   select_on_save_update)r<   r  rS  r  r  re  r  filtereds           r=   r  zModel._do_update  s    
 >>V>,, 	B !,A0A0AA:$ 	] 	!! 	D !!&))A-B1B1B ''!++r@   c                 8    |                     | g||||          S )z
        Do an INSERT. If returning_fields is defined then this method should
        return the newly created data for the model.
        )r   r  rS  rr  )_insert)r<   r   rS  r   r  rr  s         r=   r  zModel._do_insert   s0    
 F-  
 
 	
r@   c                    | j         j        D ]}|r||vr	|j        r|                    |           rt	          | |j        d           }|s>|j        @|j        j        s|j        	                    |           t          |d|j        d          t	          | |j                  |j        v rt          | |j        |           t	          ||j        j                  t	          | |j                  k    r|	                    |            | j         j        D ]o}|r||vr	|j        r_|                    |           rJt!          |d          r:|                    | d           }|r!|j        t          | d|j         d          pd S )NzB() prohibited to prevent data loss due to unsaved related object 'rk   fk_field)r  )r`   r   rO  rP  r~   rI   r  r   multiplerQ  r   r   empty_valuesr   r>  r   rR   get_cached_value)r<   r`  r   r   r   s        r=   rf  z&Model._prepare_related_fields_for_save-  s   
 Z/  	4  	4E %v--   4U__T%:%: 4dEJ55  6> -6 D*>>sCCC$2@..%***N   T5=11U5GGG D%*c222 3 2 :;;w%-@ @   --d333Z. 	 	E %v--!
OOD))
 E:..

 ,,T4,@@ 36>$) B B38:B B B  	 	r@   c                     | j         .t          | j        j        d| j        j         j        d          |pt          j        | j        |           }t          ||           }|	                    | g|           |
                                S )Nz% object can't be deleted because its z attribute is set to None.ra  )rS  ry  )keep_parents)r  r   r`   r'  r   r   rg  r   r   collectdelete)r<   rS  r  	collectors       r=   r  zModel.deletec  s    7?"j444djm6K6K6KM   K,T^dKKKE$777	4&|<<<!!!r@   c                 P   K    t          | j                  ||           d {V S )N)rS  r  )r   r  )r<   rS  r  s      r=   adeletezModel.adeletep  sM      /]4;//%
 
 
 
 
 
 
 
 
 	
r@   c                     t          | |j                  }t          t          |j                            }t          |                    t          |          |          d          S )NT)strings_only)r~   r   dictr2   flatchoicesr1   r   )r<   r   rS   choices_dicts       r=   _get_FIELD_displayzModel._get_FIELD_displayx  s_    em,,M%*;<<==]511599
 
 
 	
r@   c                 |   | j         st          d          |rdnd}|rdnd}t          | |j                  }t	          j        |j        |fd| | j         fgt          j                  }t	          j        ||j         d| |fgt          j                  } | j	        j
                            | j        j                  j        di |                    |                              ||j        d	|z            }	 |d
         S # t           $ r( |                     d| j	        j        j        z            w xY w)Nz8get_next/get_previous cannot be used on unsaved objects.gtlt -pk__)	connector__z%spkr   z!%s matching query does not exist.r:   )r  r   r~   r   r)   createrI   ANDORr   r   rS  r   r   rL  order_byr   rb   r`   r'  )	r<   r   r   r   oporderparamqqss	            r=   _get_next_or_previous_by_FIELDz$Model._get_next_or_previous_by_FIELD  s_   w 	YWXXX&TT$&3em,,Huz5)K2KK+ABaeTTTHaUZ//2//78ADIIIDN+11$+.AA  VAYYXuzz2FUNCC	 		a5L 	 	 	##3dn6J6VV  	s   D	 	2D;c                    d|z  }t          | |          s|rdnd}|rdnd}| j        j        }|                    |           }  | j        j        j        di |j        di d|z   | j        j                            d          j        di | j        j        j	        | j        ii
                    |          d d                                         }t          | ||           t          | |          S )	Nz__%s_order_cacher  r  r  z-_orderz
_order__%sr  r:   )rR   r`   r   r  r   r   rL  r  r  rI   r  r   r   r~   )r<   r   	cachenamer  r  order_fieldr  r   s           r=   r   z$Model._get_next_or_previous_in_order  s,   &0	tY'' 	* *dB '6HHYE*:K%BB4HHK6/6EEEE  %Udn=DDXNNU  #z}147;   %!	%   D)S)))tY'''r@   c                 `     t                      |p j        } fd|j        D             S )Nc           	      t    i | ]4}|j         v|j         t          t          |j                  |          5S r:   )rI   r   r~   r   )rZ   r   excluder<   s     r=   
<dictcomp>z.Model._get_field_value_map.<locals>.<dictcomp>  sJ     
 
 
z(( JgdEM::EBB(((r@   )r   r`   r  )r<   r   r  s   ` `r=   _get_field_value_mapzModel._get_field_value_map  sQ    ?eeG!tz
 
 
 
 
3
 
 
 	
r@   c                     | j         t          d| z            t          | |j                                        j                  S )Nz9Unsaved model instance %r cannot be used in an ORM query.)r  r   r~   r   get_related_fieldr   )r<   r   s     r=   prepare_database_savezModel.prepare_database_save  sG    7?KdR   tU/AACCKLLLr@   c                     dS )aI  
        Hook for doing any extra model-wide validation after clean() has been
        called on every field by self.clean_fields. Any ValidationError raised
        by this method will not be associated with a particular field; it will
        have a special-case association with the field defined by NON_FIELD_ERRORS.
        Nr:   r;   s    r=   cleanzModel.clean  s	     	r@   c                 4   |                      |          \  }}|                     |          }|                     |          }|                                D ].\  }}|                    |g                               |           /|rt          |          dS )zh
        Check unique constraints on the model and raise ValidationError if any
        failed.
        r  N)_get_unique_checks_perform_unique_checks_perform_date_checksr}   
setdefaultextendr   )r<   r  unique_checksdate_checkserrorsdate_errorskvs           r=   validate_uniquezModel.validate_unique  s    
 &*%<%<W%<%M%M"{,,];;//<<%%'' 	/ 	/DAqa$$++A.... 	*!&)))	* 	*r@   c                    t                      g }| j        | j        j        fg}g }|r| j        | j        j        fg}| j                                        D ]^}|j        j        r!|                    ||j        j        f           |r-|j        j        r!|                    ||j        j        f           _|D ]I\  }}|D ]A}	t          fd|	D                       s$|                    |t          |	          f           BJ|rI|D ]F\  }}
|
D ]>}t          fd|j	        D                       s|                    ||j	        f           ?Gg }| j        | j        j
        fg}| j                                        D ]#}|                    ||j        j
        f           $|D ]\  }}|D ]}|j        }|v r|j        r|                    ||ff           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           ||fS )a{  
        Return a list of checks to perform. Since validate_unique() could be
        called from a ModelForm, some fields may have been excluded; we can't
        perform a unique check on a model that is missing fields involved
        in that check. Fields that did not validate should also be excluded,
        but they need to be passed in via the exclude argument.
        Nc              3       K   | ]}|v V  	d S r   r:   rZ   rI   r  s     r=   rg   z+Model._get_unique_checks.<locals>.<genexpr>  s'      ==t47?======r@   c              3       K   | ]}|v V  	d S r   r:   r  s     r=   rg   z+Model._get_unique_checks.<locals>.<genexpr>  s'      MM4twMMMMMMr@   dateyearmonth)r   r   r`   unique_togethertotal_unique_constraintsget_parent_listr/  r   r   r   r   rI   uniqueunique_for_dateunique_for_yearunique_for_month)r<   r  include_meta_constraintsr  unique_togethersconstraintsparent_classmodel_classr  checkmodel_constraints
constraintr  fields_with_classr   ro   rI   s    `               r=   r  zModel._get_unique_checks  sP    ?eeG!^TZ-GHI# 	R NDJ,OPQK J6688 	 	L!1  ''!<#5#EF   ( L,>,W ""!<#5#NO   -= 	F 	F(K( F F====u===== F!((+uU||)DEEEF
 $ 	O2= O O.."3 O OJMMMM:;LMMMMM O%,,k:;L-MNNNO
 
 #ndj.EFG J6688 	V 	VL$$lL4F4S%TUUUU#4 	Y 	YK Y Yv7??8 A!((+w)?@@@$ W):')I)I&&VT1CT'UVVV$ W):')I)I&&VT1CT'UVVV% Y!*<G*K*K&&WdADV'WXXXY k))r@   c                    i }|D ]a\  }}i }|D ]q}| j                             |          }t          | |j                  }||dk    rt          j        j        rK|j        r| j        j	        s_||t          |          <   rt          |          t          |          k    r |j        j        di |}	|                     |j                   }
| j        j	        s|
|	                    |
          }	|	                                r`t          |          dk    r	|d         }nt"          }|                    |g                               |                     ||                     c|S )Nr  rG  r  r   r:   )r`   r  r~   r   r   features!interprets_empty_strings_as_nullsrk  r   r   strr   r   rL  r<  r  r  r	   r  r/  unique_error_message)r<   r  r  r  unique_checklookup_kwargsr\  ro   lookup_valuer  model_class_pkkeys               r=   r  zModel._perform_unique_checks  s   )6 *	 *	%K M* > >
J((44&tQY77' B&&"+M ' = ); 1=c*oo.. <  C$6$6664-4EE}EEB "--k.?@@N;% 3.*DZZ>Z22yy{{ |$$))&q/CC*C!!#r**11--k<HH   r@   c                 "   i }|D ]\  }}}}i }t          | |          }||dk    r(|j        |d|z  <   |j        |d|z  <   |j        |d|z  <   nt          ||          ||d|<   t          | |          ||<    |j        j        di |}	| j        j        s"| j        |		                    | j                  }	|	
                                r>|                    |g                               |                     |||                     
|S )Nr  z%s__dayz	%s__monthz%s__yearr  rG  r:   )r~   dayr  r  r   rL  r   r   r  r  r  r  r/  date_error_message)
r<   r  r  r  lookup_typer   
unique_forr  r  r  s
             r=   r  zModel._perform_date_checksF  sU   ;F 	 	7KeZM 4,,D|f$$8<i*45:>*kJ679=j:566FM+G G***kkBC $+4#7#7M% 4-4EE}EEB ;% ,$'*=ZZ47Z++yy{{ !!%,,33++K
KK   r@   c                    | j         }|                    |          }t          |j        d         d| t	          |j                  ||t	          |j                  |t	          |                    |          j                  d          S )Nr  )r   r   r  r   field_label
date_fielddate_field_labelmessagecodeparams)r`   r  r   error_messagesr3   verbose_name)r<   r  r\  r  r   r   s         r=   r  zModel.date_error_messagee  s    zz**():;"&t'899*#'(:;;($,T^^J-G-G-T$U$U 
 
 
 	
r@   c                    |j         | |t          j                  |d}t          |          dk    rO                    |d                   }t          |j                  |d<   t          |j        d         d|          S fd|D             }t          |t          d                    |d	<   t          t          d
          d|          S )N)r   r  r   r  r  r   r  r  r
  c                 ^    g | ])}t                              |          j                  *S r:   )r3   r  r  )rZ   ro   r   s     r=   r\   z.Model.unique_error_message.<locals>.<listcomp>  s=       =>**788  r@   andfield_labelsz9%(model_name)s with this %(field_labels)s already exists.r  )	r`   r3   r  r   r  r   r  r4   _)r<   r  r  r  r   r  r   s         @r=   r  zModel.unique_error_messagev  s     &"4#455(	
 
 |!!NN<?33E$,U-?$@$@F=!",X6      BN  L &3<5%J%JF>""UVV&   r@   c                     | j         | j        j        fg}| j                                        D ]/}|j        j        r!|                    ||j        j        f           0|S r   )r   r`   r  r  r/  )r<   r  r  s      r=   get_constraintszModel.get_constraints  sj    
(>?@ J6688 	S 	SL!- S""L,2D2P#QRRRr@   c                    |                                  }t          j        | j        |           }i }|D ]\  }}|D ]}	 |                    || ||           # t
          $ r}t          |dd           dk    rMt          |j                  dk    r5|	                    |j        d         g           
                    |           n|                    |          }Y d }~d }~ww xY w|rt          |          d S )Nra  )r  rS  r  r  r  r   )r  r   rg  r   validater   r~   r   r   r  r/  update_error_dict)	r<   r  r  rS  r  r  r  r  es	            r=   validate_constraintszModel.validate_constraints  s3   **,,#DNTBBB.9 	= 	=*K*/ 
= 
=
	=''T7RW'XXXX& = = =6400H<<
 122a77))**;A*>CCJJ1MMMM!"!4!4V!<!<=
=  	*!&)))	* 	*s   A
C#"A7CC#c                 4   i }|t                      }nt          |          }	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w	 |                                  n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rt          |          dS )z
        Call clean_fields(), clean(), validate_unique(), and
        validate_constraints() on the model. Raise a ValidationError for any
        errors that occur.
        Nr  )	r   clean_fieldsr   r  r  r	   r   r  r  )r<   r  r  r  r  r  rI   s          r=   
full_cleanzModel.full_clean  s+    ?eeGG'llG	1g.... 	1 	1 	1((00FFFFFF	1
	1JJLLLL 	1 	1 	1((00FFFFFF	1  	5 & &+++G0C0CKK%%%5$$W$5555" 5 5 5,,V445   	5 & &+++G0C0CKK%%%5))')::::" 5 5 5,,V445  	*!&)))	* 	*s]   ; 
A$AA$(A= =
B&B!!B&C, ,
D6DDE 
F%E??Fc           	      l   |t                      }i }| j        j        D ]}|j        |v rt	          | |j                  }|j        r
||j        v r2	 t          | |j        |	                    ||                      ^# t          $ r}|j        ||j        <   Y d}~|d}~ww xY w|rt          |          dS )z
        Clean all fields and raise a ValidationError containing a dict
        of all validation errors if any occur.
        N)r   r`   r   rI   r~   r   blankr  r   r  r   
error_list)r<   r  r  ro   	raw_valuer  s         r=   r  zModel.clean_fields  s    
 ?eeG" 	. 	.Av    ai00Iw 966.aiD)A)ABBBB" . . .!"qv.  	*!&)))	* 	*s   *A==
B BB c                    g |                                  |                                  | j        di |}| j        j        s|                    d          pg }|g  | j        di ||                                 |                     |          z  }g | 	                                | 
                                |                                 |                                 |                                 R }|                    |           |s'|                    |                                            |g |                                 |                                 |                     |          |                                 |                     |          |                                 |                     |          z  }|S )N	databasesr:   )_check_swappable_check_model_check_managersr`   r   r   _check_fields$_check_m2m_through_same_relationship_check_long_column_names_check_id_field_check_field_name_clashes#_check_model_name_db_lookup_clashes3_check_property_name_related_field_accessor_clashes_check_single_primary_keyr  _check_column_name_clashes_check_index_together_check_unique_together_check_indexes_check_ordering_check_constraints_check_default_pk_check_db_table_comment)r   r   r  r$  clash_errorss        r=   r  zModel.check  s.   
!!##

 !S **6**

 y  	

;//52I "",,V,,99;; --i88 F
$$&&..00 88:: HHJJ	
 ..00 L MM,'''   @c<<>>??? **,,++-- ##I.. $$&&	
 ''	22 &&(( ,,Y77 F r@   c                    | j         j        s| j         j        j        rt	          | j         j        t
                    r| j         j        j        j        spt          j	        d          s\| j         j
        rP| j         j
        j        s?t          j        dt          j         dd| j         j
        j        j         d| d          gS g S )NDEFAULT_AUTO_FIELDzPAuto-created primary key used when not defining a primary key type, by default 'rk   z0Configure the DEFAULT_AUTO_FIELD setting or the zh.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.zmodels.W042hintr   id)r`   r_   r  rt   rY   r"   r   ru   r   is_overriddenr   !_is_default_auto_field_overriddenr   Warningr:  r   rE   r   s    r=   r6  zModel._check_default_pk  s     	"		)	 39<77	 IL-9	 *+?@@	 	$	 I(J	 8 38 8 8O9/9FO O O
 $    	r@   c                    | j         j        sg S g }|D ]q}t          j        ||           st          |         }|j        j        s@d| j         j        v s2|                    t          j
        |j         d| d                     r|S )Nsupports_commentsz8 does not support comments on tables (db_table_comment).zmodels.W046r   r=  )r`   db_table_commentr   allow_migrate_modelr   r  rB  required_db_featuresr/  r   r@  display_name)r   r$  r  r   r   s        r=   r7  zModel._check_db_table_comment?  s    y) 	I 	 	B-b#66 $RJ#5&#)*HHHN%2 6 6 6(	     r@   c                    g }| j         j        r	 t          j        | j         j                   n# t          $ r9 |                    t          j        d| j         j        z  d                     Y nnt          $ rb | j         j        
                    d          \  }}|                    t          j        d| j         j        d|d|dd                     Y nw xY w|S )	z"Check if the swapped model exists.z-'%s' is not of the form 'app_label.app_name'.zmodels.E001r=  rG   'z' references 'z0', which has not been installed, or is abstract.zmodels.E002)r`   r   r   	get_modelr   r/  r   Error	swappableLookupErrorsplit)r   r  ra   r   s       r=   r%  zModel._check_swappableV  s*    9 	sy01111   LG)-.(        	 	 	(+	(9(?(?(D(D%	:LL 9...			:::G )	      	 s   / A C1A(CCc                     g }| j         j        rI| j         j        s| j         j        r1|                    t          j        d| j        z  d                     |S )Nz'Proxy model '%s' contains model fields.zmodels.E017rI  )r`   r   r   r   r/  r   rL  rC   r   r  s     r=   r&  zModel._check_modelq  sj    9? 	y% )E LACLP(     r@   c                 h    g }| j         j        D ]"}|                     |j        di |           #|S )zPerform all manager checks.r:   )r`   r   r  r  )r   r   r  r   s       r=   r'  zModel._check_managers~  sI     y) 	3 	3GMM-'-11&112222r@   c                     g }| j         j        D ]"}|                     |j        di |           #| j         j        D ]$}|                     |j        dd| i|           %|S )zPerform all field checks.
from_modelr:   )r`   r   r  r  r   )r   r   r  r   s       r=   r(  zModel._check_fields  s     Y+ 	1 	1EMM+%+////0000Y1 	A 	AEMM+%+?????@@@@r@   c                 ^   g }g }| j         j        }d |D             }d |D             }|D ]}|j        j        | |j        j        |j        j        f}||v rB|                    t          j        d|j        j        j         j	        z  | d                     l|                    |           |S )zBCheck if no relationship model is used by more than one m2m field.c              3   X   K   | ]%}t          |j        j        t                    !|V  &d S r   )rY   r   r   rV   rn   s     r=   rg   z=Model._check_m2m_through_same_relationship.<locals>.<genexpr>  s6      SSz!.2F	'R'RS!SSSSSSr@   c              3   X   K   | ]%}t          |j        j        t                    !|V  &d S r   )rY   r   rb  rV   rn   s     r=   rg   z=Model._check_m2m_through_same_relationship.<locals>.<genexpr>  s6      UUz!.2H)'T'TU!UUUUUUr@   zWThe model has two identical many-to-many relations through the intermediate model '%s'.zmodels.E003rC  )
r`   r   r   r   rb  through_fieldsr/  r   rL  r   )r   r  seen_intermediary_signaturesr   ro   	signatures         r=   r)  z*Model._check_m2m_through_same_relationship  s     ')$- TSVSSS VUVUUU 	? 	?A$&-	I 888L?.06<=  (      -33I>>>>r@   c                       fd j         j        D             }|r:|d         j        s- j         j        j        dk    rt          j        d d          gS g S )z%Check if `id` field is a primary key.c                 J    g | ]}|j         d k    |j        j        k    | S rI  )rI   r`   r  )rZ   ro   r   s     r=   r\   z)Model._check_id_field.<locals>.<listcomp>  s8     
 
 
4ADUDUADUDUDUr@   r   r=  zP'id' can only be used as a field name if the field also sets 'primary_key=True'.zmodels.E004rC  )r`   r   rk  r  rI   r   rL  )r   r   s   ` r=   r+  zModel._check_id_field  s    
 
 
 
y-
 
 
  
	&)/ 
	CIL4E4M4M/$	    Ir@   c                    g }i }| j                                         D ]}|j         j        D ]}|                    |j                  p|                    |j                  pd}|rU|                    t          j        d|j        d|j	        j         d|j        d|j	        j         d	| d                     |||j        <   |||j        <   | j                                         D ],}|j         
                                D ]}||vr
|||j        <   -| j         j        D ]}|                    |j                  p|                    |j                  pd}|j        dk    o|o|j        dk    o
|j	        | k    }|rJ|sH|                    t          j        d|j        d|j        d	|j	        j         d|d
                     |||j        <   |||j        <   |S )z2Forbid field shadowing in multi-table inheritance.NzThe field 'z' from parent model 'z' clashes with the field 'rk   zmodels.E005rC  r=  z' from model 'zmodels.E006)r`   r  r   r   rI   r   r/  r   rL  r   
get_fields)r   r  used_fieldsr   ro   clashid_conflicts          r=   r,  zModel._check_field_name_clashes  sL     i//11 	+ 	+F\. + +#//U;??193M3MUQU 
MM  %zzz5;+<+<+<afffagmmmU !$,  	 	 	 '(AF#)*AI&&+& i//11 	, 	,F\,,.. , ,K''*+K', ' 	' 	'AOOAF++Q{qy/I/IQTE $V5VUZ4-?VEKSVDV   [ LL./fffejjj%+BSBSBSU(	     #$K%&K	""r@   c           
          g }g }| j         j        D ]l}|                                \  }}|r<||v r8|                    t	          j        d|j        d|dd| d                     W|                    |           m|S )NzField 'z' has column name 'z ' that is used by another field.z$Specify a 'db_column' for the field.zmodels.E007r;  )r`   r   get_attname_columnr/  r   rL  rI   )r   used_column_namesr  ro   r  column_names         r=   r0  z Model._check_column_name_clashes  s     ' 	6 	6A1133NA{  6{.???LL,-FFFKKKAC(      "((5555r@   c                 4   g }| j         }|                    d          s|                    d          r.|                    t	          j        d|z  | d                     n6t          |v r-|                    t	          j        d|z  | d                     |S )Nr  zgThe model name '%s' cannot start or end with an underscore as it collides with the query lookup syntax.zmodels.E023rC  zbThe model name '%s' cannot contain double underscores as it collides with the query lookup syntax.zmodels.E024)rC   
startswithendswithr/  r   rL  r   )r   r  r   s      r=   r-  z)Model._check_model_name_db_lookup_clashes  s    \
  %% 	)<)<S)A)A 	MMCEOP$	      :%%MM@BLM$	     r@   c                     g }| j         j        }d | j                             d          D             }|D ]3}||v r-|                    t	          j        d|z  | d                     4|S )Nc              3   Z   K   | ]&}|j         r|j        |                                V  'd S r   )rO  related_modelget_attnamern   s     r=   rg   zLModel._check_property_name_related_field_accessor_clashes.<locals>.<genexpr>3  sJ       #
 #
}#
 "#!< MMOO!<!<!<!<#
 #
r@   Freversez8The property '%s' clashes with a related field accessor.zmodels.E025rC  )r`   r  _get_fieldsr/  r   rL  )r   r  r
  related_field_accessorsaccessors        r=   r.  z9Model._check_property_name_related_field_accessor_clashes/  s    2#
 #
Y**5*99#
 #
 #

 0 		 		H>))L$&./(	     r@   c                     g }t          d | j        j        D                       dk    r*|                    t	          j        d| d                     |S )Nc              3   (   K   | ]}|j         	d V  dS )r  Nr  rn   s     r=   rg   z2Model._check_single_primary_key.<locals>.<genexpr>G  s)      BBQAMBqBBBBBBr@   r  zBThe model cannot have more than one field with 'primary_key=True'.zmodels.E026rC  )sumr`   r   r/  r   rL  rQ  s     r=   r/  zModel._check_single_primary_keyD  sj    BB#)0BBBBBQFFMM*$	     r@   c                 l   t          | j        j        t          t          f          st          j        d| d          gS t          d | j        j        D                       rt          j        d| d          gS g }| j        j        D ]+}|                    | 	                    |d                     ,|S )z+Check the value of "index_together" option.z)'index_together' must be a list or tuple.zmodels.E008rC  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   rY   r   rM  rZ   r   s     r=   rg   z.Model._check_index_together.<locals>.<genexpr>_  sD       
 
6<
6E4=111
 
 
 
 
 
r@   z6All 'index_together' elements must be lists or tuples.zmodels.E009index_together)
rY   r`   ry  r   rM  r   rL  r   r  _check_local_fieldsr   r  r   s      r=   r1  zModel._check_index_togetherS  s     #)2UDMBB 	?$     
 
@C	@X
 
 
 
 
 	 L$    F)2 Q Qc55f>NOOPPPPMr@   c                 l   t          | j        j        t          t          f          st          j        d| d          gS t          d | j        j        D                       rt          j        d| d          gS g }| j        j        D ]+}|                    | 	                    |d                     ,|S )z,Check the value of "unique_together" option.z*'unique_together' must be a list or tuple.zmodels.E010rC  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   rw  rx  s     r=   rg   z/Model._check_unique_together.<locals>.<genexpr>|  sG       
 
 6E4=111
 
 
 
 
 
r@   z7All 'unique_together' elements must be lists or tuples.zmodels.E011r  )
rY   r`   r  r   rM  r   rL  r   r  rz  r{  s      r=   r2  zModel._check_unique_togetherp  s     #)3eT]CC 	@$     
 
)3
 
 
 
 
 	
 M$    F)3 R Rc55f>OPPQQQQMr@   c           	         g }t                      }| j        j        D ]}|j        d         dk    s|j        d                                         r2|                    t          j        d|j        z  | d                     t          |j                  |j	        k    r9|                    t          j        d|j        |j	        fz  | d                     |j
        r<|j        D ]4}|                    d |                     |          D                        5|D ]v}t          j        ||           st           |         }|j        j        sdd	| j        j        v sVt)          d
 | j        j        D                       r3|                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt)          d | j        j        D                       r3|                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt)          d | j        j        D                       r3|                    t          j        d|j        z  d| d                     xd | j        j        D             }|d | j        j        D             z  }||z  }|                    |                     |d                     |S )z/Check fields, names, and conditions of indexes.r   r  z@The index name '%s' cannot start with an underscore or a number.zmodels.E033rC  z8The index name '%s' cannot be longer than %d characters.zmodels.E034c              3   &   K   | ]}|d          V  dS )r   Nr:   )rZ   refs     r=   rg   z'Model._check_indexes.<locals>.<genexpr>  s7       & &#&A& & & & & &r@   supports_partial_indexesc              3   (   K   | ]}|j         d uV  d S r   )	conditionrZ   r   s     r=   rg   z'Model._check_indexes.<locals>.<genexpr>  s)      QQeeoT1QQQQQQr@   z,%s does not support indexes with conditions.zLConditions will be ignored. Silence this warning if you don't care about it.zmodels.W037r;  supports_covering_indexesc              3   $   K   | ]}|j         V  d S r   includer  s     r=   rg   z'Model._check_indexes.<locals>.<genexpr>  s$      CCemCCCCCCr@   z1%s does not support indexes with non-key columns.zQNon-key columns will be ignored. Silence this warning if you don't care about it.zmodels.W040supports_expression_indexesc              3   $   K   | ]}|j         V  d S r   )contains_expressionsr  s     r=   rg   z'Model._check_indexes.<locals>.<genexpr>  s%      PPUe0PPPPPPr@   z+%s does not support indexes on expressions.zKAn index won't be created. Silence this warning if you don't care about it.zmodels.W043c                 ,    g | ]}|j         D ]\  }}|S r:   )fields_orders)rZ   r   r   r  s       r=   r\   z(Model._check_indexes.<locals>.<listcomp>  s@     
 
 
AT
 
5=UAE
 
 
 
r@   c                 &    g | ]}|j         D ]}|S r:   r  )rZ   r   r  s      r=   r\   z(Model._check_indexes.<locals>.<listcomp>  s'    WWWuWWg7WWWWr@   r   )r   r`   r   rI   isdigitr/  r   rL  r   max_name_lengthr  expressionsr   _get_expr_referencesr   rE  r   r  r  rF  r   r@  rG  r  r  r  rz  )	r   r$  r  
referencesr   
expressionr   r   r   s	            r=   r3  zModel._check_indexes  s    UU
Y& 	 	E z!}##uz!}'<'<'>'>#L').4(	     5:!666L&).U5J(KL(	     ) "'"3  J%% & &*-*B*B:*N*N& & &      3	 3	B-b#66 $RJ#<-1OOOQQsy?PQQQQQ PNF$12:  (	 	 	   #=.#)2PPPCC1BCCCCC QNK$12B  (	 	 	   #?0CI4RRRPPci>OPPPPP SNE$12:  (	 	 	  
 
"y0
 
 
 	WW	(9WWWW*c--fi@@AAAr@   c                 t   ddl m} i }| j                            d          D ]&}|||j        <   t          |d          r
|||j        <   'g }|D ]}	 ||         }t          |j        |j	                  r5|
                    t          j        d|d|d|d	| d
                     Z|| j        j        vr?|
                    t          j        d|d|d| j        j        d	d| d                     # t          $ r4 |
                    t          j        d|d|d	| d                     Y w xY w|S )Nr   )modelsFrm  r   rJ  z' refers to a ManyToManyField 'z.', but ManyToManyFields are not permitted in 'rk   zmodels.E013rC  z' refers to field 'z' which is not local to model 'z4This issue may be caused by multi-table inheritance.zmodels.E016r;  z#' refers to the nonexistent field 'zmodels.E012)	django.dbr  r`   ro  rI   rR   r   rY   r   ManyToManyRelr/  r   rL  r   r'  r   )r   r   optionr  forward_fields_mapr   r  r\  s           r=   rz  zModel._check_local_fields  s   $$$$$$  Y**5*99 	: 	:E-2uz*ui(( :49"5=1  '	 '	J&*:6 e0&2FGG MM !' *

 & !$,
 
 
    #)"888MM'-vvzzz39;P;P;PR!W #,    9    LL #FF&JJ
  (  
 
 
 
 
J s   C77;D54D5c           
         | j         j        rt          j        d| d          gS | j         j        s| j         j        sg S t          | j         j        t          t          f          st          j        d| d          gS g }| j         j        }d |D             }d |D             }g }g }|D ]6}t          |v r|
                    |           !|
                    |           7|}|D ]}| }d}|                    t                    D ]}		 |	d	k    r|j         j        }n|j                             |	          }|j        r|j        d
         j        j        }nd}R# t$          t&          f$ r\ |*|                    |	          B|                    |	          -|
                    t          j        d|z  | d                     Y w xY wd |D             }g }
| j         }t-          t/          j        d t/          |j        |j                  D                                 }|
                    ||z
             |
D ]/}|
                    t          j        d|z  | d                     0|S )ze
        Check "ordering" option -- is it a list of strings and do all fields
        exist?
        z?'ordering' and 'order_with_respect_to' cannot be used together.zmodels.E021rC  zQ'ordering' must be a tuple or list (even if you want to order by only one field).zmodels.E014c              3   P   K   | ]!}t          |t                    |d k    |V  "dS )?N)rY   r  rn   s     r=   rg   z(Model._check_ordering.<locals>.<genexpr>@  s5      GGz!S'9'9Ga3hh!hhhhGGr@   c              3   X   K   | ]%}|                     d           r
|dd         n|V  &dS )r  r  N)rg  rn   s     r=   rg   z(Model._check_ordering.<locals>.<genexpr>C  s?      FF!ALL--41QRR551FFFFFFr@   Nr  zJ'ordering' refers to the nonexistent field, related field, or lookup '%s'.zmodels.E015c                     h | ]
}|d k    |S rG  r:   rn   s     r=   rp   z(Model._check_ordering.<locals>.<setcomp>m  s    111qDyy!yyyr@   c              3      K   | ]:}|j         r|j        r|j        |j        fn|j                                        fV  ;d S r   )rt   concreterI   r   r   related_query_namern   s     r=   rg   z(Model._check_ordering.<locals>.<genexpr>v  sk            5/0z5##g00224           r@   )r`   _ordering_clashr   rL  r   ri   rY   rM  r   r   r/  rO  r  r  rO  
path_infosto_optsr   r
   AttributeErrorget_transform
get_lookupr   r   from_iterabler   rR  r  )r   r  r   _fieldsrelated_fieldsro   r   _clsfldpartinvalid_fieldsr   valid_fieldsinvalid_fields                 r=   r4  zModel._check_ordering   s*    9$ 	U$    9* 	#)2D 	I#),tUm<< 	'$	    # HGVGGG GFvFFF  	" 	"AQ%%a((((q!!!! $ 	 	EDCJ//  t||"jm"j22488 $"~b19?#)>:   {))$//7CNN4<P<P<X"L!ACH!I$'#0	    	4 21V111  y     t{D,@AA	       
 
 	f|3444+ 	 	MMM-/<=$	      s   AEA*GGc                 2   |sg S g }d}d}|D ]^}t          j        ||           st          |         }|j                                        }||j        j        rM||}|}T||k     r|}|}_||S | j        j        D ]j}|	                                \  }	}
|j
        J|
Ht          |
          |k    r5|                    t          j        d|
d|d|dd| d                     k| j        j        D ]}t!          |j        j        t&                    r"|j        j        j        j        D ]j}|	                                \  }	}|j
        J|Ht          |          |k    r5|                    t          j        d	|d|d|dd
| d                     k|S )z
        Check that any auto-generated column names are shorter than the limits
        for each database in which the model will be created.
        Nz.Autogenerated column name too long for field "z". Maximum length is "z" for database "z".z/Set the column name manually using 'db_column'.zmodels.E018r;  z2Autogenerated column name too long for M2M field "z\Use 'through' to create a separate model for M2M and then set column_name using 'db_column'.zmodels.E019)r   rE  r   opsr  r  truncates_namesr`   r   rc  	db_columnr   r/  r   rL  r   rY   r   rb  r  )r   r$  r  allowed_lendb_aliasr   r   r  ro   r  re  m2mrel_names                r=   r*  zModel._check_long_column_names  s-     	I  	" 	"B-b#66 $RJ(n<<>>O&**=*M&&"1K!HH${22"1K!HM' 	 	A1133NA{
 #+$${22LL ';;XXX? O(  	 	 	 - 	 	A!.0#66  ~-3@  !44668M) ,H33MM  (xxhhh@!R !$,
 
 
  * r@   c              #   R  K   t          |t                    r|j        D ]|}t          |t                    rJ|\  }}t          |                    t
                              V  |                     |          E d {V  a|                     |          E d {V  }d S t          |t                    r0t          |j                            t
                              V  d S t          |d          r2|
                                D ]}|                     |          E d {V  d S d S )Nget_source_expressions)rY   r)   childrenr   rO  r   r  r(   rI   rR   r  )r   exprchildlookuprS   src_exprs         r=   r  zModel._get_expr_references  sg     dA 	> ? ?eU++ ?$)MFEZ 8 899999"77>>>>>>>>>>"77>>>>>>>>>>? ? a   	>	
334444444T344 	> 7799 > >33H==========	> 	>> >r@   c                 "   g }|D ]}t          j        ||           st          |         }|j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d	|j        z  d| d
                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     t#          t%          j        d | j        j        D                                 }t#                      }| j        j        D ]}t)          |t*                    r|j        j        sd| j        j        vrGt)          |j        t.                    r-|                    |                     |j                             |j        j        sd| j        j        vr9|j        r2|j        D ]*}|                    |                     |                     +t)          |t8                    r|j        j        sd| j        j        vrt)          |j        t.                    r-|                    |                     |j                             t          d |j                                        D                       r4|	                    t          j        d|j        dd| d                     |D ]^}	}
|	dk    r|                     |	           |
s#	 |	dk    r| j        j!        }n| j        "                    |	          }|j#        r|j$        s|j%        rgn# tL          $ r Y tw xY w|
d         }tO          |d          r}tO          |d           rm|(                    |          X|)                    |          C|	                    t          j*        d!tW          j,        |	g|
z             z  | d"#                     |-                    | .                    |d$                     |S )%N supports_table_check_constraintsc              3   @   K   | ]}t          |t                    V  d S r   )rY   r   rZ   r  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr>  s@         :77     r@   z&%s does not support check constraints.zOA constraint won't be created. Silence this warning if you don't care about it.zmodels.W027r;  r  c              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rY   r   r  r  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr>	  sS          :'788 5(4     r@   z7%s does not support unique constraints with conditions.zmodels.W036&supports_deferrable_unique_constraintsc              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rY   r   
deferrabler  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr> 	  sS          :'788 6)5     r@   z2%s does not support deferrable unique constraints.zmodels.W038r  c              3   N   K   | ] }t          |t                    o|j        V  !d S r   )rY   r   r  r  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr>4	  sI         :'788OZ=O     r@   z<%s does not support unique constraints with non-key columns.zmodels.W039r  c              3   N   K   | ] }t          |t                    o|j        V  !d S r   )rY   r   r  r  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr>G	  sN          :'788 43     r@   z6%s does not support unique constraints on expressions.zmodels.W044c              3   b   K   | ]*}t          |t                    g |j        |j        R V  +d S r   )rY   r   r   r  r  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr>Y	  sZ       $ $"!*.>??$=j'=**<==$ $ $ $ $ $r@   c              3   @   K   | ]}t          |t                    V  d S r   )rY   r    )rZ   r  s     r=   rg   z+Model._check_constraints.<locals>.<genexpr>{	  s@         $ 'tV44     r@   zCheck constraint zS contains RawSQL() expression and won't be validated during the model full_clean().z0Silence this warning if you don't care about it.zmodels.W045r  r   r  r  z.'constraints' refers to the joined field '%s'.zmodels.E041rC  r  )/r   rE  r   r  r  r`   rF  r   r  r/  r   r@  rG  r  r  r  r  r   r   r  rY   r   r  r)   r   r  r  r  r   r  flattenrI   r   r  r  rO  many_to_manyone_to_manyr
   rR   r  r  rL  r   r   r  rz  )r   r$  r  r   r   r   r  r  r  r\  lookupsr   first_lookups                r=   r5  zModel._check_constraints  s3    {	J {	JB-b#66 $RJ#D59WWW  "%)"7     X
 N@$12B  (	 	 	   #<-1OOO   #&)"7     P N&(2(?@B  (	 	 	   #J;912 2   #&)"7    2 NL$12B  (	 	 	   #=.#)2PPP  "%)"7     Q
 N#%/%<=B  (	 	 	   #?0CI4RRR   #&)"7     S N')3)@AB  (	 	 	   # $ $&)i&;$ $ $   F J!i3 + +
j*:;; *"+D5"y=> >$Z%91==> #))44Z5IJJ   #+GT8"y=> >$9> +5*@ T TJ&--c.F.Fz.R.RSSSS
O<< "+L="y=> > &j&6:: &-- # 8 89I J J     (2(8(@(@(B(B      #MM &%F
 %F %F %F). ),'4
!" 
!" 
!"   )3  $
W%%JJz*** !T)) #	 #	 3 3J ? ? , !0B !eFW ! !(   H  'qzE?33|44 ++L99A((66>MML(ozlW.DEEF #,	     MM#11&-HHIIIIs   9AR==
S
	S
r   )NN)FFNN)FFFNN)FNFFNNr  )NTT)GrC   rD   rE   r  classmethodr  r>   rB   r  r"  r+  r$  r:  r<  r?  r   r  rB  rX  rZ  r]  r_  alters_datarp  rl  rw  rx  r  r  rf  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r6  r7  r%  r&  r'  r(  r)  r+  r,  r0  r-  r.  r/  r1  r2  r3  rz  r4  r*  r  r5  r]   r   s   @r=   r   r     s       p2 p2 p2 p2 p2d 
 
 [
< < <E E E! ! !  
1 1 1  "$ $ $,. . . .; ; ; 
+{	+	+B
 
 
F/ F/ F/ F/PU U U U, , ,$ QU4
 4
 4
 4
l D QU
 
 
 
 E @ @ @ @D !I! ! !J X X X Xt, , ,8
 
 
4 4 4 4l	" 	" 	" 	" F
 
 
 
 G
 
 
  *( ( (.
 
 
 
M M M  * * * * =* =* =* =*~/ / /b  >
 
 
"  @  * * * *(-* -* -* -*^* * * *2 # # [#J   [>   [,   [4 
 
 [
   [   [ ! ! [!F   [$ 4 4 [4l   [0   [.   [(   [   [8   [: X X [Xt 4 4 [4l h h [hT P P [Pd > > [> ~ ~ [~ ~ ~ ~ ~r@   r   )	metaclassc                     j         j        }|                    |           } j                            |          j        di |                    fdt          |          D             dg           d S )Nc                 0    g | ]\  }} ||           S ))r  r  r:   )rZ   r  r  ordered_objs      r=   r\   z$method_set_order.<locals>.<listcomp>	  s,    NNNieR5	)	)	)NNNr@   r  r:   )r`   r   get_forward_related_filterr   rK  rL  bulk_update	enumerate)r<   r  id_listrS  	order_wrtr  s    `    r=   method_set_orderr  	  s    !7I66t<<K0K""5))0??;??KKNNNN9W;M;MNNN	
    r@   c                     |j         j        }|                    |           }|j         j        j        } |j        j        di |                    |d          S )NT)flatr:   )r`   r   r  r  rI   r   rL  values_list)r<   r  r  r  pk_names        r=   method_get_orderr  	  s]    !7I66t<<K"'G%;%4444@@t@TTTr@   c                     t          |d| j                                        z  t          t          |                      t          |d| j                                        z  t          t
          |                      d S )Nzget_%s_orderzset_%s_order)r   rC   lowerr   r  r  )r   rk  s     r=   r   r   	  s    --///&..  
 --///&..    r@   c                 x    t          | t                    rt          j        |  }n| }|                    |          S )z7Used to unpickle Model subclasses with deferred fields.)rY   r   r   rK  r{   )model_idr   s     r=   r(  r(  	  s;    (E"" ) ==r@   Tr   )]rw   rP   r6  	functoolsr   	itertoolsr   asgiref.syncr   r%  django.appsr   django.confr   django.corer   django.core.exceptionsr	   r
   r   r   r   r   r  r   r   r   r   r   r   django.db.modelsr   r   r   r   r   django.db.models.constantsr   django.db.models.constraintsr   r   django.db.models.deletionr   r   django.db.models.expressionsr    django.db.models.fields.relatedr!   r"   r#   r$   django.db.models.functionsr%   django.db.models.managerr&   django.db.models.optionsr'   django.db.models.queryr(   r)   django.db.models.signalsr*   r+   r,   r-   r.   django.db.models.utilsr/   r0   django.utils.encodingr1   django.utils.hashabler2   django.utils.textr3   r4   django.utils.translationr5   r  r7   r   rM   rT   rH   rV   r   r   r   r  r  r   r(  __safe_for_unpickle__r:   r@   r=   <module>r      sY      # # # # # #       & & & & & &                                                        W V V V V V V V V V V V V V 1 1 1 1 1 1 J J J J J J J J 8 8 8 8 8 8 8 8 / / / / / /            0 / / / / / , , , , , , , , , , , , ' ' ' ' ' ' ' '              @ ? ? ? ? ? ? ? + + + + + + / / / / / / 5 5 5 5 5 5 5 5 6 6 6 6 6 6" " " " " " " " 8::  $P P P
X) X) X) X) X) X) X) X)v
       	5 	5 	5 	5 	5 	5 	5 	5b b b b bJ) b b b bX?   U U U
 
 
$      (, $ $ $r@   