
    hhV                    j   S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKrS SKJr  S SKJr  S SKJr  S S	KJrJrJrJrJrJr  S S
KJrJrJrJrJrJr  S SK J!r!J"r"J#r#J$r$J%r%  S SK&J'r'  S SK(J)r)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0J1r1J2r2J3r3  S SK4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;J<r<  S SK=J>r>J?r?J@r@JArAJBrB  S SKCJDrDJErE  S SKFJGrG  S SKHJIrI  S SKJJKrK  S SKLJMrMJNrN  S SKOJPrQ   " S S5      rR\R" 5       rSS rTS rU " S  S!\V5      rW " S" S#5      rX " S$ S%5      rY " S& S'\D\WS(9rZS.S) jr[S* r\S+ r]S, r^S-\^l_        g)/    N)defaultdict)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)CASCADE	Collector)DatabaseDefault)CompositePrimaryKey)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)RemovedInDjango60Warning)	force_str)make_hashable)capfirstget_text_list)gettext_lazyc                        \ rS rSrS rS rSrg)Deferred<   c                     gNz<Deferred field> selfs    PD:\Anime\Ugyen\janka_web_project\venv\Lib\site-packages\django/db/models/base.py__repr__Deferred.__repr__=       !    c                     gr;   r<   r=   s    r?   __str__Deferred.__str__@   rB   rC   r<   N)__name__
__module____qualname____firstlineno__r@   rE   __static_attributes__r<   rC   r?   r8   r8   <   s    ""rC   r8   c                 D    [        U UUUR                  < SU < 3S.5      $ )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.
.)rH   rI   )typerI   )namebasesmoduleattached_tos       r?   subclass_exceptionrS   G   s-      '2'?'?F	
 rC   c                 ^    [         R                  " U 5      (       + =(       a    [        U S5      $ )Ncontribute_to_class)inspectisclasshasattr)values    r?   _has_contribute_to_classrZ   Y   s!    u%%O'%9N*OOrC   c                   X   ^  \ rS rSrSrU 4S jrS rS r\S 5       r	\S 5       r
SrU =r$ )		ModelBase^   zMetaclass for all models.c                   > [         T'U ]  nU Vs/ s H  n[        U[        5      (       d  M  UPM     nnU(       d	  U" XX#5      $ UR	                  S5      nSU0n	UR	                  SS 5      n
U
b  XS'   UR	                  SS 5      n0 nUR                  5        H  u  p[        U5      (       a  XU'   M  XU'   M!     U" XX)40 UD6n[        USS5      nU=(       d    [        USS 5      n[        USS 5      nS n[        R                  " U5      n[        USS 5      c+  Uc  U(       d  [        SU< S	U< S
35      eOUR                  nUR                  S[        UU5      5        U(       d  UR                  S[        S[        S U 5       5      =(       d    [         4UUS95        UR                  S[        S[        S U 5       5      =(       d    ["        4UUS95        U(       ai  UR$                  (       dX  ['        US5      (       d  UR(                  UR*                  l        ['        US5      (       d  UR,                  UR*                  l        UR*                  R.                  nU(       a5  U(       a.  UR0                  (       a  [3        U< SUR0                  < S35      eUR                  5        H  u  pUR                  X5        M     [5        UR*                  R6                  UR*                  R8                  UR*                  R:                  5      nU Vs1 s H  nUR<                  iM     nnU(       Ga	  S nU Vs/ s H  n['        US5      (       d  M  UPM     sn H  nUR*                  R$                  (       a+  UR*                  R>                  (       a  [3        SU-  5      eMI  Uc  UnMP  UR*                  R@                  UR*                  R@                  Ld  M  [3        SU-  5      e   Uc  [3        SU-  5      eUR*                  RC                  U5        UR*                  R@                  UR*                  l         OXR*                  l         0 n[E        U/U-   5       H  n['        US5      (       d  M  UU:w  a  UR*                  R$                  (       d  M9  UR*                  R6                   He  n[        U[F        5      (       d  M  URH                  RJ                  (       d  M7  [M        UURH                  RN                  5      nUU[Q        U5      '   Mg     M     [S        5       nURU                  5        GHo  nUU;  d  ['        US5      (       d  URW                  URX                  5        M8  UR*                  R6                  UR*                  R8                  -   n UR*                  R$                  (       Gd&  U  HZ  nUR<                  U;   a,  [[        SUR<                  < SU< SUR\                  < S	35      eUR_                  UR<                  5        M\     UR*                  R@                  n[Q        U5      n!U!U;   a  UU!   nOU(       dv  SUR*                  R`                  -  n"[G        U[b        U"SSS9nU"U;   a"  [[        SU"< SU< SUR\                  < S 35      e['        UU"5      (       d  UR                  U"U5        OS nUUR*                  Rd                  U'   OUR*                  Rd                  Rg                  5       n#U  H  nUR<                  U;  d  M  UR<                  URX                  ;  d  M1  UR<                  U;  d  MC  [f        Rh                  " U5      n$UR                  UR<                  U$5        URj                  (       d  M  U#R                  5        H  u  nn%UU%:X  d  M  U$U#U'   M     M     UR*                  Rd                  RW                  U#5        UR*                  R:                   H  nUR<                  U;   aI  UR*                  R$                  (       d,  [[        SUR<                  < SU< SUR\                  < S	35      eM\  [f        Rh                  " U5      nUR*                  R$                  (       d  SUl6        UR                  UR<                  U5        M     GMr     UR*                  Rn                   V&s/ s H  n&[f        Rh                  " U&5      PM     sn&UR*                  l7        U(       a  SUl        Xl8        U$ URs                  5         UR*                  R                  Ru                  UR*                  Rv                  U5        U$ s  snf s  snf s  snf s  sn&f )!NrH   __classcell__MetaabstractF_meta	app_labelzModel class rM   zU doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.DoesNotExistc              3      #    U  HA  n[        US 5      (       d  M  UR                  R                  (       a  M3  UR                  v   MC     g7frb   N)rX   rb   ra   rd   .0xs     r?   	<genexpr>$ModelBase.__new__.<locals>.<genexpr>   s9      !(A"1g. '78ww7G7G '!(   AAA)rR   r   c              3      #    U  HA  n[        US 5      (       d  M  UR                  R                  (       a  M3  UR                  v   MC     g7frf   )rX   rb   ra   r   rg   s     r?   rj   rk      s;      !(A"1g. 278ww7G7G 211!(rl   orderingget_latest_byz! cannot proxy the swapped model ''.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_deleterO   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.)<super__new__
isinstancer\   popitemsrZ   getattrr   get_containing_app_configRuntimeErrorlabeladd_to_classr'   rS   tupler   r   ra   rX   rn   rb   ro   proxyswapped	TypeErrorr   local_fieldslocal_many_to_manyprivate_fieldsrO   fieldsconcrete_modelsetup_proxyreversedr"   remote_fieldrs   r$   modelr0   setmroupdate__dict__r   rG   add
model_namer   parentscopydeepcopy
one_to_onemti_inheritedindexesr`   _prepareregister_modelrc   )(clsrO   rP   attrskwargs	super_newbr   rQ   	new_attrs	classcell	attr_metacontributable_attrsobj_nameobj	new_classra   meta	base_metarc   
app_configis_proxy
new_fieldsffield_namesbaseklsparentparent_linksfieldrelatedinherited_attributesparent_fieldsbase_key	attr_namebase_parents	new_fieldrs   idx	__class__s(                                          r?   ru   ModelBase.__new__a   s   GO	 $@ez!Y'?1e@S55 <(!6*	IIot4	 )2o&IIfd+	 !"[[]MH',,03H-&)(#	 +
 cDVD	9j%8<GIvt<Iw5		 33F;
4d+3!& .4T;    ',,	wi(@A"""" !(  -
 +, )
 "")"- !(  2
 01 )
 !3!3 tZ00/8/A/AIOO,t_554=4K4KIOO1??(( 	i&7&7=A9CTCTU  1668MH""81 9 OO((OO..OO**


 (22z!qvvz2 D*1K'3WS'5J3'K<<((||**'>@DE 
 !<!D\\00

8Q8QQ#!#'(  L  |LtS  OO''--1ZZ-F-FIOO*-6OO* i[723D4))y )<)<00e]338J8J8V8V8V.y%:L:L:R:RSG>CL!1'!:; 1 4  #uMMOD7"'$*@*@ %++DMM: JJ33djj6S6SSM::&&& +Ezz[0( !&

 $ $  -00< + zz00+D1|+(2E! (4::+@+@ @I)")&%)$(E !K/(
 !* $ $	 	 #9i88!..y%@ E05	''-#zz11668 +E

+5!JJi.@.@@!JJ.BB$(MM%$8	!..uzz9E !+++7C7I7I7K 3#(K#7;DL$8 8L +  ''..|< 22::,::..( !&

 $ $  / !MM%0E::...2+**5::u=! 3g $P +4//*A*A#
*A3DMM#*A#
	  "'I&N++IOO,E,EyQW AL 3
 Ld#
s"   eee;ee e$c                 `    [        U5      (       a  UR                  X5        g [        XU5        g N)rZ   rU   setattr)r   rO   rY   s      r?   r}   ModelBase.add_to_classs  s%    #E**%%c0Cu%rC   c                    U R                   nUR                  U 5        UR                  (       a  [        U R                  SS9U l        [        U R                  SS9U l        UR                  R                  (       a2  UR                  nUR                  R                  n[        [        X5        U R                  c9  U R                  < SSR                  S UR                   5       5      < S3U l        [        R                   R#                  UR$                  5      nU(       a  ['        U S	U5        UR(                  (       d\  [+        S
 UR                   5       5      (       a  [-        SU R                  -  5      e[/        5       nSUl        U R3                  SU5        U R                   R4                   H'  nUR6                  (       a  M  UR9                  U 5        M)     [:        R<                  " U S9  g)z7Create some methods once self._meta has been populated.T)is_nextFN(, c              3   8   #    U  H  oR                   v   M     g 7fr   rO   rh   r   s     r?   rj   %ModelBase._prepare.<locals>.<genexpr>  s     6+Q&&+   )get_absolute_urlc              3   >   #    U  H  oR                   S :H  v   M     g7f)objectsNr   r   s     r?   rj   r     s     <166Y&s   zOModel %s must specify a custom Manager, because it has a field named 'objects'.r   )sender)rb   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__rG   joinr   r   ABSOLUTE_URL_OVERRIDESgetlabel_lowerr   managersany
ValueErrorr&   rr   r}   r   rO   set_name_with_modelr*   send)r   optswrtremoteget_absolute_url_overridemanagerindexs          r?   r   ModelBase._preparey  s   yyc%%$122D%C! )622E)C% ))6600))//&'CSQ ;;		6$++66CK
 %-$C$C$G$G%
! %C+-FG}}<<<< -/2||<  iG#'G Y0
 YY&&E:::))#. ' 	3'rC   c                 .    U R                   R                  $ r   )rb   base_managerr   s    r?   _base_managerModelBase._base_manager  s    yy%%%rC   c                 .    U R                   R                  $ r   )rb   default_managerr   s    r?   _default_managerModelBase._default_manager  s    yy(((rC   r<   )rG   rH   rI   rJ   r   ru   r}   r   propertyr   r   rK   r_   r   s   @r?   r\   r\   ^   s@    #Pd&5(n & & ) )rC   r\   c                       \ rS rSrSS jrSrg)ModelStateFieldsCacheDescriptori  Nc                      Uc  U $ 0 =o1l         U$ r   )fields_cache)r>   instancer   ress       r?   __get__'ModelStateFieldsCacheDescriptor.__get__  s    K&((#
rC   r<   r   )rG   rH   rI   rJ   r   rK   r<   rC   r?   r   r     s    rC   r   c                   .    \ rS rSrSrSrSr\" 5       rSr	g)
ModelStatei  zStore model instance state.NTr<   )
rG   rH   rI   rJ   r   dbaddingr   r   rK   r<   rC   r?   r   r     s    %	B
 F24LrC   r   c                   j  ^  \ rS rSrU 4S jr\S 5       rS rS rS r	S r
S rS	 rS
 rSIS jrS r\" \\5      rSIS jrS rSJS jrSJS jrS rS rSSSSS.S jrS\l        SSSSS.S jrS\l        \S 5       r     SKS jrS\l         SIS jr      SLS jrS rS r SIS jr!SMS  jr"S\"l        SMS! jr#S\#l        S" r$S# r%S$ r&SIS% jr'S& r(S' r)SIS( jr*SMS) jr+S* r,S+ r-S, r.S- r/S. r0SIS/ jr1SNS0 jr2SIS1 jr3\S2 5       r4\S3 5       r5\S4 5       r6\S5 5       r7\S6 5       r8\S7 5       r9\S8 5       r:\S9 5       r;\S: 5       r<\S; 5       r=\S< 5       r>\S= 5       r?\S> 5       r@\S? 5       rA\S@ 5       rB\SA 5       rC\SB 5       rD\SC 5       rE\SD 5       rF\SE 5       rG\SF 5       rH\SG 5       rISHrJU =rK$ )OModeli  c                   > U R                   nU R                  n[        n[        nUR                  (       a  [        S5      e[        R                  " X1US9  [        5       U l	        [        U5      [        UR                  5      :  a  [        S5      eU(       dC  [        UR                  5      n[        X5       H  u  pXL a  M  U" X	R                  U5        M      O[        UR                   5      n[        X5       Hj  u  pXL a  M  U" X	R                  U5        UR#                  U	R$                  [&        5      [&        Ld  MG  [        UR(                   SU	R$                   S35      e   U H  n	Sn
U	R*                  b  U	R,                  (       a  M%  U(       a[  [/        U	R0                  [2        5      (       a   UR#                  U	R$                  5      nSn
O- UR#                  U	R                  5      nOU	R7                  5       nU
(       a  WULa  U" X	R$                  U5        M  M  WULd  M  U" X	R                  U5        M     U(       a  UR8                  nSnUR;                  5        H<  u  pX;   a  XLa  U" XU5        M  M   UR=                  U5        XLa  U" XU5        M<  M>     U(       a2  S	RA                  S
 U 5       5      n[        URB                   SU 35      e[D        TU ]  5         [H        R                  " X0S9  g ! [4         aB     UR#                  U	R                  5      n GN+! [4         a    U	R7                  5       n  GNIf = ff = f! [4         a    U	R7                  5       n GNnf = f! [>         a
    X4-  n GM  f = f)Nz'Abstract models cannot be instantiated.)r   argsr   z'Number of args exceeds number of fieldsz8() got both positional and keyword arguments for field 'rp   FTr<   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   repr)rh   ns     r?   rj   !Model.__init__.<locals>.<genexpr>8  s     ,IjT!WWjr   z%() got unexpected keyword arguments: )r   r   )%r   rb   r   DEFERREDra   r   r-   r   r   _statelenconcrete_fields
IndexErroriterzipattnamer   rw   rO   r   rI   column	generatedrv   r   r!   KeyErrorget_default_property_namesrx   	get_fieldr   r   rG   rt   __init__r+   )r>   r   r   r   r   _setattr	_DEFERREDfields_itervalr   is_related_objectrel_objproperty_names
unexpectedproprY   unexpected_namesr   s                    r?   r  Model.__init__  s)   nnzz	==EFFSF; !l t9s4//00FGGt334K
 "$4
#}}c2 5 t{{+K!$4
#}}c2::ejj,7|K#++, -88=

|2G  5 !E %||#ue002BCC	6"(**UZZ"8,0)2$jj7 '') 
 )+T::w7 , i'T==#6M !P !11NJ%||~ )- U3 .8t, !1$T7 2  . #'99,Ij,I#I ||n$I'(*  	c1k $ 66"(**U]]";C' 6"'"3"3"5C6	6 $ 2
 $//12@ - ."g-
.sN   9LMM6
ML//M	MMMM32M36N
	N
c                 T   [        U5      [        U R                  R                  5      :w  aP  [        U5      nU R                  R                   Vs/ s H$  nUR                  U;   a  [        U5      O[        PM&     nnU " U6 nSUR                  l        XR                  l	        U$ s  snf NF)
r  rb   r  r  r
  nextr  r  r   r   )r   r   r   valuesvalues_iterr   news          r?   from_dbModel.from_db@  s    v;#cii7788v,K 222A &'YY+%=[!8K2   6l!




s   +B%c                 @    SU R                   R                  < SU < S3$ )N<z: >)r   rG   r=   s    r?   r@   Model.__repr__M  s    !^^44d;;rC   c                 R    U R                   R                  < SU R                  < S3$ )Nz	 object (r   )r   rG   pkr=   s    r?   rE   Model.__str__P  s    #'>>#:#:DGGDDrC   c                     [        U[        5      (       d  [        $ U R                  R                  UR                  R                  :w  a  gU R
                  nUc  XL $ X!R
                  :H  $ r  )rv   r   NotImplementedrb   r   r*  )r>   othermy_pks      r?   __eq__Model.__eq__S  sW    %''!!::$$(B(BB==   rC   c                 l    U R                  5       (       d  [        S5      e[        U R                  5      $ )Nz8Model instances without primary key value are unhashable)
_is_pk_setr   hashr*  r=   s    r?   __hash__Model.__hash__]  s)      VWWDGG}rC   c                     U R                  5       n[        R                  U[        '   U R                  R
                  U R                  R                  4n[        U4U4$ r   )__getstate__django__version__r   rb   rc   object_namemodel_unpickle)r>   dataclass_ids      r?   
__reduce__Model.__reduce__b  sN      "*0*<*<&'::'')?)??{D00rC   c                    U R                   R                  5       n[        R                  " US   5      US'   US   R                  R                  5       US   l        / nUR                  5        H8  u  p4[	        U[
        5      (       d  M  UR                  U[        U5      45        M:     U(       a   X!S'   U H  u  p4UR                  U5        M     U$ )z0Hook to allow choosing the attributes to pickle.r  _memoryview_attrs)	r   r   r   rx   rv   
memoryviewappendbytesrw   )r>   staterB  attrrY   s        r?   r8  Model.__getstate__h  s    ""$))E(O4h',X'C'C'H'H'Jh$  ;;=KD%,,!(($e)=> ) ):%&0		$  1rC   c                    UR                  [        5      nU(       aF  U[        R                  :w  a1  [        R
                  " SU< S[        R                  < S3[        SS9  O[        R
                  " S[        SS9  SU;   a'  UR                  S5       H  u  p4[        U5      X'   M     U R                  R                  U5        g )Nz(Pickled model instance's Django version z$ does not match the current version rM      
stacklevelz9Pickled model instance's Django version is not specified.rB  )r   r   r9  r:  warningswarnRuntimeWarningrw   rC  r   r   )r>   rF  pickled_versionrG  rY   s        r?   __setstate__Model.__setstate__y  s    ))$=>&"4"44 '(:(:< #  MMK
 %'$yy)<=(/  >U#rC   Nc                 j    U=(       d    U R                   n[        XR                  R                  5      $ r   )rb   ry   r*  r
  )r>   r   s     r?   _get_pk_valModel._get_pk_val  s#    !tzztWW__--rC   c                 4   U R                   R                  R                  5        HG  nU(       d  M  X R                   R                  :w  d  M'  [	        XR
                  R                  U5        MI     [	        X R                   R                  R                  U5      $ r   )rb   r   r   r*  r   target_fieldr
  )r>   rY   rs   s      r?   _set_pk_valModel._set_pk_val  sd    ::--446K{{jjmm;66>>F 7 tZZ]]22E::rC   c                     U R                  U5      nUS L =(       d)    [        U[        5      =(       a    [        S U 5       5      (       + $ )Nc              3   (   #    U  H  oS L v   M
     g 7fr   r<   r   s     r?   rj   #Model._is_pk_set.<locals>.<genexpr>  s     1LVt)Vs   )rT  rv   r~   r   )r>   r   pk_vals      r?   r3  Model._is_pk_set  sC    !!$'dN N65)Lc1LV1L.L
 	
rC   c                     U R                   R                   Vs1 s H+  nUR                  U R                  ;  d  M  UR                  iM-     sn$ s  snf )zE
Return a set containing names of deferred fields for this instance.
)rb   r  r
  r   )r>   r   s     r?   get_deferred_fieldsModel.get_deferred_fields  sI     ZZ//
/yy- AII/
 	
 
s
   AAc           	      p   Uc  0 U l         Oz[        U SS5      n[        U5      nUR                  5        H  nXT;   d  M
  XE	 UR	                  U5        M     U(       d  g[        S U 5       5      (       a  [        S[        -  5      eUc(  SU 0nU R                  R                  R                  XS9nOUb  UR                  U5      nUR                  U R                  S9nU R                  5       nUb  UR                  " U6 nOWU(       aP  UR                  " U R                   R"                   V	s1 s H!  n	U	R$                  U;  d  M  U	R$                  iM#     sn	6 nUR'                  5       n
U
R                  5       nU R                   R"                   H  nUR$                  U;   a  M  [)        XR$                  [        XR$                  5      5        UR*                  (       d  MQ  UR-                  U
5      (       a"  UR/                  XR1                  U
5      5        M  UR-                  U 5      (       d  M  UR3                  U 5        M     U R                   R4                   HA  nUb  UR6                  U;   d  M  UR-                  U 5      (       d  M0  UR3                  U 5        MC     U R                   R8                   HT  nUb  UR6                  U;   d  M  UR*                  (       d  M+  UR-                  U 5      (       d  MC  UR3                  U 5        MV     U
R:                  R<                  U R:                  l        gs  sn	f )	a  
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   4   #    U  H  n[         U;   v   M     g 7fr   r   r   s     r?   rj   (Model.refresh_from_db.<locals>.<genexpr>  s     3Fq:?Fs   zRFound "%s" in fields argument. Relations and transforms are not allowed in fields.r   )hintsr*  )rc  ry   r   r   remover   r   r   r   r   
db_managerusingfilterr*  r`  onlyrb   r  r
  r   r   is_relation	is_cachedset_cached_valueget_cached_valuedelete_cached_valuerelated_objectsrO   r   r  r   )r>   rj  r   from_querysetprefetched_objects_cacher   rf  db_instance_qsdeferred_fieldsr   db_instancenon_loaded_fieldsrels                r?   refresh_from_dbModel.refresh_from_db  s    >-/D*'.t5PRT'U$[F407MM%( ' 3F333 13=> 
  &E NN88CCECWM)//6M&---9 224+00&9N+00 "ZZ777yy7 AII7N %((*';;=ZZ//E}} 11D--mm)LM   ??;//**41G1G1TU__T**--d3 0 ::--C#((f"4#--:M:M''- .
 ZZ..E5::#7%%%OOD))))$/ / %++..Gs   ,L3L3c                 R   #    [        U R                  5      " XUS9I S h  vN $  N7f)N)rj  r   rs  )r   rz  )r>   rj  r   rs  s       r?   arefresh_from_dbModel.arefresh_from_db  s,     "4#7#78m
 
 	
 
   '%'c                      U R                   R                  U5      n[        XR                  5      $ ! [         a    [        X5      s $ f = f)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.
)rb   r  r   ry   r
  )r>   
field_namer   s      r?   serializable_valueModel.serializable_value  sH    	-JJ((4E t]]++ ! 	-4,,	-s   2 A
	A
c          
      P  ^^^
 SSS S S.m
[         R                  " ST S3[        SS9  [        T5      S-   n[        T
5      S-   nXE:  a  [	        ST S	U S
U S35      eUU
U4S jn[        UR                  5       5       VVV	s/ s H  u  nu  pU" XU5      PM     sn	nn$ s  sn	nnf )NFforce_insertforce_updaterj  update_fieldsz Passing positional arguments to z() is deprecated   rK     Model.z() takes from 1 to z positional arguments but z were givenc                 d   > U[        T5      :  a  UTU    La  [        ST SU  S35      eTU   $ U$ )Nr  z%() got multiple values for argument '')r  r   )
param_nameparam_value	arg_indexr   defaultsmethod_names      r?   	get_param+Model._parse_save_params.<locals>.get_param,  sS    3t9$hz&::#  .&<q*  I&rC   )rM  rN  r1   r  r   	enumeraterx   )r>   r  r   r   total_len_argsmax_len_argsr  ikvr  s    ``       @r?   _parse_save_paramsModel._parse_save_params  s    !!!	
 	.{m;KL$	

 TQ8}q((%8 G!!/ 0= 

	 5>flln4MN4Myq&1	!"4MNNNs   B!Fr  c          	         U(       a  U R                   " USUUUUS.6u  pp4U R                  SS9  U=(       d    [        R                  " U R                  U S9nU(       a  U(       d  U(       a  [        S5      eU R                  R                   Vs1 s H<  nUR                  U R                  ;  d  M  UR                  SL d  M0  UR                  iM>     nnUb_  U(       d  g[        U5      nU R                  R                  nUR                  U5      n	U	(       a  [        SS	R                  U	5      -  5      eOU(       d  U(       a  X0R                  R                   :X  a  [#        5       nU R                  R$                  n
U R                  R                   H8  nX;  d  M
  ['        US
5      (       a  M  UR)                  UR                  5        M:     UR                  U5      nU(       a  [        U5      nU R+                  UUUUS9  gs  snf )a1  
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r  r  r  rj  r  )operation_namer   z6Cannot force both insert and updating in model saving.FNzmThe following fields do not exist in this model, are m2m fields, primary keys, or are non-concrete fields: %sr   through)rj  r  r  r  )r   _prepare_related_fields_for_saver   db_for_writer   r   rb   r  r
  r   r  	frozenset_non_pk_concrete_field_names
differencer   r  r   r   	pk_fieldsrX   r   	save_base)r>   r  r  rj  r  r   r   deferred_non_generated_fieldsr   not_updatable_fieldsr  r   loaded_fieldss                r?   r  
Model.save>  s   " ?C?V?V"))+@<L 	--V-DK,,T^^dK\]UVV ZZ//)
/yy- 23++2F AII/ 	& )

 $ !%m4M**AAK#0#;#;K#H # Kii 456  $ -'%K

,,I33)'%2K2KOOEMM2 4 (223PQM )- 8%%'	 	 	
O)
s   H2HHTc          	         #    U(       a  U R                   " USUUUUS.6u  pp4[        U R                  5      " UUUUS9I S h  vN $  N7f)Nasaver  r  )r  r   r  )r>   r  r  rj  r  r   s         r?   r  Model.asave  s`      ?C?V?V#))+@<L #499-%%'	
 
 	
 
s   A A	AA	c                 *   USL a  gUSL a  U 4$ [        U[        5      (       d  [        S5      eU H^  n[        U[        5      (       d  [        SU< S35      e[	        X5      (       a  M:  [        SUR
                   SU R
                   S35      e   U$ )	NFr<   Tz%force_insert must be a bool or tuple.zInvalid force_insert member. z must be a model subclass.z must be a base of rM   )rv   r~   r   r\   
issubclassrI   )r   r  members      r?   _validate_force_insertModel._validate_force_insert  s    5 46M,..CDD"Ffi003F:=WX  c**3F4G4G3H I"//03  # rC   c           	      f   U=(       d    [         R                  " U R                  U S9nU(       a  U(       d  U(       a   eUb	  U(       d   eU R                  =pgUR                  R                  (       a  UR                  R
                  nUR                  nUR                  (       d  [        R                  " UU UUUS9  UR                  (       a  [        R                  " USS9n	O[        R                  " US9n	U	   Sn
U(       d#  U R                  U5      nU R                  XdXR5      n
U R                  UUU=(       d    U
UUU5      nSSS5        X@R                   l        SU R                   l        UR                  (       d  [&        R                  " UU W(       + UUUS9  gg! , (       d  f       N`= f)a>  
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.
r  N)r   r   rawrj  r  F)rj  	savepoint)rj  )r   r   createdr  r  rj  )r   r  r   rb   r   r   rr   r.   r   r   r   atomicmark_for_rollback_on_errorr  _save_parents_save_tabler  r   r   r,   )r>   r  r  r  rj  r  r   originr   context_managerparent_insertedupdateds               r?   r  Model.save_base  se   " K,,T^^dK lmEE$55~~%99??))**Cyy  MM+ <<)00uNO)DD5QO#O#::<H"&"4"4# &&/G " "   NN$+ !- _s   <AF""
F0c           
         UR                   nSnUc  0 nUR                  R                  5        GHN  u  pU	(       a}  [        XR                   R                  R
                  5      cS  [        X	R
                  5      b=  [        XR                   R                  R
                  [        X	R
                  5      5        UR                  U5      =n
cE  U R                  UUUUUS9nU R                  UUUU=(       d    [        X5      S9nU(       d  SnXU'   O	U
(       d  SnU	(       d  M  [        X	R
                  U R                  UR                   5      5        U	R                  U 5      (       d  GM=  U	R                  U 5        GMQ     U$ )z3Save all the parents of cls using values from self.F)r   rj  r  r  updated_parents)r   rj  r  r  T)rb   r   rx   ry   r*  r
  r   r   r  r  r  rT  rn  rq  )r>   r   rj  r  r  r  r   insertedr   r   parent_updatedr  r  s                r?   r  Model._save_parents
  sO    yy" O!\\//1MF D,,//"9"9:BD--0<lloo55wt]]7ST"1"5"5f"==F"&"4"4"/!-$3 #5 # **"/!0!TJv4T	 +  #H*1'#ummT-=-=fll-KL ??4((--d3I 2J rC   c           
      2   UR                   nUR                  nUR                   V	s/ s H  n	X;  d  M
  U	R                  (       a  M  U	PM!     n
n	U(       a4  U
 V	s/ s H'  n	U	R                  U;   d  U	R
                  U;   d  M%  U	PM)     n
n	U R                  U5      (       d;  UR                  R                  U 5      n[        XR                  R
                  U5        U R                  U5      nU(       d  U(       d  U(       a  [        S5      eSnU(       dL  U(       dE  U(       d>  U R                  R                  (       a#  [        S UR                   5       5      (       a  SnU(       a  U(       d  UR                  R                  U5      nU
 V	s/ s H4  n	U	SU(       a  [!        X	R
                  5      OU	R#                  U S5      4PM6     nn	U=(       d    UnU R%                  U5      nU R'                  XXUU5      nU(       a  U(       d  [)        S5      eU(       a  U(       d  [)        S5      eU(       GdN  UR*                  (       a  UR*                  nUR-                  U 5      nUR                  R                  U5      R.                  " S0 UD6R1                  [3        [5        [7        S5      [9        S	5      -   [;        5       S
9[9        S5      5      S9S   U l        UR                   V	s/ s H/  n	U	R                  (       a  M  U(       d  XR>                  Ld  M-  U	PM1     nn	UR@                  nU RC                  UR                  UUUU5      nU(       a0  [E        US   U5       H  u  nn[        U UR
                  U5        M     U$ s  sn	f s  sn	f s  sn	f s  sn	f )zX
Do the heavy-lifting involved in saving. Update or insert the data
for a single table.
z5Cannot force an update in save() with no primary key.Fc              3   n   #    U  H+  oR                  5       =(       d    UR                  5       v   M-     g 7fr   )has_defaulthas_db_defaultr   s     r?   rj   $Model._save_table.<locals>.<genexpr>b  s%     R>aMMO9q'7'7'99>s   35TNz&Forced update did not affect any rows.z0Save with update_fields did not affect any rows._orderr  )output_fieldr   )_order__maxr  r<   )#rb   r  local_concrete_fieldsr  rO   r
  r3  r*  get_pk_value_on_saver   r   r  r   allr   rj  ry   r.   rT  
_do_updater   r   get_filter_kwargs_for_objectrk  	aggregater%   r   r   r   r   r  
auto_fielddb_returning_fields
_do_insertr	  )r>   r  r   r  r  rj  r  r   r  r   non_pks_non_generatedr]  pk_setr  base_qsr   forced_updater   filter_argsr   returning_fieldsresultsrY   s                          r?   r  Model._save_table9  s2    yyNN	 //!
/! *+++ / 	 !
  /%.A66]*aii=.H . " % t$$WW11$7FD''//62&<=TUU   ""R4>>RRRL,''--e4G / /A	 14WT99-!**T5:Q
 /   *9\M%%d+Foo}G G#$LMMW#$VWW)) 22#@@F%%++E2V +)+Y$,- #Ha 8|~ "!H	%   $	%  333A{{ (.!??2J 3  
  $77oo!!5&2BCG $'
4D$ELE5D%--7 %F_!
%2Fs4   	NNN$N
N
;N)NNNc                 T   UR                  US9nU(       d  USL=(       d    UR                  5       $ U R                  R                  (       aI  U(       dB  UR                  5       =(       a+    UR	                  U5      S:  =(       d    UR                  5       $ UR	                  U5      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   )rk  existsrb   select_on_save_update)r>   r  rj  r]  r   r  r  filtereds           r?   r  Model._do_update  s    
 >>V>, !,A0AA::$$]! 	D !!&)A-B1B '!++rC   c                 *    UR                  U /UUUUS9$ )zs
Do an INSERT. If returning_fields is defined then this method should
return the newly created data for the model.
)r   r  rj  r  )_insert)r>   r   rj  r   r  r  s         r?   r  Model._do_insert  s+    
 F-  
 	
rC   c                 ,   U R                   R                   GHG  nU(       a  X2;  a  M  UR                  (       d  M%  UR                  U 5      (       d  M=  [	        XR
                  S 5      nU(       d  M\  UR                  5       (       dS  UR                  R                  (       d  UR                  R                  U5        [        U< SUR
                  < S35      e[	        XR                  5      UR                  ;   a  [        XR
                  U5        [	        XCR                  R                  5      [	        XR                  5      :w  d  GM6  UR                  U 5        GMJ     U R                   R                   H  nU(       a  X2;  a  M  UR                  (       d  M$  UR                  U 5      (       d  M<  [!        US5      (       d  MO  UR#                  U S S9nU(       d  Mh  UR                  5       (       a  M  [        U SUR
                   S35      e   g )NzB() prohibited to prevent data loss due to unsaved related object 'rp   fk_field)default)rb   r  rm  rn  ry   rO   r3  r   multiplerq  r   r
  empty_valuesr   rW  r   rX   rp  )r>   r  r   r   r   s        r?   r  &Model._prepare_related_fields_for_save  s   
 ZZ//E%-    U__T%:%:dJJ5 ~~'' --66**>>sC$2@%**N  T==1U5G5GG D**c2 3 2 2 : :;w--@  --d3A 0D ZZ..E%-!!!OOD))E:..,,T4,@3s~~//$)* +338::,bB  /rC   c                 Z   U R                  5       (       dE  [        U R                  R                  < SU R                  R                  R
                  < S35      eU=(       d    [        R                  " U R                  U S9n[        XS9nUR                  U /US9  UR                  5       $ )Nz% object can't be deleted because its z attribute is set to None.r  )rj  r  )keep_parents)r3  r   rb   r;  r*  r
  r   r  r   r   collectdelete)r>   rj  r  	collectors       r?   r  Model.delete  s      "jj44djjmm6K6KM  K,,T^^dKE7	4&|<!!rC   c                 R   #    [        U R                  5      " UUS9I S h  vN $  N7f)N)rj  r  )r   r  )r>   rj  r  s      r?   adeleteModel.adelete  s+     "4;;/%
 
 	
 
r  c                     [        XR                  5      n[        [        UR                  5      5      n[        UR                  [        U5      U5      SS9$ )NT)strings_only)ry   r
  dictr3   flatchoicesr2   r   )r>   r   rY   choices_dicts       r?   _get_FIELD_displayModel._get_FIELD_display  sI    mm,M%*;*;<=]5159
 	
rC   c                    U R                  5       (       d  [        S5      eU(       a  SOSnU(       a  SOSn[        XR                  5      n[        R
                  " UR                  U4SU 3U R                  4/[        R                  S9n[        R
                  " XqR                   SU 3U4/[        R                  S9nU R                  R                  R                  U R                  R                  5      R                  " S0 UD6R                  U5      R!                  U< UR                  < 3S	U-  5      n US
   $ ! ["         a3    U R%                  SU R                  R&                  R(                  -  5      ef = f)Nz8get_next/get_previous cannot be used on unsaved objects.gtlt -pk__)	connector__z%spkr   z!%s matching query does not exist.r<   )r3  r   ry   r
  r)   createrO   r*  ANDORr   r   rj  r  r   rk  order_byr  rd   rb   r;  )	r>   r   r   r   oporderparamqqss	            r?   _get_next_or_previous_by_FIELD$Model._get_next_or_previous_by_FIELD  s=     WXXT$3mm,HHuzz5)d2$K+ABaeeTHHaZZL2$/78ADDINN++11$++..AV VAYXuzz2FUNC	 		a5L 	##3dnn6J6J6V6VV 	s   =E =E?c                 F   SU-  n[        X5      (       Gd  U(       a  SOSnU(       a  SOSnU R                  R                  nUR                  U 5      nU R                  R
                  R                  " S0 UD6R                  " S0 SU-  U R                  R
                  R                  S5      R                  " S0 U R                  R                  R                  U R                  0D60D6R                  U5      S S R                  5       n[        XU5        [        X5      $ )	Nz__%s_order_cacher  r  r  z-_orderz
_order__%sr  r<   )rX   rb   r   r  r   r   rk  r   r*  rO   r  r   r   ry   )r>   r   	cachenamer  r  order_fieldr  r   s           r?   r   $Model._get_next_or_previous_in_order*  s   &0	t'' dB 'HYE**::K%BB4HK//66EE  %"nn==DDXNUU #zz}}11477; %!	%   DS)t''rC   c                 ,  ^ Tc
  [        5       mU=(       d    U R                  n0 n/ nUR                   H  nUR                  T;   a  M  UR                  (       aH  [        U4S jU R                  UR                  5       5       5      (       a  M[  UR                  U5        Mn  [        XR                  5      nU(       a  [        US5      (       d  [        Xe5      nXcUR                  '   M     ST;  a#  [        U R                  UR                  5      US'   U(       ar  UR                  5        VVs0 s H  u  pv[        U5      U_M     nnnU H>  n	[!        U	R                  R#                  U5      U	R$                  5      X9R                  '   M@     U$ s  snnf )Nc              3   4   >#    U  H  nUS    T;   v   M     g7fr   Nr<   )rh   refexcludes     r?   rj   2Model._get_field_expression_map.<locals>.<genexpr>K  s!      J Fg%Js   resolve_expressionr*  )r   rb   r  rO   r  r   _get_expr_references
expressionrD  ry   r
  rX   r   r*  rx   r(   r   replace_expressionsr  )
r>   r   r  	field_mapgenerated_fieldsr   rY   rO   replacementsgenerated_fields
     `       r?   _get_field_expression_mapModel._get_field_expression_mapA  sW   ?eG!tzz	//EzzW$ #889I9IJ    ''.D--0E/C D De+$)ejj! 0 w#DGGTWW5IdO>Goo>OP>O{tAdGUN>OLP#32C#..BB<P#003	../ $4  Qs   /Fc                     U R                  5       (       d  [        SU -  5      e[        XR                  R	                  5       R
                  5      $ )Nz9Unsaved model instance %r cannot be used in an ORM query.)r3  r   ry   r   get_related_fieldr
  )r>   r   s     r?   prepare_database_saveModel.prepare_database_saveb  sF      KdR  t//AACKKLLrC   c                     g)a!  
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?   cleanModel.cleani  s     	rC   c                    U R                  US9u  p#U R                  U5      nU R                  U5      nUR                  5        H&  u  pgUR	                  U/ 5      R                  U5        M(     U(       a  [        U5      eg)zP
Check unique constraints on the model and raise ValidationError if any
failed.
r  N)_get_unique_checks_perform_unique_checks_perform_date_checksrx   
setdefaultextendr   )r>   r  unique_checksdate_checkserrorsdate_errorsr  r  s           r?   validate_uniqueModel.validate_uniquer  s    
 &*%<%<W%<%M",,];//<%%'DAa$++A. ( !&)) rC   c                 "  ^ Tc
  [        5       m/ nU R                  U R                  R                  4/n/ nU(       a#  U R                  U R                  R                  4/nU R                  R
                   H  nUR                  R                  (       a&  UR                  XfR                  R                  45        U(       d  MM  UR                  R                  (       d  Mj  UR                  XfR                  R                  45        M     U HF  u  pxU H;  n	[        U4S jU	 5       5      (       a  M  UR                  U[        U	5      45        M=     MH     U(       aV  U HP  u  pzU
 HE  n[        U4S jUR                   5       5      (       a  M)  UR                  X{R                  45        MG     MR     / nU R                  U R                  R                  4/nU R                  R
                   H)  nUR                  XfR                  R                  45        M+     U GHl  u  p~U GH_  nUR                  nUT;   a  M  [        U[        5      (       aG  [        S UR                   5       5      nTR                  U5      (       a  UR                  UU45        Mt  UR                  (       a  UR                  UU445        UR                   (       a/  UR                   T;  a  UR                  USUUR                   45        UR"                  (       a/  UR"                  T;  a  UR                  USUUR"                  45        UR$                  (       d  GM-  UR$                  T;  d  GM@  UR                  USUUR$                  45        GMb     GMo     X<4$ )aK  
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.
c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r<   rh   rO   r  s     r?   rj   +Model._get_unique_checks.<locals>.<genexpr>  s     =ut7?u   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r<   r=  s     r?   rj   r>    s     M;L4w;Lr?  c              3   8   #    U  H  oR                   v   M     g 7fr   r   rh   r   s     r?   rj   r>    s     !C(**(r   dateyearmonth)r   r   rb   unique_togethertotal_unique_constraintsall_parentsrD  r   r~   r   r   rO   rv   r    
isdisjointuniqueunique_for_dateunique_for_yearunique_for_month)r>   r  include_meta_constraintsr5  unique_togethersconstraintsparent_classmodel_classrF  checkmodel_constraints
constraintr6  fields_with_classr   r   rO   namess    `                r?   r0  Model._get_unique_checks  s    ?eG!^^TZZ-G-GHI# NNDJJ,O,OPQK JJ22L!!11 ''!#5#5#E#EF ('L,>,>,W,W,W""!#5#5#N#NO 3 -=(K(=u===!((+uU|)DE ) -= $2=."3JM:;L;LMMM%,,k;L;L-MN #4 3> 
 #nndjj.E.EFG JJ22L$$l4F4F4S4S%TU 3 $5Kvv7?a!455!!C!((!CCE))%00%,,k5-AB88!((+w)?@$$):):')I&&VT1CTCT'UV$$):):')I&&VT1CTCT'UV%%%!*<*<G*K&&WdADVDV'WX!  $5$ ))rC   c                 p   0 nU GH  u  p40 nU H  nU R                   R                  U5      n[        XR                  5      nUb%  US:X  a!  [        R
                  R                  (       a  M]  XsR                   R                  ;   a  U R                  R                  (       d  M  X[        U5      '   M     [        U5      [        U5      :w  a  M  UR                  R                  " S0 UD6n	U R                  UR                   5      n
U R                  R                  (       d/  U R                  UR                   5      (       a  U	R!                  U
S9n	U	R#                  5       (       d  GMa  [        U5      S:X  a  US   nO[$        nUR'                  U/ 5      R)                  U R+                  X45      5        GM     U$ )Nr  rg  r  r   r<   )rb   r  ry   r
  r   features!interprets_empty_strings_as_nullsr  r  r   strr  r   rk  rT  r3  r  r  r
   r3  rD  unique_error_message)r>   r5  r7  rR  unique_checklookup_kwargsr  r   lookup_valuer  model_class_pkkeys               r?   r1  Model._perform_unique_checks  sg   )6%K M*
JJ((4&tYY7' B&"++MM ))333DKK<N<N1=c*o. +  < C$66--44E}EB "--k.?.?@N;;%%$//+:K:K*L*LZZ>Z2yy{{|$)&q/C*C!!#r*11--kHQ *7X rC   c                 `   0 nU GH$  u  p4pV0 n[        X5      nUc  M  US:X  a7  UR                  USU-  '   UR                  USU-  '   UR                  USU-  '   O[        X5      Xv< SU< 3'   [        X5      Xu'   UR                  R
                  " S0 UD6n	U R                  R                  (       d.  U R                  5       (       a  U	R                  U R                  S9n	U	R                  5       (       d  M  UR                  U/ 5      R                  U R                  XEU5      5        GM'     U$ )NrC  z%s__dayz	%s__monthz%s__yearr  rg  r<   )ry   dayrE  rD  r   rk  r  r   r3  r  r*  r  r3  rD  date_error_message)
r>   r6  r7  rR  lookup_typer   
unique_forr_  rC  r  s
             r?   r2  Model._perform_date_checks  s   ;F7KeM 4,D|f$8<i*45:>**kJ679=j:56FMG*kBC $+4#7M --44E}EB ;;%%$//*;*;ZZ477Z+yy{{!!%,33++K
K1 <G6 rC   c                    U R                   nUR                  U5      n[        UR                  S   SU [	        UR
                  5      UU[	        UR
                  5      U[	        UR                  U5      R
                  5      S.S9$ )NrK  )r   r   rg  r   field_label
date_fielddate_field_labelmessagecodeparams)rb   r  r   error_messagesr4   verbose_name)r>   rg  r  rh  r   r   s         r?   rf  Model.date_error_message  s|    zzz*(():;"&t'8'89*#'(:(:;($,T^^J-G-T-T$U
 	
rC   c                    UR                   nU U[        UR                  5      US.n[        U5      S:X  aD  UR	                  US   5      n[        UR                  5      US'   [        UR                  S   SUS9$ U Vs/ s H'  n[        UR	                  U5      R                  5      PM)     nn[        U[        S5      5      US'   [        [        S	5      S
US9$ s  snf )N)r   rR  r   r^  r  r   rk  rJ  rn  andfield_labelsz9%(model_name)s with this %(field_labels)s already exists.rF  )	rb   r4   rs  r  r  r   rr  r5   _)r>   rR  r^  r   rq  r   r   rw  s           r?   r]  Model.unique_error_message'  s       &"4#4#45(	
 |!NN<?3E$,U-?-?$@F=!",,X6  COBNQ*778,   &3<5%JF>""UV& 	s   >.Cc                    U R                   U R                  R                  4/nU R                  R                   HF  nUR                  R                  (       d  M   UR	                  X"R                  R                  45        MH     U$ r   )r   rb   rP  rH  rD  )r>   rP  rQ  s      r?   get_constraintsModel.get_constraintsG  sh    

(>(>?@ JJ22L!!---""L2D2D2P2P#QR 3 rC   c           	         U R                  5       n[        R                  " U R                  U S9n0 nU H  u  pVU H  n UR	                  XPXS9  M     M!     U(       a  [        U5      eg ! [
         az  n[        USS 5      S:X  aM  [        UR                  5      S:X  a4  UR                  UR                  S   / 5      R                  U5         S nAM  UR                  U5      n S nAM  S nAff = f)Nr  )r  rj  rp  rJ  r  r   )r{  r   r  r   validater   ry   r  r   r3  rD  update_error_dict)	r>   r  rP  rj  r7  rR  rT  rU  es	            r?   validate_constraintsModel.validate_constraintsN  s    **,##DNNTB.9*K/
	=''7'X 0 /: !&))  ' =640H<
 1 12a7))**;*;A*>CJJ1MM!"!4!4V!<=s   A**
C.4AC)C))C.c                    0 nUc  [        5       nO[        U5      n U R                  US9   U R	                  5         U(       a=  U H'  nU[
        :w  d  M  Xa;  d  M  UR                  U5        M)      U R                  US9  U(       a=  U H'  nU[
        :w  d  M  Xa;  d  M  UR                  U5        M)      U R                  US9  U(       a  [        U5      eg! [         a  nUR                  U5      n SnANSnAff = f! [         a  nUR                  U5      n SnANSnAff = f! [         a  nUR                  U5      n SnANSnAff = f! [         a  nUR                  U5      n SnANSnAff = f)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   r9  r  )r>   r  r9  r  r7  r  rO   s          r?   
full_cleanModel.full_cleanb  sZ    ?eG'lG	1g.	1JJL
 ++0CKK% 5$$W$5
  ++0CKK% 5))'): !&)) =  	1((0F	1  	1((0F	1 # 5,,V45 # 5,,V45s^   C D  2D( 6E 
C="C88C= 
D%
D  D%(
E2EE
E5E00E5c           	         Uc
  [        5       n0 nU R                  R                   H  nUR                  U;   d  UR                  (       a  M&  [        XR                  5      nUR                  (       a  XCR                  ;   a  M]  [        U[        5      (       a  Mt   [        XR                  UR                  X@5      5        M     U(       a  [        U5      eg! [         a#  nUR                  X#R                  '    SnAM  SnAff = f)zg
Clean all fields and raise a ValidationError containing a dict
of all validation errors if any occur.
N)r   rb   r   rO   r  ry   r
  blankr  rv   r   r   r,  r   
error_list)r>   r  r7  r   	raw_valuer  s         r?   r  Model.clean_fields  s    
 ?eG""Avv AKK  ii0Iww96)_55.ii)AB #  !&))  # .!"vv.s   %C
D!C??Dc                 N   / U R                  5       QU R                  5       QU R                  " S0 UD6QnU R                  R                  (       GdT  UR                  S5      =(       d    / nU/ U R                  " S0 UD6QU R                  5       QU R                  U5      Q-  n/ U R                  5       QU R                  5       QU R                  5       QU R                  5       QU R                  5       Q7nUR                  U5        U(       d  UR                  U R                  5       5        U/ U R!                  5       QU R#                  U5      QU R%                  5       QU R'                  U5      QU R)                  5       QU R+                  U5      QU R-                  5       Q-  nU$ )N	databasesr<   )_check_swappable_check_model_check_managersrb   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_keyr4  _check_column_name_clashes_check_unique_together_check_indexes_check_ordering_check_constraints_check_default_pk_check_db_table_comment_check_composite_pk)r   r   r7  r  clash_errorss        r?   rS  Model.check  s   
!!#

   *6*

 yy   

;/52I "",V,99; --i8 F
$$&..0 88: HHJ	
 ..0L MM,'  c<<>? ++-##I. $$& ''	2	
 &&( ,,Y7 ((* F rC   c                    U R                   R                  (       Gd/  U R                   R                  R                  (       Ga	  [	        U R                   R                  [
        5      (       a/  U R                   R                  R                  R                  (       d  [        R                  " S5      (       d  U R                   R                  (       a{  U R                   R                  R                  (       dV  [        R                  " S[        R                   S3SU R                   R                  R                  R                    S3U SS9/$ / $ )NDEFAULT_AUTO_FIELDzPAuto-created primary key used when not defining a primary key type, by default 'rp   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)rb   ra   r*  rr   rv   r"   r   rs   r   is_overriddenr   !_is_default_auto_field_overriddenr	   Warningr  r   rI   r   s    r?   r  Model._check_default_pk  s     		"""		))) 399<<77IILL--99**+?@@		$$II((JJ  334B8 K99//99FFG HNO
 $  	rC   c           
      \   / nU R                   nUR                  n[        U[        5      (       d  U$ [	        [
        5      nUR                   H  nS n UR                  U5      nU(       d  U< S3nO{UR                  (       d  U< S3nOcUR                  (       a  U< S3nOKUR                  (       a  U< S3nO3XrR                  ;  a  U< S3nOXGR                     R                  U5        U(       d  M  UR                  [        R                  " U< S3UU SS95        M     UR!                  5        Ha  u  p[#        U	5      S	:  d  M  U	tpZS
R%                  S U
 5       5      nUR                  [        R                  " U S3U SU< S3U SS95        Mc     U$ ! [         a    S n GNFf = f)Nz is not a valid field.z field has no column.z field may not set 'null=True'.z field is a generated field.z field is not a local field.z1 cannot be included in the composite primary key.zmodels.E042r  r  r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   rB  s     r?   rj   ,Model._check_composite_pk.<locals>.<genexpr>!  s     &EutE{{r   z and z are the same fields.)rb   r*  rv   r    r   listr   r  r   r  nullr  r   rD  r	   Errorrx   r  r   )r   r7  r   r*  seen_columnsr  r  r   r  r   rest
duplicatess               r?   r  Model._check_composite_pk  s   yyWW"122M"4(..JDz2 $'=>\\$'<=$'FG$'CD///$'CD\\*11*=tLL%. ) !(- )@ $0#5#5#7F;!#$/!
!YY&E&EE
LL%, '  *|5>ST(	 $8 S % s   FF+*F+c           	      x   U R                   R                  (       d  / $ / nU H  n[        R                  " X05      (       d  M   [        U   nUR
                  R                  (       a  MF  SU R                   R                  ;   a  Mb  UR                  [        R                  " UR                   S3U SS95        M     U$ )Nsupports_commentsz8 does not support comments on tables (db_table_comment).zmodels.W046r   r  )rb   db_table_commentr   allow_migrate_modelr   rZ  r  required_db_featuresrD  r	   r  display_name)r   r  r7  r   r   s        r?   r  Model._check_db_table_comment.  s    yy))IB--b66$RJ##555&#))*H*HHNN%223 45 6(	   rC   c                 "   / nU R                   R                  (       a-   [        R                  " U R                   R                  5        U$ U$ ! [         a?    UR                  [        R                  " SU R                   R                  -  SS95         U$ [         ap    U R                   R                  R                  S5      u  p#UR                  [        R                  " SU R                   R                  < SU< SU< S3SS95         U$ f = f)	z"Check if the swapped model exists.z-'%s' is not of the form 'app_label.app_name'.zmodels.E001r  rM   r  z' references 'z0', which has not been installed, or is abstract.zmodels.E002)rb   r   r   	get_modelr   rD  r	   r  	swappableLookupErrorsplit)r   r7  rc   r   s       r?   r  Model._check_swappableE  s     99syy001& v%  LLG))--.("   	(+		(9(9(?(?(D%	LL 99..	:G )	 	s   *A ADA5DDc                    / nU R                   R                  (       ag  U R                   R                  (       d  U R                   R                  (       a1  UR	                  [
        R                  " SU R                  -  SS95        U$ )Nz'Proxy model '%s' contains model fields.zmodels.E017r  )rb   r   r   r   rD  r	   r  rG   r   r7  s     r?   r  Model._check_model`  sY    99??yy%%)E)ELLACLLP( rC   c                     / nU R                   R                   H$  nUR                  UR                  " S0 UD65        M&     U$ )zPerform all manager checks.r<   )rb   r   r4  rS  )r   r   r7  r   s       r?   r  Model._check_managersm  s:     yy))GMM'--1&12 *rC   c                    / nU R                   R                   H$  nUR                  UR                  " S0 UD65        M&     U R                   R                   H&  nUR                  UR                  " SSU 0UD65        M(     U$ )zPerform all field checks.
from_modelr<   )rb   r   r4  rS  r   )r   r   r7  r   s       r?   r  Model._check_fieldsu  sk     YY++EMM%++//0 ,YY11EMM%++???@ 2rC   c           	         / n/ nU R                   R                  nS U 5       nS U 5       nU H  nUR                  R                  U UR                  R                  UR                  R
                  4nXR;   aR  UR                  [        R                  " SUR                  R                  R                   R                  -  U SS95        M  UR                  U5        M     U$ )zBCheck if no relationship model is used by more than one m2m field.c              3   |   #    U  H2  n[        UR                  R                  [        5      (       d  M.  Uv   M4     g 7fr   )rv   r   r   r\   r   s     r?   rj   =Model._check_m2m_through_same_relationship.<locals>.<genexpr>  s%     SVz!..2F2F	'R!!V   -<	<c              3   |   #    U  H2  n[        UR                  R                  [        5      (       d  M.  Uv   M4     g 7fr   )rv   r   r  r\   r   s     r?   rj   r    s%     UVz!..2H2H)'T!!Vr  zWThe model has two identical many-to-many relations through the intermediate model '%s'.zmodels.E003r  )
rb   r   r   r   r  through_fieldsrD  r	   r  r|   )r   r7  seen_intermediary_signaturesr   r   	signatures         r?   r  *Model._check_m2m_through_same_relationship  s     ')$-- TVS VVUA$$&&--	I 8LL?..0066<<=  ( -33I>% & rC   c                 `   U R                   R                   Vs/ s H1  oR                  S:X  d  M  XR                   R                  :w  d  M/  UPM3     nnU(       aO  US   R                  (       d;  U R                   R                  R                  S:X  a  [
        R                  " SU SS9/$ / $ s  snf )z%Check if `id` field is a primary key.r  r   zP'id' can only be used as a field name if the field also sets 'primary_key=True'.zmodels.E004r  )rb   r   rO   r*  primary_keyr	   r  )r   r   r   s      r?   r  Model._check_id_field  s     yy--
-!4AADUA- 	 
 &)//CIILL4E4E4M/$	  I
s   B+B+B+c                    / n0 nU R                   R                   H  nUR                   R                   H  nUR                  UR                  5      =(       d$    UR                  UR
                  5      =(       d    SnU(       ar  UR                  [        R                  " SUR                  < SUR                  R                   < SUR                  < SUR                  R                   < S3	U SS95        XBUR                  '   XBUR
                  '   M     M     U R                   R                   H9  nUR                   R                  5        H  nXB;  d  M
  XBUR                  '   M     M;     U R                   R                  R                  5        H  nU(       d  M  UR                  UR                  5      =(       d    SnU(       d  M9  UR                  [        R                  " SUR                   SUR                   SUR                  R                    S3U S	S95        M     U R                   R                   GH  nUR                  UR                  5      =(       d$    UR                  UR
                  5      =(       d    SnUR                  S
:H  =(       a.    U=(       a%    UR                  S
:H  =(       a    UR                  U :H  nU(       aa  U(       dZ  UR                  [        R                  " SUR                  < SUR                  < SUR                  R                   < S3US	S95        XBUR                  '   XBUR
                  '   GM     U$ )z2Forbid field shadowing in multi-table inheritance.NzThe field 'z' from parent model 'z' clashes with the field 'rp   zmodels.E005r  z' from model 'zmodels.E006r  )rb   rH  r   r   rO   r
  rD  r	   r  r   
get_fieldsr   r   )r   r7  used_fieldsr   r   clashrs   id_conflicts           r?   r  Model._check_field_name_clashes  sw     ii++F\\..#/U;??1993MUQUMM  %zz5;;+<+<affaggmmU !$,	 '(AFF#)*AII& / ,( ii++F\\,,.'*+' / , 99,,335KOOK$4$45=EuLL%k&6&6%7 8!JJ<~ekk6G6G5HL(	 6 ''AOOAFF+Q{qyy/IQTE $V5VUZZ4-?VEKKSVDV  [LL./ffejj%++BSBSU(	 #$%&		"' (* rC   c           
         / n/ nU R                   R                   Hg  nUR                  nU(       a@  XA;   a;  UR                  [        R
                  " SUR                  < SU< S3SU SS95        MV  UR                  U5        Mi     U$ )NzField 'z' has column name 'z ' that is used by another field.z$Specify a 'db_column' for the field.zmodels.E007r  )rb   r   r  rD  r	   r  rO   )r   used_column_namesr7  r   column_names        r?   r   Model._check_column_name_clashes  s}     ''A((K {?LL,-FFKAC( "((5 (" rC   c                 2   / nU R                   nUR                  S5      (       d  UR                  S5      (       a*  UR                  [        R
                  " SU-  U SS95        U$ [        U;   a(  UR                  [        R
                  " SU-  U SS95        U$ )Nrx  zgThe model name '%s' cannot start or end with an underscore as it collides with the query lookup syntax.zmodels.E023r  zbThe model name '%s' cannot contain double underscores as it collides with the query lookup syntax.zmodels.E024)rG   
startswithendswithrD  r	   r  r   )r   r7  r   s      r?   r  )Model._check_model_name_db_lookup_clashes  s    \\
  %%)<)<S)A)AMMCEOP$	"  :%MM@BLM$	 rC   c           	          / nU R                   R                  nS U R                   R                  SS9 5       nU H2  nXB;   d  M
  UR                  [        R
                  " SU-  U SS95        M4     U$ )Nc              3   ~   #    U  H3  nUR                   (       d  M  UR                  c  M%  UR                  v   M5     g 7fr   )rm  related_modelr
  r   s     r?   rj   LModel._check_property_name_related_field_accessor_clashes.<locals>.<genexpr>1  s0      #
9}} !" AII9s   ===Freversez8The property '%s' clashes with a related field accessor.zmodels.E025r  )rb   r  _get_fieldsrD  r	   r  )r   r7  r  related_field_accessorsaccessors        r?   r  9Model._check_property_name_related_field_accessor_clashes-  s|    22#
YY**5*9#

 0H)LL$&./(	 0 rC   c                     / n[        S U R                  R                   5       5      S:  a%  UR                  [        R
                  " SU SS95        U$ )Nc              3   J   #    U  H  oR                   (       d  M  S v   M     g7f)r  N)r  r   s     r?   rj   2Model._check_single_primary_key.<locals>.<genexpr>E  s     B0QMMqq0s   #	#r  zBThe model cannot have more than one field with 'primary_key=True'.zmodels.E026r  )sumrb   r   rD  r	   r  r  s     r?   r  Model._check_single_primary_keyB  sN    B#))00BBQFMM*$	 rC   c                    [        U R                  R                  [        [        45      (       d  [
        R                  " SU SS9/$ [        S U R                  R                   5       5      (       a  [
        R                  " SU SS9/$ / nU R                  R                   H$  nUR                  U R                  US5      5        M&     U$ )z,Check the value of "unique_together" option.z*'unique_together' must be a list or tuple.zmodels.E010r  c              3   X   #    U  H   n[        U[        [        45      (       + v   M"     g 7fr   )rv   r~   r  )rh   r   s     r?   rj   /Model._check_unique_together.<locals>.<genexpr>\  s(      
3 6E4=1113s   (*z7All 'unique_together' elements must be lists or tuples.zmodels.E011rF  )
rv   rb   rF  r~   r  r	   r  r   r4  _check_local_fields)r   r7  r   s      r?   r  Model._check_unique_togetherP  s     #))33eT]CC@$   
))33
 
 

 M$  F))33c55f>OPQ 4MrC   c           
         / n[        5       nU R                  R                   GH  nUR                  S   S:X  d"  UR                  S   R	                  5       (       a2  UR                  [        R                  " SUR                  -  U SS95        [        UR                  5      UR                  :  a>  UR                  [        R                  " SUR                  UR                  4-  U SS95        UR                  (       d  M  UR                   H*  nUR                  S U R                  U5       5       5        M,     GM     U GH  n[        R                  " X`5      (       d  M!  [         U   nUR"                  R$                  (       dx  S	U R                  R&                  ;   d^  [)        S
 U R                  R                   5       5      (       a3  UR                  [        R*                  " SUR,                  -  SU SS95        UR"                  R.                  (       dx  SU R                  R&                  ;   d^  [)        S U R                  R                   5       5      (       a3  UR                  [        R*                  " SUR,                  -  SU SS95        UR"                  R0                  (       a  GMn  SU R                  R&                  ;   a  GM  [)        S U R                  R                   5       5      (       d  GM  UR                  [        R*                  " SUR,                  -  SU SS95        GM     U R                  R                   VVV	s/ s H  oDR2                    H  u  pUPM	     M     n
nnn	XR                  R                   VVs/ s H  oDR4                    H  oPM     M     snn-  n
X-  n
UR7                  U R9                  U
S5      5        U$ s  sn	nnf s  snnf )z/Check fields, names, and conditions of indexes.r   rx  z@The index name '%s' cannot start with an underscore or a number.zmodels.E033r  z8The index name '%s' cannot be longer than %d characters.zmodels.E034c              3   *   #    U  H	  oS    v   M     g7fr  r<   )rh   r  s     r?   rj   'Model._check_indexes.<locals>.<genexpr>  s      &*N3A*Ns   supports_partial_indexesc              3   <   #    U  H  oR                   S Lv   M     g 7fr   )	conditionrh   r   s     r?   rj   r    s     Q?PeooT1?Ps   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   8   #    U  H  oR                   v   M     g 7fr   )includer  s     r?   rj   r    s     C1Bmm1Br   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   8   #    U  H  oR                   v   M     g 7fr   )contains_expressionsr  s     r?   rj   r    s     P>OU00>Or   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.W043r   )r   rb   r   rO   isdigitrD  r	   r  r  max_name_lengthr  expressionsr   r  r   r  r   rZ  r  r  r   r  r  r  r  fields_ordersr  r4  r  )r   r  r7  
referencesr   r  r   r   r   rx  r   r  s               r?   r  Model._check_indexesn  s3    U
YY&&E zz!}#uzz!}'<'<'>'>LL').4(	 5::!6!66LL&).U5J5J(KL(	 )))"'"3"3J%% &*-*B*B:*N&  #4- '4 B--b66$RJ##<<-1O1OOQsyy?P?PQQQNNF$112:  (	 ##==.#))2P2PPC1B1BCCCNNK$112B  (	 ##???0CII4R4RRPcii>O>OPPPNNE$112:  (	Q j  #yy00
0eATATXUEATE0 	 
 			(9(9W(9ug77(9WWc--fi@A
 Xs   !OOc                 j   SSK Jn  0 nU R                  R                  SS9 H2  nXTUR                  '   [        US5      (       d  M$  XTUR                  '   M4     / nU GH  n XG   n[        UR                  UR                  5      (       a4  UR                  [        R                  " SU< SU< SU< S	3U S
S95        Mb  [        XSR                  5      (       a3  UR                  [        R                  " U< SU< SU< S3U SS95        M  XPR                  R                  ;  aJ  UR                  [        R                  " SU< SU< SU R                  R                  < S	3SU SS95        GM  GM     U$ ! [          a3    UR                  [        R                  " SU< SU< S	3U SS95         GMU  f = f)Nr   )modelsFr  r
  r  z' refers to a ManyToManyField 'z.', but ManyToManyFields are not permitted in 'rp   zmodels.E013r  z! refers to a CompositePrimaryKey z0, but CompositePrimaryKeys are not permitted in rM   zmodels.E048z' 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  rb   r  rO   rX   r
  rv   r   ManyToManyRelrD  r	   r  r    r   r;  r  )r   r   optionr  forward_fields_mapr   r7  r  s           r?   r  Model._check_local_fields  s   $  YY**5*9E-2uzz*ui((495==1 :
  J0*6 e00&2F2FGGMM !' * & !$,
  'A'ABBMM%j(I)n -,,2:Q8 !$, ))"8"88MM'-z399;P;PR!W #, 9Q !d _  LL #&
  (
 
s   !E558F21F2c                    U R                   R                  (       a  [        R                  " SU SS9/$ U R                   R                  (       d  U R                   R
                  (       d  / $ [        U R                   R
                  [        [        45      (       d  [        R                  " SU SS9/$ / nU R                   R
                  nS U 5       nS U 5       n/ n/ nU H1  n[        U;   a  UR                  U5        M   UR                  U5        M3     UnU H  nU nSnUR                  [        5       Ht  n	 U	S	:X  a  UR                   R                  nOUR                   R                  U	5      nUR                  (       a%  UR                  S
   R                   R"                  nMr  SnMv     M     U Vs1 s H  oUS	:w  d  M
  UiM     nn/ n
U R                   n[-        [.        R0                  " S [/        UR2                  UR4                  5       5       5      5      nU
R7                  X,-
  5        U
 H+  nUR                  [        R                  " SU-  U SS95        M-     U$ ! [$        [&        4 a\    Ub$  UR)                  U	5      cB  UR+                  U	5      c,  UR                  [        R                  " SU-  U SS95         GM   GM   GM  f = fs  snf )zM
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.E021r  zQ'ordering' must be a tuple or list (even if you want to order by only one field).zmodels.E014c              3   d   #    U  H&  n[        U[        5      (       d  M  US :w  d  M"  Uv   M(     g7f)?N)rv   r\  r   s     r?   rj   (Model._check_ordering.<locals>.<genexpr>*	  s#     GVz!S'9!a3h!!Vs   00	0c              3   B   #    U  H  oR                  S 5      v   M     g7f)r  N)removeprefixr   s     r?   rj   r  -	  s     6v!..%%vs   Nr*  zJ'ordering' refers to the nonexistent field, related field, or lookup '%s'.zmodels.E015c              3      #    U  HZ  nUR                   (       a  UR                  (       a  UR                  UR                  4OUR                  R                  5       4v   M\     g 7fr   )rr   concreterO   r
  r   related_query_namer   s     r?   rj   r  `	  sQ        BA NN1:: VVQYY'''44689 Bs   A"A$)rb   _ordering_clashr	   r  r   rn   rv   r  r~   r   rD  r  r*  r  rm  
path_infosto_optsr   r   AttributeErrorget_transform
get_lookupr   r   from_iterabler   rr  r4  )r   r7  r   _fieldsrelated_fieldsr   r   _clsfldpartinvalid_fieldsr   valid_fieldsinvalid_fields                 r?   r  Model._check_ordering
	  s    99$$U$  99**#))2D2DI#)),,tUm<<'$	  ## HVG 7v6 AQ%%a(q!	 
  $EDCJ/t|"jjmm"jj2248"~~b199??# 0 $: $1VDy!V1  yy   t{{D,@,@A  	
 	f34+MMM-/<=$	 , [ *>: {))$/7CNN4<P<X"LL!ACH!I$'#0	  =Y7 2s&   :A,I#(I#6	KK#AKKc                    U(       d  / $ / nSnSnU Hw  n[         R                  " XP5      (       d  M   [        U   nUR                  R	                  5       nUb  UR
                  R                  (       a  Mc  Uc  UnUnMl  Xs:  d  Ms  UnUnMy     Uc  U$ U R                  R                   Hg  nUR                  b  M  UR                  =n	c  M#  [        U	5      U:  d  M4  UR                  [        R                  " SU	< SU< SU< S3SU SS95        Mi     U R                  R                   H  n[!        UR"                  R$                  [&        5      (       a  M.  UR"                  R$                  R                  R                   Hg  n
U
R                  b  M  U
R                  =nc  M#  [        U5      U:  d  M4  UR                  [        R                  " S	U< SU< SU< S3S
U SS95        Mi     M     U$ )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   r  r   opsr	  rZ  truncates_namesrb   r   	db_columnr  r  rD  r	   r  r   rv   r   r  r\  )r   r  r7  allowed_lendb_aliasr   r   r	  r   r  m2mrel_names               r?   r  Model._check_long_column_namesw	  s    I B--b66$RJ(nn<<>O&**=*=*M*M&"1K!H$2"1K!H   M''A #$%HH,[9${2LL 'X? O(	 (& --A!..00#66 ~~--33@@MM)%(ZZ/<H3MM  (h@!R !$,
 A .6 rC   c              #   H  #    [        U[        5      (       a  UR                   Hp  n[        U[        5      (       a?  Uu  p4[        UR	                  [
        5      5      v   U R                  U5       S h  vN   MW  U R                  U5       S h  vN   Mr     g [        U[        5      (       a+  [        UR                  R	                  [
        5      5      v   g [        US5      (       a1  UR                  5        H  nU R                  U5       S h  vN   M     g g  N N N7f)Nget_source_expressions)rv   r)   childrenr~   r  r   r  r(   rO   rX   r9  )r   exprchildlookuprY   src_exprs         r?   r  Model._get_expr_references	  s     dAeU++$)MFZ 899"77>>>"77>>> ' a  		
344T344 77933H=== : 5 ?>
 >s7   A2D"4D5D"DBD"D D"D" D"c                     / nU Hf  n[         R                  " X05      (       d  M   [        U   nU R                  R                   H#  nUR                  UR                  X5      5        M%     Mh     U$ r   )r   r  r   rb   rP  r4  _check)r   r  r7  r   r   rU  s         r?   r  Model._check_constraints	  s`    B--b66$RJ!ii33
j//@A 4	  rC   )r  rc  r  r   )NNN)FFFNN)FNFFNNr  )NTT)LrG   rH   rI   rJ   r  classmethodr#  r@   rE   r0  r5  r?  r8  rQ  rT  rX  r   r*  r3  r`  rz  r}  r  r  r  alters_datar  r  r  r  r  r  r  r  r  r  r  r  r   r%  r)  r,  r9  r0  r1  r2  rf  r]  r{  r  r  r  rS  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rK   r_   r   s   @r?   r   r     sa   p2d 
 
<E!
1"$,.; 
+{	+B

Q/f

,$"OV M
^ D 
2 E * DL !I HL-b ^@,8
4l	" F
 G
*(.BM* B*H/b>
"@*(-*^*8 # #J  > 8 8t  ,  4 
 
     ! !F  $ C CJ  0  .  (    : X Xt > >@ j jX M M^ > >  rC   r   )	metaclassc                    UR                   R                  nUR                  U 5      nUR                  R	                  U5      R
                  " S0 UD6R                  [        U5       VVs/ s H  u  pgU" XvS9PM     snnS/5        g s  snnf )N)r*  r  r  r<   )rb   r   get_forward_related_filterr   ri  rk  bulk_updater  )r>   ordered_objid_listrj  	order_wrtr  r  r*  s           r?   method_set_orderrL  	  sx    !!77I66t<K""5)00?;?KK;DW;MN;Mie	);MN	
Ns   *B
c                     UR                   R                  nUR                  U 5      nUR                   R                  R                  nUR
                  R                  " S0 UD6R                  USS9$ )NT)flatr<   )rb   r   rG  r*  rO   r   rk  values_list)r>   rI  rK  r  pk_names        r?   method_get_orderrQ  	  sd    !!77I66t<K""''G%%44@@t@TTrC   c                     [        USU R                  R                  5       -  [        [        U 5      5        [        USU R                  R                  5       -  [        [
        U 5      5        g )Nzget_%s_orderzset_%s_order)r   rG   lowerr   rQ  rL  )r   r  s     r?   r   r   	  sZ    --//&.
 --//&.rC   c                 z    [        U [        5      (       a  [        R                  " U 6 nOU nUR	                  U5      $ )z7Used to unpickle Model subclasses with deferred fields.)rv   r~   r   r  ru   )model_idr   s     r?   r<  r<  
  s3    (E"") ==rC   Tr   )`r   rV   rM  collectionsr   	functoolsr   	itertoolsr   asgiref.syncr   r9  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.deletionr   r   django.db.models.expressionsr   !django.db.models.fields.compositer    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.deprecationr1   django.utils.encodingr2   django.utils.hashabler3   django.utils.textr4   r5   django.utils.translationr6   rx  r8   r  rS   rZ   rN   r\   r   r   r   rL  rQ  r   r<  __safe_for_unpickle__r<   rC   r?   <module>rp     s       # #  &        W V 1 8 8 A  0 , , '  @ = + / 5 6" " :$P
X) X)v
 	5 	5S J) S z@U
$  (, $rC   