
    ihV                       d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZ d d
lmZmZmZmZmZmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZN d dlOmPZQ  G d d          ZR eR            ZSd ZTd ZU G d  d!eV          ZW G d" d#          ZX G d$ d%          ZY G d& d'eDeW(          ZZd.d)Z[d* Z\d+ Z]d, Z^d-e^__        dS )/    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                       e Zd Zd Zd ZdS )Deferredc                     dS Nz<Deferred field> selfs    L/var/www/histauto/venv/lib/python3.11/site-packages/django/db/models/base.py__repr__zDeferred.__repr__=       !!    c                     dS r:   r;   r<   s    r>   __str__zDeferred.__str__@   r@   rA   N)__name__
__module____qualname__r?   rC   r;   rA   r>   r8   r8   <   s2        " " "" " " " "rA   r8   c                 >    t          | |||j        d| d          S )z
    Create exception subclass. Used by ModelBase below.

    The exception is created in a way that allows it to be pickled, assuming
    that the returned exception class will be added as an attribute to the
    'attached_to' class.
    .)rE   rF   )typerF   )namebasesmoduleattached_tos       r>   subclass_exceptionrN   G   s<      '2'?'?'?F	
 	
  rA   c                 L    t          j        |            ot          | d          S )Ncontribute_to_class)inspectisclasshasattr)values    r>   _has_contribute_to_classrU   Y   s%    u%%%O'%9N*O*OOrA   c                   Z     e Zd ZdZ fdZd Zd Zed             Zed             Z	 xZ
S )	ModelBasezMetaclass for all models.c                    t                      j        }d |D             }|s || |||          S |                    d          }d|i}|                    dd           }	|	|	|d<   |                    dd           }
i }|                                D ]\  }}t	          |          r|||<   |||<     || |||fi |}t          |
dd          }|
pt          |dd           }t          |dd           }d }t          j        |          }t          |dd           "||st          d	|d
|d          n|j	        }|
                    dt          ||                     |s|
                    dt          dt          d |D                       pt          f||                     |
                    dt          dt          d |D                       pt          f||                     |rI|j        sBt#          |d          s|j        |j        _        t#          |d          s|j        |j        _        |j        j        }|r#|r!|j        rt/          |d|j        d          |                                D ]\  }}|
                    ||           t1          |j        j        |j        j        |j        j                  }d |D             }|rd }d |D             D ]\}|j        j        r|j        j        rt/          d|z            -||}2|j        j        |j        j        urt/          d|z            ]|t/          d|z            |j                            |           |j        j        |j        _        n||j        _        i }t?          |g|z             D ]}t#          |d          s||k    r|j        j        s&|j        j        D ]O}tA          |tB                    r8|j"        j#        r,tI          ||j"        j%                  }||tM          |          <   PtO                      }|(                                D ]}||vst#          |d          s|)                    |j*                   2|j        j        |j        j        z   }|j        j        s|D ]H}|j+        |v r#tY          d|j+        d|d|j-        d
          |.                    |j+                   I|j        j        }tM          |          }||v r	||         }nu|sqd|j        j/        z  }tC          |t`          |dd          }||v rtY          d |d!|d"|j-        d#          t#          ||          s|
                    ||           nd }||j        j1        |<   n|j        j1        2                                } |D ]}}|j+        |vrr|j+        |j*        vrd|j+        |vr[te          j3        |          }!|
                    |j+        |!           |j4        r%|                                 D ]\  }}"||"k    r|!| |<   ~|j        j1        )                    |            |j        j        D ]}}|j+        |v r0|j        j        s#tY          d|j+        d|d|j-        d
          ;te          j3        |          }|j        j        sd|_5        |
                    |j+        |           ~d$ |j        j6        D             |j        _6        |rd|
_        |
|_7        |S |8                                 |j        j        9                    |j        j:        |           |S )%Nc                 <    g | ]}t          |t                    |S r;   )
isinstancerW   ).0bs     r>   
<listcomp>z%ModelBase.__new__.<locals>.<listcomp>f   s'    @@@z!Y'?'?@1@@@rA   rE   __classcell__MetaabstractF_meta	app_labelzModel class rH   zU doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.DoesNotExistc              3   \   K   | ]'}t          |d           |j        j        |j        V  (dS ra   N)rS   ra   r`   rc   r[   xs     r>   	<genexpr>z$ModelBase.__new__.<locals>.<genexpr>   sW        "1g.. 89w7G     rA   )rM   r   c              3   \   K   | ]'}t          |d           |j        j        |j        V  (dS re   )rS   ra   r`   r   rf   s     r>   rh   z$ModelBase.__new__.<locals>.<genexpr>   sX        "1g.. 89w7G1     rA   orderingget_latest_byz! cannot proxy the swapped model ''.c                     h | ]	}|j         
S r;   rJ   r[   fs     r>   	<setcomp>z$ModelBase.__new__.<locals>.<setcomp>   s    222!qv222rA   c                 2    g | ]}t          |d           |S )ra   )rS   )r[   klss     r>   r]   z%ModelBase.__new__.<locals>.<listcomp>   s'    KKK3WS'5J5JK3KKKrA   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_deleterJ   auto_createdparent_linkzAuto-generated field 'z' in class z for parent_link to base class z. clashes with declared field of the same name.c                 6    g | ]}t          j        |          S r;   )copydeepcopy)r[   idxs     r>   r]   z%ModelBase.__new__.<locals>.<listcomp>c  s/     #
 #
 #
#&DM##
 #
 #
rA   );super__new__popitemsrU   getattrr   get_containing_app_configRuntimeErrorlabeladd_to_classr'   rN   tupler   r   r`   rS   rj   ra   rk   proxyswapped	TypeErrorr   local_fieldslocal_many_to_manyprivate_fieldsfieldsconcrete_modelsetup_proxyreversedrZ   r"   remote_fieldrv   r$   modelr0   setmroupdate__dict__rJ   r   rD   add
model_namer   parentsrx   ry   
one_to_onemti_inheritedindexesr_   _prepareregister_modelrb   )$clsrJ   rK   attrskwargs	super_newr   rL   	new_attrs	classcell	attr_metacontributable_attrsobj_nameobj	new_classr`   meta	base_metarb   
app_configis_proxy
new_fieldsfield_namesbaseparentparent_linksfieldrelatedinherited_attributesparent_fieldsbase_key	attr_namebase_parents	new_fieldrv   	__class__s$                                      r>   r|   zModelBase.__new__a   sg	   GGO	 A@e@@@ 	69S$u555 <((!6*	IIot44	 )2Io&IIfd++	 !"[[]] 	* 	*MHc',, *03#H--&)	(##Ic4	DDVDD	9j%88<GIvt<<Iw55		 3F;;
4d++3! &, .4VVTTT;   ',	wi(@(@AAA $	L""""  !(     -
 +, )
 
 
   "")"-  !(     2
 01 )
 
 
    L!3 L tZ00 B/8/AIO,t_55 L4=4KIO1?(  		 	i&7 	=ATT9CTCTCTU   16688 	2 	2MHc""8S1111 O(O.O*
 


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


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


 $ $  	 !M%00E:. 3.2+**5:u====!>(#
 #
*3/*A#
 #
 #
	  	 "'I&IN++IO,EyQQQrA   c                 v    t          |          r|                    | |           d S t          | ||           d S N)rU   rP   setattr)r   rJ   rT   s      r>   r   zModelBase.add_to_classs  sF    #E** 	&%%c400000Cu%%%%%rA   c                 T   | j         }|                    |            |j        rkt          | j        d          | _        t          | j        d          | _        |j        j        r)|j        }|j        j        }t          t          | |           | j        4| j        dd                    d |j        D                       d| _        t          j                            |j                  }|rt'          | d	|           |j        s`t+          d
 |j        D                       rt-          d| j        z            t/                      }d|_        |                     d|           | j         j        D ]}|j        s|                    |            t;          j        |            dS )z7Create some methods once self._meta has been populated.T)is_nextFN(, c              3   $   K   | ]}|j         V  d S r   rn   ro   s     r>   rh   z%ModelBase._prepare.<locals>.<genexpr>  s$      66Q!&666666rA   )get_absolute_urlc              3   ,   K   | ]}|j         d k    V  dS )objectsNrn   ro   s     r>   rh   z%ModelBase._prepare.<locals>.<genexpr>  s)      <<116Y&<<<<<<rA   zOModel %s must specify a custom Manager, because it has a field named 'objects'.r   )sender)ra   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__rD   joinr   r   ABSOLUTE_URL_OVERRIDESgetlabel_lowerr   managersany
ValueErrorr&   ru   r   r   rJ   set_name_with_modelr*   send)r   optswrtremoteget_absolute_url_overridemanagerindexs          r>   r   zModelBase._preparey  s   yc% 	R$12D% % %C! )62E) ) )C% )6 R0)/&'CS&QQQ ;		66$+6666666CK
 %-$C$G$G%
 %
! % 	HC+-FGGG} 	1<<<<<<<  -/2|<   iiG#'G Y000
 Y& 	/ 	/E: /))#...3''''''rA   c                     | j         j        S r   )ra   base_managerr   s    r>   _base_managerzModelBase._base_manager  s    y%%rA   c                     | j         j        S r   )ra   default_managerr   s    r>   _default_managerzModelBase._default_manager  s    y((rA   )rD   rE   rF   r   r|   r   r   propertyr   r   r^   r   s   @r>   rW   rW   ^   s        ##P P P P Pd& & &5( 5( 5(n & & X& ) ) X) ) ) ) )rA   rW   c                       e Zd ZddZdS )ModelStateFieldsCacheDescriptorNc                      || S i x}|_         |S r   )fields_cache)r=   instancer   ress       r>   __get__z'ModelStateFieldsCacheDescriptor.__get__  s    K&((h#
rA   r   )rD   rE   rF   r   r;   rA   r>   r   r     s(             rA   r   c                   .    e Zd ZdZdZdZ e            ZdS )
ModelStatezStore model instance state.NT)rD   rE   rF   r   dbaddingr   r   r;   rA   r>   r   r     s.        %%	B
 F2244LLLrA   r   c                       e Zd Z fdZed             Zd Zd Zd Zd Z	d Z
d Zd	 ZdGdZd Z eee          ZdGdZd ZdHdZdHdZd Zd Zddd
d
ddZde_        ddd
d
ddZde_        ed             Z	 	 	 	 	 dIdZde_        	 dGdZ	 	 	 	 	 	 dJdZd Zd ZdGdZ dKdZ!de!_        dKd Z"de"_        d! Z#d" Z$d# Z%dGd$Z&d% Z'd& Z(dGd'Z)dKd(Z*d) Z+d* Z,d+ Z-d, Z.d- Z/dGd.Z0dLd/Z1dGd0Z2ed1             Z3ed2             Z4ed3             Z5ed4             Z6ed5             Z7ed6             Z8ed7             Z9ed8             Z:ed9             Z;ed:             Z<ed;             Z=ed<             Z>ed=             Z?ed>             Z@ed?             ZAed@             ZBedA             ZCedB             ZDedC             ZEedD             ZFedE             ZGedF             ZH xZIS )MModelc                    | j         }| j        }t          }t          }|j        rt          d          t          j        |||           t                      | _	        t          |          t          |j                  k    rt          d          |sBt          |j                  }t          ||          D ]\  }}	||u r
 || |	j        |           nt          |j                  }t          ||          D ]b\  }}	||u r
 || |	j        |           |                    |	j        t&                    t&          urt          |j         d|	j         d          c|D ]"}	d}
|	j        |	j        r|rt/          |	j        t2                    rn	 |                    |	j                  }d}
n# t4          $ rC 	 |                    |	j                  }n$# t4          $ r |	                                }Y nw xY wY nXw xY w	 |                    |	j                  }n8# t4          $ r |	                                }Y nw xY w|	                                }|
r||ur || |	j        |           ||ur || |	j        |           $|r|j        }d}|                                D ]X\  }}||v r||ur || ||           	 |                    |           ||ur || ||           C# t>          $ r	 ||fz  }Y Uw xY w|r8d	                     d
 |D                       }t          |j!         d|           tE                      #                                 tI          j        ||            d S )Nz'Abstract models cannot be instantiated.)r   argsr   z'Number of args exceeds number of fieldsz8() got both positional and keyword arguments for field 'rl   FTr;   r   c              3   4   K   | ]}t          |          V  d S r   repr)r[   ns     r>   rh   z!Model.__init__.<locals>.<genexpr>8  s(      ,I,IT!WW,I,I,I,I,I,IrA   z%() got unexpected keyword arguments: )r   r   )%r   ra   r   DEFERREDr`   r   r-   r   r   _statelenconcrete_fields
IndexErroriterzipattnamer   r}   rJ   r   rF   column	generatedrZ   r   r!   KeyErrorget_default_property_namesr~   	get_fieldr   r   rD   r{   __init__r+   )r=   r   r   r   r   _setattr	_DEFERREDfields_itervalr   is_related_objectrel_objproperty_names
unexpectedproprT   unexpected_namesr   s                    r>   r  zModel.__init__  sb   nz	= 	GEFFFStF;;;; !ll t99s4/0000FGGG 	t344K
 "$44 3 3
U)##u}c22223 t{++K!$44  
U)##u}c222::ej,77|KK#+ G G8=
G G G   L ! &	7 &	7E %|#u# *e02BCC 2	6"(**UZ"8"8,0))# 6 6 66"(**U]";";CC' 6 6 6"'"3"3"5"5CCC6	62$jj77# 2 2 2
 $//112 ''))  	7
 )++HT5:w777i''HT5=#666 	!1NJ%||~~ 8 8e >))I-- tU3338t,,, !	11$HT4777	 - . . ."tg-


.
  #'99,I,Ij,I,I,I#I#I | * *'* *   	cD111111sZ   F--
G:8GG:G41G:3G44G:9G:>HH:9H:>K%%K87K8c                     t          |          t          | j        j                  k    r(t          |          fd| j        j        D             } | | }d|j        _        ||j        _        |S )Nc                 N    g | ]!}|j         v rt                    nt          "S r;   )r   nextr   )r[   rp   r   values_iters     r>   r]   z!Model.from_db.<locals>.<listcomp>D  sB        &'Y+%=%=[!!!8  rA   F)r   ra   r   r   r   r   r   )r   r   r   valuesnewr  s     `  @r>   from_dbzModel.from_db@  s    v;;#ci78888v,,K    2  F c6l!


rA   c                 (    d| j         j        d| dS )N<z: >)r   rD   r<   s    r>   r?   zModel.__repr__M  s     !^444ddd;;rA   c                 0    | j         j        d| j        dS )Nz	 object (r   )r   rD   pkr<   s    r>   rC   zModel.__str__P  s    #'>#:#:#:DGGGDDrA   c                     t          |t                    st          S | j        j        |j        j        k    rdS | j        }|| |u S ||j        k    S NF)rZ   r   NotImplementedra   r   r  )r=   othermy_pks      r>   __eq__zModel.__eq__S  sW    %'' 	"!!:$(BBB5=5=   rA   c                 p    |                                  st          d          t          | j                  S )Nz8Model instances without primary key value are unhashable)
_is_pk_setr   hashr  r<   s    r>   __hash__zModel.__hash__]  s2       	XVWWWDG}}rA   c                     |                                  }t          j        |t          <   | j        j        | j        j        f}t          |f|fS r   )__getstate__django__version__r   ra   rb   object_namemodel_unpickle)r=   dataclass_ids      r>   
__reduce__zModel.__reduce__b  sD      ""*0*<&':')??{D00rA   c                    | j                                         }t          j        |d                   |d<   |d         j                                        |d         _        g }|                                D ]>\  }}t	          |t
                    r$|                    |t          |          f           ?|r"||d<   |D ]\  }}|                    |           |S )z0Hook to allow choosing the attributes to pickle.r   _memoryview_attrs)	r   rx   r   r~   rZ   
memoryviewappendbytesr}   )r=   stater1  attrrT   s        r>   r(  zModel.__getstate__h  s    ""$$)E(O44h',X'C'H'H'J'Jh$  ;;== 	? 	?KD%%,, ?!(($e)=>>> 	 ):E%&0    e		$rA   c                    |                     t                    }|r>|t          j        k    r-t	          j        d|dt          j        dt          d           nt	          j        dt          d           d|v r-|                    d          D ]\  }}t          |          ||<   | j	        
                    |           d S )Nz(Pickled model instance's Django version z$ does not match the current version rH      
stacklevelz9Pickled model instance's Django version is not specified.r1  )r   r   r)  r*  warningswarnRuntimeWarningr}   r2  r   r   )r=   r5  pickled_versionr6  rT   s        r>   __setstate__zModel.__setstate__y  s    ))$=>> 	&"444 '(:(:(:< #     MK   
 %''$yy)<== 0 0e(//dU#####rA   Nc                 H    |p| j         }t          | |j        j                  S r   )ra   r   r  r   )r=   r   s     r>   _get_pk_valzModel._get_pk_val  s"    !tztTW_---rA   c                     | j         j                                        D ]/}|r+|| j         j        k    rt	          | |j        j        |           0t	          | | j         j        j        |          S r   )ra   r   r  r  r   target_fieldr   )r=   rT   rv   s      r>   _set_pk_valzModel._set_pk_val  sm    :-4466 	G 	GK G{djm;;k6>FFFtTZ]2E:::rA   c                     |                      |          }|d u p-t          |t                    ot          d |D                        S )Nc              3      K   | ]}|d u V  	d S r   r;   ro   s     r>   rh   z#Model._is_pk_set.<locals>.<genexpr>  s&      1L1L!t)1L1L1L1L1L1LrA   )rA  rZ   r   r   )r=   r   pk_vals      r>   r$  zModel._is_pk_set  sU    !!$''dN N65))Lc1L1LV1L1L1L.L.L
 	
rA   c                 4      fd j         j        D             S )zU
        Return a set containing names of deferred fields for this instance.
        c                 :    h | ]}|j         j        v|j         S r;   )r   r   r[   rp   r=   s     r>   rq   z,Model.get_deferred_fields.<locals>.<setcomp>  s4     
 
 
y-- I---rA   )ra   r   r<   s   `r>   get_deferred_fieldszModel.get_deferred_fields  s3    
 
 
 
Z/
 
 
 	
rA   c           	      b   |i | _         nt          | dd          }t          |          }|                                D ]}||v r||= |                    |           |sdS t          d |D                       rt          dt          z            |&d| i}| j        j	        
                    ||          }n||                    |          }|                    | j                  }|                                 | |j        | }n"r  |j        fd	| j        j        D              }|                                }|                                }	| j        j        D ]}|j        |	v rt)          | |j        t          ||j                             |j        ri|                    |          r*|                    | |                    |                     {|                    |           r|                    |            | j        j        D ]7}
|	|
j        |v r*|
                    |           r|
                    |            8| j        j        D ]>}|	|j        |v r1|j        r*|                    |           r|                    |            ?|j        j        | j        _        dS )
aU  
        Reload field values from the database.

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

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

        When accessing deferred fields of an instance, the deferred loading
        of the field will call this method.
        N_prefetched_objects_cacher;   c              3   (   K   | ]}t           |v V  d S r   r   ro   s     r>   rh   z(Model.refresh_from_db.<locals>.<genexpr>  s&      33q:?333333rA   zRFound "%s" in fields argument. Relations and transforms are not allowed in fields.r   )hintsr  c                 0    h | ]}|j         v|j         S r;   )r   )r[   rp   deferred_fieldss     r>   rq   z(Model.refresh_from_db.<locals>.<setcomp>  s2       y77 I777rA   )rM  r   r   rx   remover   r   r   r   r   
db_managerusingfilterr  rK  onlyra   r   r   r   r   is_relation	is_cachedset_cached_valueget_cached_valuedelete_cached_valuerelated_objectsrJ   r   r   r   )r=   rU  r   from_querysetprefetched_objects_cacher   rO  db_instance_qsdb_instancenon_loaded_fieldsrelrR  s              @r>   refresh_from_dbzModel.refresh_from_db  s"    >-/D**'.t5PRT'U'U$[[F ) )44407MM%((( 33F33333  13=>  
  &E N8CCEQVCWWMM)//66M&---99 22440^0&9NN 	0^0   !Z7  N %((**';;==Z/ 
	4 
	4E} 111D%-em)L)LMMM  4??;// 4**41G1G1T1TUUUU__T** 4--d333 :- 	. 	.C#(f"4"4#--:M:M"4''--- Z. 	0 	0E5:#7#7% $8OOD)) $8 ))$///$+.rA   c                 R   K    t          | j                  |||           d {V S )N)rU  r   r^  )r   rd  )r=   rU  r   r^  s       r>   arefresh_from_dbzModel.arefresh_from_db  sO      8]4#788m
 
 
 
 
 
 
 
 
 	
rA   c                     	 | j                             |          }n # t          $ r t          | |          cY S w xY wt          | |j                  S )a  
        Return the value of the field name for this instance. If the field is
        a foreign key, return the id value instead of the object. If there's
        no Field object with this name on the model, return the model
        attribute's value.

        Used to serialize a field's value (in the serializer, or form output,
        for example). Normally, you would just access the attribute directly
        and not use this method.
        )ra   r  r   r   r   )r=   
field_namer   s      r>   serializable_valuezModel.serializable_value  sa    	-J((44EE  	- 	- 	-4,,,,,	-tU]+++s    ::c          	      F   ddd d dt          j        d dt          d           t                    dz   }t                    dz   }||k    rt	          d d	| d
| d          fdfdt          |                                          D             S )NFforce_insertforce_updaterU  update_fieldsz Passing positional arguments to z() is deprecated   r9     Model.z() takes from 1 to z positional arguments but z were givenc                 ~    |t                    k     r(||          urt          d d|  d          |         S |S )Nrq  z%() got multiple values for argument '')r   r   )
param_nameparam_value	arg_indexr   defaultsmethod_names      r>   	get_paramz+Model._parse_save_params.<locals>.get_param,  sk    3t99$$hz&:::#* * *&* * *   I&rA   c                 6    g | ]\  }\  }} |||          S r;   r;   )r[   ikvry  s       r>   r]   z,Model._parse_save_params.<locals>.<listcomp>8  s/    NNNyq&1a		!Q""NNNrA   )r;  r<  r1   r   r   	enumerater~   )r=   rx  r   r   total_len_argsmax_len_argsrw  ry  s    ``   @@r>   _parse_save_paramszModel._parse_save_params  s
   !!!	
 
 	L{LLL$	
 	
 	
 	

 TQ8}}q(L((= = = = =!/= = =  

	 
	 
	 
	 
	 
	 
	 ONNNIfllnn4M4MNNNNrA   Frk  c          	          |r  j         |d||||d\  }}}}                     d           |pt          j         j                   }|r|s|rt          d           fd j        j        D             }|\|sdS t          |          } j        j	        }|
                    |          }|r%t          dd	                    |          z            n|s|r| j        j        k    r}t                      } j        j        }	 j        j        D ]0}
|
|	vr*t!          |
d
          s|                    |
j                   1|
                    |          }|rt          |          }                     ||||           dS )aa  
        Save the current instance. Override this in a subclass if you want to
        control the saving process.

        The 'force_insert' and 'force_update' parameters can be used to insist
        that the "save" must be an SQL insert or update (or equivalent for
        non-SQL backends), respectively. Normally, they should not be set.
        saverx  rl  rm  rU  rn  )operation_namer   z6Cannot force both insert and updating in model saving.c                 L    h | ] }|j         j        v|j        d u |j         !S )F)r   r   r  rJ  s     r>   rq   zModel.save.<locals>.<setcomp>_  s@     )
 )
 )
y--!+2F2F I2F2F2FrA   NzmThe following fields do not exist in this model, are m2m fields, primary keys, or are non-concrete fields: %sr   through)rU  rl  rm  rn  )r   _prepare_related_fields_for_saver   db_for_writer   r   ra   r   	frozenset_non_pk_concrete_field_names
differencer   r   r   r   	pk_fieldsrS   r   r   	save_base)r=   rl  rm  rU  rn  r   deferred_non_generated_fieldsr   not_updatable_fieldsr  r   loaded_fieldss   `           r>   r  z
Model.save>  s   "  	?Vt?V"))+@ @ @<L,} 	--V-DDDK,T^dKKK 	W\ 	W] 	WUVVV)
 )
 )
 )
Z/)
 )
 )
%
 $ ! %m44M*AK#0#;#;K#H#H #  Kii 4556   	9-	9 ''%%K
,I3 3 3	))'%2K2K)OOEM222'223PQQM 9 )- 8 8%%'	 	 	
 	
 	
 	
 	
rA   Tc          	         K   |r | j         |d||||d\  }}}} t          | j                  ||||           d {V S )Nasaver  rk  )r  r   r  )r=   rl  rm  rU  rn  r   s         r>   r  zModel.asave  s        	?Vt?V#))+@ @ @<L,} .]49--%%'	
 
 
 
 
 
 
 
 
 	
rA   c                 "   |du rdS |du r| fS t          |t                    st          d          |D ]Z}t          |t                    st          d|d          t	          | |          s t          d|j         d| j         d          [|S )	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 rH   )rZ   r   r   rW   
issubclassrF   )r   rl  members      r>   _validate_force_insertzModel._validate_force_insert  s    5  246M,.. 	ECDDD" 		 		Ffi00 XFXXX   c6** 3F4G 3 3"/3 3 3  
 rA   c           	         |pt          j        | j        |           }|r|s|rJ ||sJ | j        x}}|j        j        r|j        j        }|j        }|j        st          j        || |||           |j	        rt          j        |d          }	nt          j        |          }	|	5  d}
|s-|                     |          }|                     ||||          }
|                     |||p|
|||          }ddd           n# 1 swxY w Y   || j        _        d| j        _        |j        st'          j        || | |||           dS dS )av  
        Handle the parts of saving which should be done only once per save,
        yet need to be done in raw saves, too. This includes some sanity
        checks and signal sending.

        The 'raw' argument is telling save_base not to save any parent
        models and not to do any changes to the values before save. This
        is used by fixture loading.
        r  N)r   r   rawrU  rn  F)rU  	savepoint)rU  )r   r   createdrn  r  rU  )r   r  r   ra   r   r   ru   r.   r   r   r   atomicmark_for_rollback_on_errorr  _save_parents_save_tabler   r   r   r,   )r=   r  rl  rm  rU  rn  r   originr   context_managerparent_insertedupdateds               r>   r  zModel.save_base  s   " K,T^dKKK ElEmEEE$$$$~%f9? 	+)*Cy  	M+    < 	R)0uNNNOO)D5QQQO 	 	#O #::<HH"&"4"4|# # &&/ G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	" "   	N$+     	 	s   )ADD
Dc           
         |j         }d}|i }|j                                        D ]1\  }}	|	rgt          | |j         j        j                  Ht          | |	j                  3t          | |j         j        j        t          | |	j                             |                    |          x}
M|                     |||||          }| 	                    ||||pt          ||                    }|sd}|||<   n|
sd}|	rXt          | |	j        |                     |j                              |	                    |           r|	                    |            3|S )z3Save all the parents of cls using values from self.FN)r   rU  rn  rl  updated_parents)r   rU  rn  rl  T)ra   r   r~   r   r  r   r   r   r  r  r  rA  rY  r\  )r=   r   rU  rn  rl  r  r   insertedr   r   parent_updatedr  r  s                r>   r  zModel._save_parents
  s    y" O!\//11 $	4 $	4MFE UD&,/"9::BD%-00<flo5wtU]7S7STTT"1"5"5f"="==F"&"4"4"/!-$3 #5 # # **"/!0!TJv|4T4T	 +    $#H*1''#   4emT-=-=fl-K-KLLL ??4(( 4--d333rA   c           
      $    |j         j        fdj        D             }rfd|D             }                               s5j                                       }t           j        j        |                                          s|srt          d          d}	s0|s.|s, j	        j
        r t          d j        D                       rd}r|s|j                            |          }
 fd|D             }p|}                               }                     |
||||          }	|r|	st!          d          r|	st!          d	          |	s'j        rj        }|                               } |j                            |          j        di |                    t+          t-          t/          d
          t1          d          z   t3                                t1          d                              d          _        fdj        D             }j        }                     |j        |||          }|r2t;          |d         |          D ]\  }}t           |j        |           |	S )zp
        Do the heavy-lifting involved in saving. Update or insert the data
        for a single table.
        c                 *    g | ]}|v|j         |S r;   )r  )r[   rp   r  s     r>   r]   z%Model._save_table.<locals>.<listcomp>H  s5     !
 !
 !
	!!!+! !!!rA   c                 8    g | ]}|j         v s	|j        v |S r;   )rJ   r   )r[   rp   rn  s     r>   r]   z%Model._save_table.<locals>.<listcomp>O  s<     % % %6]**ai=.H.H .H.H.HrA   z5Cannot force an update in save() with no primary key.Fc              3   f   K   | ],}|                                 p|                                V  -d S r   )has_defaulthas_db_defaultro   s     r>   rh   z$Model._save_table.<locals>.<genexpr>b  s;      RRaAMMOO9q'7'7'9'9RRRRRRrA   Tc                 p    g | ]2}|d rt          |j                  n|                    d          f3S r  )r   r   r.   )r[   rp   r  r=   s     r>   r]   z%Model._save_table.<locals>.<listcomp>h  sZ        	 14QWT19---!**T5:Q:Q  rA   z&Forced update did not affect any rows.z0Save with update_fields did not affect any rows._orderrp  )output_fieldr   )_order__maxr  c                 8    g | ]}|j         ss	|j        u|S r;   )r  
auto_field)r[   rp   r   pk_sets     r>   r]   z%Model._save_table.<locals>.<listcomp>  sF       { )/ 344?2J2J 2J2J2JrA   r;   )ra   r  local_concrete_fieldsr$  r  get_pk_value_on_saver   r   r   r   r   allr   rU  rA  
_do_updater   r   get_filter_kwargs_for_objectrV  	aggregater%   r   r   r   r   r  db_returning_fields
_do_insertr   )r=   r  r   rl  rm  rU  rn  non_pks_non_generatedrG  r  base_qsr  forced_updater   filter_argsr   returning_fieldsresultsrT   r   r  r  s   ``    `            @@@r>   r  zModel._save_table9  s    yN	!
 !
 !
 !
/!
 !
 !
  	% % % %.% % %! t$$ 	3W11$77FD$'/6222&& 	V< 	V= 	VTUUU 	  	  !	  "		 
 RR4>RRRRR	   L 	X, 	X'--e44G     /  F *9\M%%d++Foo} G  NG N#$LMMM XW X#$VWWW 	8)  2#@@FFC%++E22+ +)+ +Y$,- #Ha 8|~~   "!HH	% %    $	%     3  F
  $7oo!5&2BC G  8$'
4D$E$E 8 8LE5D%-7777rA   c                 2   |                     |          }|s|dup|                                S | j        j        rC|sA|                                o,|                    |          dk    p|                                S |                    |          dk    S )z
        Try to update the model. Return True if the model was updated (if an
        update query was done and a matching row was found in the DB).
        rP  Nr   )rV  existsra   select_on_save_update)r=   r  rU  rG  r  rn  r  filtereds           r>   r  zModel._do_update  s    
 >>V>,, 	B !,A0A0AA:$ 	] 	!! 	D !!&))A-B1B1B ''!++rA   c                 8    |                     | g||||          S )z
        Do an INSERT. If returning_fields is defined then this method should
        return the newly created data for the model.
        )r   r  rU  r  )_insert)r=   r   rU  r   r  r  s         r>   r  zModel._do_insert  s0    
 F-  
 
 	
rA   c                 J   | j         j        D ]}|r||vr
|j        r|                    |           rt	          | |j        d           }|s?|                                s@|j        j        s|j        	                    |           t          |d|j        d          t	          | |j                  |j        v rt          | |j        |           t	          ||j        j                  t	          | |j                  k    r|	                    |            | j         j        D ]|}|r||vr	|j        rl|                    |           rWt!          |d          rG|                    | d           }|r.|                                st          | d|j         d          }d S )NzB() prohibited to prevent data loss due to unsaved related object 'rl   fk_field)default)ra   r   rX  rY  r   rJ   r$  r   multipler\  r   r   empty_valuesr   rC  r   rS   r[  )r=   r  r   r   r   s        r>   r  z&Model._prepare_related_fields_for_save  s   
 Z/  	4  	4E %v--   4U__T%:%: 4dEJ55  ~~'' 3 -6 D*>>sCCC$2@..%***N   T5=11U5GGG D%*c222 3 2 :;;w%-@ @   --d333Z. 	 	E %v--!
OOD))
 E:..

 ,,T4,@@ s~~// $) B B38:B B B  	 	rA   c                 :   |                                  s.t          | j        j        d| j        j        j        d          |pt          j        | j        |           }t          ||           }|
                    | g|           |                                S )Nz% object can't be deleted because its z attribute is set to None.r  )rU  r  )keep_parents)r$  r   ra   r+  r  r   r   r  r   r   collectdelete)r=   rU  r  	collectors       r>   r  zModel.delete  s       	"j444djm6K6K6KM   K,T^dKKKE$777	4&|<<<!!!rA   c                 P   K    t          | j                  ||           d {V S )N)rU  r  )r   r  )r=   rU  r  s      r>   adeletezModel.adelete  sM      /]4;//%
 
 
 
 
 
 
 
 
 	
rA   c                     t          | |j                  }t          t          |j                            }t          |                    t          |          |          d          S )NT)strings_only)r   r   dictr3   flatchoicesr2   r   )r=   r   rT   choices_dicts       r>   _get_FIELD_displayzModel._get_FIELD_display  s_    em,,M%*;<<==]511599
 
 
 	
rA   c                    |                                  st          d          |rdnd}|rdnd}t          | |j                  }t	          j        |j        |fd| | j        fgt          j                  }t	          j        ||j         d| |fgt          j	                  } | j
        j                            | j        j                  j        di |                    |                              ||j        d	|z            }	 |d
         S # t"          $ r( |                     d| j
        j        j        z            w xY w)Nz8get_next/get_previous cannot be used on unsaved objects.gtlt -pk__)	connector__z%spkr   z!%s matching query does not exist.r;   )r$  r   r   r   r)   createrJ   r  ANDORr   r   rU  r   r   rV  order_byr   rc   ra   r+  )	r=   r   r   r   oporderparamqqss	            r>   _get_next_or_previous_by_FIELDz$Model._get_next_or_previous_by_FIELD  sg      	YWXXX&TT$&3em,,Huz5)K2KK+ABaeTTTHaUZ//2//78ADIIIDN+11$+.AA  VAYYXuzz2FUNCC	 		a5L 	 	 	##3dn6J6VV  	s   D 2Ec                    d|z  }t          | |          s|rdnd}|rdnd}| j        j        }|                    |           }  | j        j        j        di |j        di d|z   | j        j                            d          j        di | j        j        j	        | j        ii
                    |          d d                                         }t          | ||           t          | |          S )	Nz__%s_order_cacher  r  r  z-_orderz
_order__%srp  r;   )rS   ra   r   r  r   r   rV  r  r  rJ   r  r   r   r   )r=   r   	cachenamer  r  order_fieldr  r   s           r>   r   z$Model._get_next_or_previous_in_order*  s,   &0	tY'' 	* *dB '6HHYE*:K%BB4HHK6/6EEEE  %Udn=DDXNNU  #z}147;   %!	%   D)S)))tY'''rA   c                    t                      |p| j        }i }g }|j        D ]}|j        v r|j        rJt          fd|                     |j                  D                       rG|                    |           ]t          | |j
                  }|rt          |d          st          ||          }|||j        <   dvrt          | j        |j                  |d<   |rXd |                                D             }|D ]7}t          |j                            |          |j                  ||j        <   8|S )Nc              3   ,   K   | ]}|d          v V  dS r   Nr;   )r[   refexcludes     r>   rh   z2Model._get_field_expression_map.<locals>.<genexpr>K  s@         Fg%     rA   resolve_expressionr  c                 4    i | ]\  }}t          |          |S r;   )r(   )r[   rJ   rT   s      r>   
<dictcomp>z3Model._get_field_expression_map.<locals>.<dictcomp>Y  s$    PPP{tUAdGGUPPPrA   )r   ra   r  rJ   r  r   _get_expr_references
expressionr3  r   r   rS   r   r  r~   r   replace_expressionsr  )	r=   r   r  	field_mapgenerated_fieldsr   rT   replacementsgenerated_fields	     `      r>   _get_field_expression_mapzModel._get_field_expression_mapA  s   ?eeG!tz	/ 	* 	*EzW$$     #889IJJ       ''...D%-00E ,/C D D ,eU++$)Iej!!w#DGTW55IdO 	PPioo>O>OPPPL#3  2C#.BB<PP#03 3	/.//
 rA   c                     |                                  st          d| z            t          | |j                                        j                  S )Nz9Unsaved model instance %r cannot be used in an ORM query.)r$  r   r   r   get_related_fieldr   )r=   r   s     r>   prepare_database_savezModel.prepare_database_saveb  sR       	KdR   tU/AACCKLLLrA   c                     dS )aI  
        Hook for doing any extra model-wide validation after clean() has been
        called on every field by self.clean_fields. Any ValidationError raised
        by this method will not be associated with a particular field; it will
        have a special-case association with the field defined by NON_FIELD_ERRORS.
        Nr;   r<   s    r>   cleanzModel.cleani  s	     	rA   c                 4   |                      |          \  }}|                     |          }|                     |          }|                                D ].\  }}|                    |g                               |           /|rt          |          dS )zh
        Check unique constraints on the model and raise ValidationError if any
        failed.
        r  N)_get_unique_checks_perform_unique_checks_perform_date_checksr~   
setdefaultextendr   )r=   r  unique_checksdate_checkserrorsdate_errorsr|  r}  s           r>   validate_uniquezModel.validate_uniquer  s    
 &*%<%<W%<%M%M"{,,];;//<<%%'' 	/ 	/DAqa$$++A.... 	*!&)))	* 	*rA   c                 d   t                      g }| j        | j        j        fg}g }|r| j        | j        j        fg}| j        j        D ]^}|j        j        r!|                    ||j        j        f           |r-|j        j        r!|                    ||j        j        f           _|D ]I\  }}|D ]A}	t          fd|	D                       s$|                    |t          |	          f           BJ|rI|D ]F\  }}
|
D ]>}t          fd|j	        D                       s|                    ||j	        f           ?Gg }| j        | j        j
        fg}| j        j        D ]#}|                    ||j        j
        f           $|D ]"\  }}|D ]}|j        }|v rt          |t                    rKt          d |j	        D                       }                    |          r|                    ||f           o|j        r|                    ||ff           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           $||fS )a{  
        Return a list of checks to perform. Since validate_unique() could be
        called from a ModelForm, some fields may have been excluded; we can't
        perform a unique check on a model that is missing fields involved
        in that check. Fields that did not validate should also be excluded,
        but they need to be passed in via the exclude argument.
        Nc              3       K   | ]}|v V  	d S r   r;   r[   rJ   r  s     r>   rh   z+Model._get_unique_checks.<locals>.<genexpr>  s'      ==t47?======rA   c              3       K   | ]}|v V  	d S r   r;   r  s     r>   rh   z+Model._get_unique_checks.<locals>.<genexpr>  s'      MM4twMMMMMMrA   c              3   $   K   | ]}|j         V  d S r   rn   r[   r   s     r>   rh   z+Model._get_unique_checks.<locals>.<genexpr>  s$      !C!C%*!C!C!C!C!C!CrA   dateyearmonth)r   r   ra   unique_togethertotal_unique_constraintsall_parentsr3  r   r   r   r   rJ   rZ   r    
isdisjointuniqueunique_for_dateunique_for_yearunique_for_month)r=   r  include_meta_constraintsr  unique_togethersconstraintsparent_classmodel_classr  checkmodel_constraints
constraintr  fields_with_classr   rp   rJ   namess    `                r>   r	  zModel._get_unique_checks  s    ?eeG!^TZ-GHI# 	R NDJ,OPQK J2 	 	L!1  ''!<#5#EF   ( L,>,W ""!<#5#NO   -= 	F 	F(K( F F====u===== F!((+uU||)DEEEF
 $ 	O2= O O.."3 O OJMMMM:;LMMMMM O%,,k:;L-MNNNO
 
 #ndj.EFG J2 	V 	VL$$lL4F4S%TUUUU#4 	Y 	YK Y Yv7??a!455 !!C!C!(!C!C!CCCE))%00 C%,,k5-ABBB8 A!((+w)?@@@$ W):')I)I&&VT1CT'UVVV$ W):')I)I&&VT1CT'UVVV% Y!*<G*K*K&&WdADV'WXXX!Y" k))rA   c                    i }|D ]\  }}i }|D ]x}| j                             |          }t          | |j                  }||dk    rt          j        j        rK||j         j        v r| j        j	        sf||t          |          <   yt          |          t          |          k    r |j        j        di |}	|                     |j                   }
| j        j	        s0|                     |j                   r|	                    |
          }	|	                                r`t          |          dk    r	|d         }nt$          }|                    |g                               |                     ||                     |S )Nr  rP  rp  r   r;   )ra   r  r   r   r   features!interprets_empty_strings_as_nullsr  r   r   strr   r   rV  rA  r$  r  r  r
   r  r3  unique_error_message)r=   r  r  r(  unique_checklookup_kwargsrh  rp   lookup_valuer  model_class_pkkeys               r>   r
  zModel._perform_unique_checks  s   )6 *	 *	%K M* > >
J((44&tQY77' B&&"+M ' )333DK<N31=c*oo.. <  C$6$6664-4EE}EEB "--k.?@@N;% 3$//+:K*L*L 3ZZ>Z22yy{{ |$$))&q/CC*C!!#r**11--k<HH   rA   c                 <   i }|D ]\  }}}}i }t          | |          }||dk    r(|j        |d|z  <   |j        |d|z  <   |j        |d|z  <   nt          ||          ||d|<   t          | |          ||<    |j        j        di |}	| j        j        s/|                                 r|		                    | j
                  }	|	                                r>|                    |g                               |                     |||                     |S )Nr  z%s__dayz	%s__monthz%s__yearr  rP  r;   )r   dayr  r  r   rV  r   r   r$  r  r  r  r  r3  date_error_message)
r=   r  r  r(  lookup_typer   
unique_forr4  r  r  s
             r>   r  zModel._perform_date_checks  s_   ;F 	 	7KeZM 4,,D|f$$8<i*45:>*kJ679=j:566FM+G G***kkBC $+4#7#7M% 4-4EE}EEB ;% ,$//*;*; ,ZZ47Z++yy{{ !!%,,33++K
KK   rA   c                    | j         }|                    |          }t          |j        d         d| t	          |j                  ||t	          |j                  |t	          |                    |          j                  d          S )Nr!  )r   r   r;  r   field_label
date_fielddate_field_labelmessagecodeparams)ra   r  r   error_messagesr4   verbose_name)r=   r;  rh  r<  r   r   s         r>   r:  zModel.date_error_message  s    zz**():;"&t'899*#'(:;;($,T^^J-G-G-T$U$U 
 
 
 	
rA   c                    |j         | |t          j                  |d}t          |          dk    rO                    |d                   }t          |j                  |d<   t          |j        d         d|          S fd|D             }t          |t          d                    |d	<   t          t          d
          d|          S )N)r   r(  r   r3  rp  r   r>  r   rA  c                 ^    g | ])}t                              |          j                  *S r;   )r4   r  rF  )r[   rp   r   s     r>   r]   z.Model.unique_error_message.<locals>.<listcomp>=  s=       =>**788  rA   andfield_labelsz9%(model_name)s with this %(field_labels)s already exists.r  )	ra   r4   rF  r   r  r   rE  r5   _)r=   r(  r3  rD  r   rJ  r   s         @r>   r2  zModel.unique_error_message'  s     &"4#455(	
 
 |!!NN<?33E$,U-?$@$@F=!",X6      BN  L &3<5%J%JF>""UVV&   rA   c                     | j         | j        j        fg}| j        j        D ]/}|j        j        r!|                    ||j        j        f           0|S r   )r   ra   r&  r  r3  )r=   r&  r'  s      r>   get_constraintszModel.get_constraintsG  sa    
(>?@ J2 	S 	SL!- S""L,2D2P#QRRRrA   c                    |                                  }t          j        | j        |           }i }|D ]\  }}|D ]}	 |                    || ||           # t
          $ r}t          |dd           dk    rMt          |j                  dk    r5|	                    |j        d         g           
                    |           n|                    |          }Y d }~d }~ww xY w|rt          |          d S )Nr  )r  rU  rC  r   rp  r   )rM  r   r  r   validater   r   r   r   r  r3  update_error_dict)	r=   r  r&  rU  r  r(  r*  r+  es	            r>   validate_constraintszModel.validate_constraintsN  s3   **,,#DNTBBB.9 	= 	=*K*/ 
= 
=
	=''T7RW'XXXX& = = =6400H<<
 122a77))**;A*>CCJJ1MMMM!"!4!4V!<!<=
=  	*!&)))	* 	*s   A
C#"A7CC#c                 4   i }|t                      }nt          |          }	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w	 |                                  n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rt          |          dS )z
        Call clean_fields(), clean(), validate_unique(), and
        validate_constraints() on the model. Raise a ValidationError for any
        errors that occur.
        Nr  )	r   clean_fieldsr   rP  r  r
   r   r  rR  )r=   r  r  rR  r  rQ  rJ   s          r>   
full_cleanzModel.full_cleanb  s+    ?eeGG'llG	1g.... 	1 	1 	1((00FFFFFF	1
	1JJLLLL 	1 	1 	1((00FFFFFF	1  	5 & &+++G0C0CKK%%%5$$W$5555" 5 5 5,,V445   	5 & &+++G0C0CKK%%%5))')::::" 5 5 5,,V445  	*!&)))	* 	*s]   ; 
A$AA$(A= =
B&B!!B&C, ,
D6DDE 
F%E??Fc           	         |t                      }i }| j        j        D ]}|j        |v s|j        rt          | |j                  }|j        r
||j        v r9t          |t                    rO	 t          | |j        |                    ||                      {# t          $ r}|j        ||j        <   Y d}~d}~ww xY w|rt          |          dS )z
        Clean all fields and raise a ValidationError containing a dict
        of all validation errors if any occur.
        N)r   ra   r   rJ   r  r   r   blankr  rZ   r   r   r  r   
error_list)r=   r  r  rp   	raw_valuerQ  s         r>   rT  zModel.clean_fields  s   
 ?eeG" 	. 	.Av  AK   ai00Iw 966)_55 .aiD)A)ABBBB" . . .!"qv.  	*!&)))	* 	*s   /*B
B=$B88B=c                    g |                                  |                                  | j        di |}| j        j        s|                    d          pg }|g  | j        di ||                                 |                     |          z  }g | 	                                | 
                                |                                 |                                 |                                 R }|                    |           |s'|                    |                                            |g |                                 |                     |          |                                 |                     |          |                                 |                     |          |                                 z  }|S )N	databasesr;   )_check_swappable_check_model_check_managersra   r   r   _check_fields$_check_m2m_through_same_relationship_check_long_column_names_check_id_field_check_field_name_clashes#_check_model_name_db_lookup_clashes3_check_property_name_related_field_accessor_clashes_check_single_primary_keyr  _check_column_name_clashes_check_unique_together_check_indexes_check_ordering_check_constraints_check_default_pk_check_db_table_comment_check_composite_pk)r   r   r  r[  clash_errorss        r>   r)  zModel.check  s.   
!!##

 !S **6**

 y  	

;//52I "",,V,,99;; --i88 F
$$&&..00 88:: HHJJ	
 ..00 L MM,'''   @c<<>>??? ++--##I.. $$&& ''	22	
 &&(( ,,Y77 ((** F rA   c                    | j         j        s| j         j        j        rt	          | j         j        t
                    r| j         j        j        j        spt          j	        d          s\| j         j
        rP| j         j
        j        s?t          j        dt          j         dd| j         j
        j        j         d| d          gS g S )NDEFAULT_AUTO_FIELDzPAuto-created primary key used when not defining a primary key type, by default 'rl   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)ra   r`   r  ru   rZ   r"   r   rv   r   is_overriddenr   !_is_default_auto_field_overriddenr	   Warningrq  r   rF   r   s    r>   rl  zModel._check_default_pk  s     	"		)	 39<77	 IL-9	 *+?@@	 	$	 I(J	 8 38 8 8O9/9FO O O
 $    	rA   c           
      
   g }| j         }|j        }t          |t                    s|S t	          t
                    }|j        D ]}d }	 |                    |          }n# t          $ r d }Y nw xY w|s|d}nV|j	        s|d}nI|j
        r|d}n<|j        r|d}n/||j        vr|d}n ||j	                                     |           |r.|                    t          j        |d|| d                     |                                D ]o\  }}	t#          |	          d	k    rW|	^}}
d
                    d |
D                       }|                    t          j        | d| d|d| d                     p|S )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.E042rr  rp  r   c              3   4   K   | ]}t          |          V  d S r   r   r  s     r>   rh   z,Model._check_composite_pk.<locals>.<genexpr>!  s(      &E&EutE{{&E&E&E&E&E&ErA   z and z are the same fields.)ra   r  rZ   r    r   listr   r  r   r   nullr  r   r3  r	   Errorr~   r   r   )r   r  r   r  seen_columnsrh  rs  r   r   r   rest
duplicatess               r>   rn  zModel._check_composite_pk  s8   yW"122 	M"4((. 	 	JDz22$     >$>>>\ 	>$=== >$GGG >$DDDd///$DDDU\*11*=== 	L%   !(     $0#5#5#7#7 	 	FK;!##$/!
T!YY&E&E&E&E&EEE
L%    *TTTTT(     s   AA-,A-c                    | j         j        sg S g }|D ]q}t          j        ||           st          |         }|j        j        s@d| j         j        v s2|                    t          j
        |j         d| d                     r|S )Nsupports_commentsz8 does not support comments on tables (db_table_comment).zmodels.W046r   rt  )ra   db_table_commentr   allow_migrate_modelr   r/  r  required_db_featuresr3  r	   rw  display_name)r   r[  r  r   r   s        r>   rm  zModel._check_db_table_comment.  s    y) 	I 	 	B-b#66 $RJ#5&#)*HHHN%2 6 6 6(	     rA   c                    g }| j         j        r	 t          j        | j         j                   n# t          $ r9 |                    t          j        d| j         j        z  d                     Y nnt          $ rb | j         j        
                    d          \  }}|                    t          j        d| j         j        d|d|dd                     Y nw xY w|S )	z"Check if the swapped model exists.z-'%s' is not of the form 'app_label.app_name'.zmodels.E001rt  rH   rs  z' references 'z0', which has not been installed, or is abstract.zmodels.E002)ra   r   r   	get_modelr   r3  r	   r|  	swappableLookupErrorsplit)r   r  rb   r   s       r>   r\  zModel._check_swappableE  s*    9 	sy01111   LG)-.(        	 	 	(+	(9(?(?(D(D%	:LL 9...			:::G )	      	 s   / A C1A(CCc                     g }| j         j        rI| j         j        s| j         j        r1|                    t          j        d| j        z  d                     |S )Nz'Proxy model '%s' contains model fields.zmodels.E017r  )ra   r   r   r   r3  r	   r|  rD   r   r  s     r>   r]  zModel._check_model`  sj    9? 	y% )E LACLP(     rA   c                 h    g }| j         j        D ]"}|                     |j        di |           #|S )zPerform all manager checks.r;   )ra   r   r  r)  )r   r   r  r   s       r>   r^  zModel._check_managersm  sI     y) 	3 	3GMM-'-11&112222rA   c                     g }| j         j        D ]"}|                     |j        di |           #| j         j        D ]$}|                     |j        dd| i|           %|S )zPerform all field checks.
from_modelr;   )ra   r   r  r)  r   )r   r   r  r   s       r>   r_  zModel._check_fieldsu  s     Y+ 	1 	1EMM+%+////0000Y1 	A 	AEMM+%+?????@@@@rA   c                 ^   g }g }| j         j        }d |D             }d |D             }|D ]}|j        j        | |j        j        |j        j        f}||v rB|                    t          j        d|j        j        j         j	        z  | d                     l|                    |           |S )zBCheck if no relationship model is used by more than one m2m field.c              3   X   K   | ]%}t          |j        j        t                    !|V  &d S r   )rZ   r   r   rW   ro   s     r>   rh   z=Model._check_m2m_through_same_relationship.<locals>.<genexpr>  s6      SSz!.2F	'R'RS!SSSSSSrA   c              3   X   K   | ]%}t          |j        j        t                    !|V  &d S r   )rZ   r   r  rW   ro   s     r>   rh   z=Model._check_m2m_through_same_relationship.<locals>.<genexpr>  s6      UUz!.2H)'T'TU!UUUUUUrA   zWThe model has two identical many-to-many relations through the intermediate model '%s'.zmodels.E003r  )
ra   r   r   r   r  through_fieldsr3  r	   r|  r   )r   r  seen_intermediary_signaturesr   rp   	signatures         r>   r`  z*Model._check_m2m_through_same_relationship  s     ')$- TSVSSS VUVUUU 	? 	?A$&-	I 888L?.06<=  (      -33I>>>>rA   c                       fd j         j        D             }|r:|d         j        s- j         j        j        dk    rt          j        d d          gS g S )z%Check if `id` field is a primary key.c                 J    g | ]}|j         d k    |j        j        k    | S r  )rJ   ra   r  )r[   rp   r   s     r>   r]   z)Model._check_id_field.<locals>.<listcomp>  s8     
 
 
4ADUDUADUDUDUrA   r   rt  zP'id' can only be used as a field name if the field also sets 'primary_key=True'.zmodels.E004r  )ra   r   primary_keyr  rJ   r	   r|  )r   r   s   ` r>   rb  zModel._check_id_field  s    
 
 
 
y-
 
 
  
	&)/ 
	CIL4E4M4M/$	    IrA   c                    g }i }| j         j        D ]}|j         j        D ]}|                    |j                  p|                    |j                  pd}|rU|                    t          j        d|j        d|j	        j         d|j        d|j	        j         d	| d                     |||j        <   |||j        <   | j         j        D ],}|j         
                                D ]}||vr
|||j        <   -| j         j                                        D ]k}|s|                    |j                  pd}|rH|                    t          j        d|j         d|j         d|j	        j          d| d	                     l| j         j        D ]}|                    |j                  p|                    |j                  pd}|j        d
k    o|o|j        d
k    o
|j	        | k    }|rJ|sH|                    t          j        d|j        d|j        d|j	        j         d|d	                     |||j        <   |||j        <   |S )z2Forbid field shadowing in multi-table inheritance.NzThe field 'z' from parent model 'z' clashes with the field 'rl   zmodels.E005r  z' from model 'zmodels.E006rt  )ra   r  r   r   rJ   r   r3  r	   r|  r   
get_fieldsr   r  )r   r  used_fieldsr   rp   clashrv   id_conflicts           r>   rc  zModel._check_field_name_clashes  s     i+ 	+ 	+F\. + +#//U;??193M3MUQU 
MM  %zzz5;+<+<+<afffagmmmU !$,  	 	 	 '(AF#)*AI&&+& i+ 	, 	,F\,,.. , ,K''*+K',
 9,3355 	 	K OOK$455=E LLk&6 L L!JL L6;k6GL L L(	     ' 	' 	'AOOAF++Q{qy/I/IQTE $V5VUZ4-?VEKSVDV   [ LL./fffejjj%+BSBSBSU(	     #$K%&K	""rA   c           
          g }g }| j         j        D ]\}|j        }|r<||v r8|                    t	          j        d|j        d|dd| d                     G|                    |           ]|S )NzField 'z' has column name 'z ' that is used by another field.z$Specify a 'db_column' for the field.zmodels.E007rr  )ra   r   r   r3  r	   r|  rJ   )r   used_column_namesr  rp   column_names        r>   rg  z Model._check_column_name_clashes  s     ' 	6 	6A(K  6{.???LL,-FFFKKKAC(      "((5555rA   c                 4   g }| j         }|                    d          s|                    d          r.|                    t	          j        d|z  | d                     n6t          |v r-|                    t	          j        d|z  | d                     |S )NrK  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)rD   
startswithendswithr3  r	   r|  r   )r   r  r   s      r>   rd  z)Model._check_model_name_db_lookup_clashes  s    \
  %% 	)<)<S)A)A 	MMCEOP$	      :%%MM@BLM$	     rA   c                     g }| j         j        }d | j                             d          D             }|D ]3}||v r-|                    t	          j        d|z  | d                     4|S )Nc              3   @   K   | ]}|j         r|j        |j        V  d S r   )rX  related_modelr   ro   s     r>   rh   zLModel._check_property_name_related_field_accessor_clashes.<locals>.<genexpr>1  sD       #
 #
}#
 "#!< I!<!<!<!<#
 #
rA   Freversez8The property '%s' clashes with a related field accessor.zmodels.E025r  )ra   r  _get_fieldsr3  r	   r|  )r   r  r  related_field_accessorsaccessors        r>   re  z9Model._check_property_name_related_field_accessor_clashes-  s    2#
 #
Y**5*99#
 #
 #

 0 		 		H>))L$&./(	     rA   c                     g }t          d | j        j        D                       dk    r*|                    t	          j        d| d                     |S )Nc              3   (   K   | ]}|j         	d V  dS )rp  N)r  ro   s     r>   rh   z2Model._check_single_primary_key.<locals>.<genexpr>E  s)      BBQAMBqBBBBBBrA   rp  zBThe model cannot have more than one field with 'primary_key=True'.zmodels.E026r  )sumra   r   r3  r	   r|  r  s     r>   rf  zModel._check_single_primary_keyB  sj    BB#)0BBBBBQFFMM*$	     rA   c                 l   t          | j        j        t          t          f          st          j        d| d          gS t          d | j        j        D                       rt          j        d| d          gS g }| j        j        D ]+}|                    | 	                    |d                     ,|S )z,Check the value of "unique_together" option.z*'unique_together' must be a list or tuple.zmodels.E010r  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   )rZ   r   rz  )r[   r   s     r>   rh   z/Model._check_unique_together.<locals>.<genexpr>\  sG       
 
 6E4=111
 
 
 
 
 
rA   z7All 'unique_together' elements must be lists or tuples.zmodels.E011r  )
rZ   ra   r  r   rz  r	   r|  r   r  _check_local_fields)r   r  r   s      r>   rh  zModel._check_unique_togetherP  s     #)3eT]CC 	@$     
 
)3
 
 
 
 
 	
 M$    F)3 R Rc55f>OPPQQQQMrA   c           	         g }t                      }| j        j        D ]}|j        d         dk    s|j        d                                         r2|                    t          j        d|j        z  | d                     t          |j                  |j	        k    r9|                    t          j        d|j        |j	        fz  | d                     |j
        r<|j        D ]4}|                    d |                     |          D                        5|D ]v}t          j        ||           st           |         }|j        j        sdd	| j        j        v sVt)          d
 | j        j        D                       r3|                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt)          d | j        j        D                       r3|                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt)          d | j        j        D                       r3|                    t          j        d|j        z  d| d                     xd | j        j        D             }|d | j        j        D             z  }||z  }|                    |                     |d                     |S )z/Check fields, names, and conditions of indexes.r   rK  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   &   K   | ]}|d          V  dS r  r;   )r[   r  s     r>   rh   z'Model._check_indexes.<locals>.<genexpr>  s7       & &#&A& & & & & &rA   supports_partial_indexesc              3   (   K   | ]}|j         d uV  d S r   )	conditionr[   r   s     r>   rh   z'Model._check_indexes.<locals>.<genexpr>  s)      QQeeoT1QQQQQQrA   z,%s does not support indexes with conditions.zLConditions will be ignored. Silence this warning if you don't care about it.zmodels.W037rr  supports_covering_indexesc              3   $   K   | ]}|j         V  d S r   includer  s     r>   rh   z'Model._check_indexes.<locals>.<genexpr>  s$      CCemCCCCCCrA   z1%s does not support indexes with non-key columns.zQNon-key columns will be ignored. Silence this warning if you don't care about it.zmodels.W040supports_expression_indexesc              3   $   K   | ]}|j         V  d S r   )contains_expressionsr  s     r>   rh   z'Model._check_indexes.<locals>.<genexpr>  s%      PPUe0PPPPPPrA   z+%s does not support indexes on expressions.zKAn index won't be created. Silence this warning if you don't care about it.zmodels.W043c                 ,    g | ]}|j         D ]\  }}|S r;   )fields_orders)r[   r   r   rK  s       r>   r]   z(Model._check_indexes.<locals>.<listcomp>  s@     
 
 
AT
 
5=UAE
 
 
 
rA   c                 &    g | ]}|j         D ]}|S r;   r  )r[   r   r  s      r>   r]   z(Model._check_indexes.<locals>.<listcomp>  s'    WWWuWWg7WWWWrA   r   )r   ra   r   rJ   isdigitr3  r	   r|  r   max_name_lengthr  expressionsr   r  r   r  r   r/  r  r  r   rw  r  r  r  r  r  )	r   r[  r  
referencesr   r  r   r   r   s	            r>   ri  zModel._check_indexesn  s    UU
Y& 	 	E z!}##uz!}'<'<'>'>#L').4(	     5:!666L&).U5J(KL(	     ) "'"3  J%% & &*-*B*B:*N*N& & &      3	 3	B-b#66 $RJ#<-1OOOQQsy?PQQQQQ PNF$12:  (	 	 	   #=.#)2PPPCC1BCCCCC QNK$12B  (	 	 	   #?0CI4RRRPPci>OPPPPP SNE$12:  (	 	 	  
 
"y0
 
 
 	WW	(9WWWW*c--fi@@AAArA   c                 
   ddl m} i }| j                            d          D ]&}|||j        <   t          |d          r
|||j        <   'g }|D ]2}	 ||         }t          |j        |j	                  r5|
                    t          j        d|d|d|d	| d
                     [t          ||j                  r4|
                    t          j        |d|d|d| d                     || j        j        vr?|
                    t          j        d|d|d| j        j        d	d| d                     # t           $ r5 |
                    t          j        d|d|d	| d                     Y 0w xY w|S )Nr   )modelsFr  r   rs  z' refers to a ManyToManyField 'z.', but ManyToManyFields are not permitted in 'rl   zmodels.E013r  z! refers to a CompositePrimaryKey z0, but CompositePrimaryKeys are not permitted in rH   zmodels.E048z' refers to field 'z' which is not local to model 'z4This issue may be caused by multi-table inheritance.zmodels.E016rr  z#' refers to the nonexistent field 'zmodels.E012)	django.dbr  ra   r  rJ   rS   r   rZ   r   ManyToManyRelr3  r	   r|  r    r   r+  r  )r   r   optionr  forward_fields_mapr   r  rh  s           r>   r  zModel._check_local_fields  sX   $$$$$$  Y**5*99 	: 	:E-2uz*ui(( :49"5=1  1	 1	J0*:6 e0&2FGG !MM !' *

 & !$,
 
 
     v'ABB MM% 8 8)8 8,28 8 8 !$,      #)"888MM'-vvzzz39;P;P;PR!W #,    M    LL #FF&JJ
  (  
 
 
 
 
^ s   E;F ?F c           
         | j         j        rt          j        d| d          gS | j         j        s| j         j        sg S t          | j         j        t          t          f          st          j        d| d          gS g }| j         j        }d |D             }d |D             }g }g }|D ]6}t          |v r|
                    |           !|
                    |           7|}|D ]}| }d}|                    t                    D ]}		 |	d	k    r|j         j        }n|j                             |	          }|j        r|j        d
         j        j        }nd}R# t$          t&          f$ r\ |*|                    |	          B|                    |	          -|
                    t          j        d|z  | d                     Y w xY wd |D             }g }
| j         }t-          t/          j        d t/          |j        |j                  D                                 }|
                    ||z
             |
D ]/}|
                    t          j        d|z  | d                     0|S )ze
        Check "ordering" option -- is it a list of strings and do all fields
        exist?
        z?'ordering' and 'order_with_respect_to' cannot be used together.zmodels.E021r  zQ'ordering' must be a tuple or list (even if you want to order by only one field).zmodels.E014c              3   P   K   | ]!}t          |t                    |d k    |V  "dS )?N)rZ   r1  ro   s     r>   rh   z(Model._check_ordering.<locals>.<genexpr>*	  s5      GGz!S'9'9Ga3hh!hhhhGGrA   c              3   @   K   | ]}|                     d           V  dS )r  N)removeprefixro   s     r>   rh   z(Model._check_ordering.<locals>.<genexpr>-	  s.      66!!..%%666666rA   Nr  zJ'ordering' refers to the nonexistent field, related field, or lookup '%s'.zmodels.E015c                     h | ]
}|d k    |S rP  r;   ro   s     r>   rq   z(Model._check_ordering.<locals>.<setcomp>W	  s    111qDyy!yyyrA   c              3      K   | ]:}|j         r|j        r|j        |j        fn|j                                        fV  ;d S r   )ru   concreterJ   r   r   related_query_namero   s     r>   rh   z(Model._check_ordering.<locals>.<genexpr>`	  sk            N934:9QVQY'''44668	           rA   )ra   _ordering_clashr	   r|  r   rj   rZ   rz  r   r   r3  r  r  r  rX  
path_infosto_optsr   r   AttributeErrorget_transform
get_lookupr   r   from_iterabler   r]  r  )r   r  r   _fieldsrelated_fieldsrp   r   _clsfldpartinvalid_fieldsr   valid_fieldsinvalid_fields                 r>   rj  zModel._check_ordering
	  s)    9$ 	U$    9* 	#)2D 	I#),tUm<< 	'$	    # HGVGGG 76v666  	" 	"AQ%%a((((q!!!! $ 	 	EDCJ//  t||"jm"j22488 $"~b19?#)>:   {))$//7CNN4<P<P<X"L!ACH!I$'#0	    	4 21V111  y     t{D,@AA       	
 	
 	f|3444+ 	 	MMM-/<=$	      s   AEA*GGc                    |sg S g }d}d}|D ]^}t          j        ||           st          |         }|j                                        }||j        j        rM||}|}T||k     r|}|}_||S | j        j        D ]Z}|j	        Q|j
        x}	Ht          |	          |k    r5|                    t          j        d|	d|d|dd| d                     [| j        j        D ]}t!          |j        j        t&                    r"|j        j        j        j        D ]Z}
|
j	        Q|
j
        x}Ht          |          |k    r5|                    t          j        d	|d|d|dd
| d                     [|S )z
        Check that any auto-generated column names are shorter than the limits
        for each database in which the model will be created.
        Nz.Autogenerated column name too long for field "z". Maximum length is "z" for database "z".z/Set the column name manually using 'db_column'.zmodels.E018rr  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  r/  truncates_namesra   r   	db_columnr   r   r3  r	   r|  r   rZ   r   r  r1  )r   r[  r  allowed_lendb_aliasr   r   r  rp   r  m2mrel_names               r>   ra  zModel._check_long_column_namesw	  s     	I  	" 	"B-b#66 $RJ(n<<>>O&**=*M&&"1K!HH${22"1K!HM' 	 	A #$%H,[9$${22LL ';;XXX? O(  	 	 	 - 	 	A!.0#66  ~-3@  M)%(Z/<H33MM  (xxhhh@!R !$,
 
 
  ( rA   c              #   R  K   t          |t                    r|j        D ]|}t          |t                    rJ|\  }}t          |                    t
                              V  |                     |          E d {V  a|                     |          E d {V  }d S t          |t                    r0t          |j                            t
                              V  d S t          |d          r2|
                                D ]}|                     |          E d {V  d S d S )Nget_source_expressions)rZ   r)   childrenr   r  r   r  r(   rJ   rS   r  )r   exprchildlookuprT   src_exprs         r>   r  zModel._get_expr_references	  sg     dA 	> ? ?eU++ ?$)MFEZ 8 899999"77>>>>>>>>>>"77>>>>>>>>>>? ? a   	>	
334444444T344 	> 7799 > >33H==========	> 	>> >rA   c                     g }|D ]]}t          j        ||           st          |         }| j        j        D ]+}|                    |                    | |                     ,^|S r   )r   r  r   ra   r&  r  _check)r   r[  r  r   r   r+  s         r>   rk  zModel._check_constraints	  s     	B 	BB-b#66 $RJ!i3 B B
j//Z@@AAAABrA   r   )NNN)FFFNN)FNFFNNr  )NTT)JrD   rE   rF   r  classmethodr  r?   rC   r"  r&  r/  r(  r?  rA  rD  r   r  r$  rK  rd  rf  ri  r  r  alters_datar  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r	  r
  r  r:  r2  rM  rR  rU  rT  r)  rl  rn  rm  r\  r]  r^  r_  r`  rb  rc  rg  rd  re  rf  rh  ri  r  rj  ra  r  rk  r^   r   s   @r>   r   r     sZ       p2 p2 p2 p2 p2d 
 
 [
< < <E E E! ! !  
1 1 1  "$ $ $,. . . .; ; ; 
+{	+	+B
 
 
 

 
 
Q/ Q/ Q/ Q/f
 
 
 

, , ,$"O "O "OV M
 M
 M
 M
 M
^ D 
 
 
 
 
2 E  [* D D D DL !I HL- - - -b ^ ^ ^ ^@, , ,8
 
 
4 4 4 4l	" 	" 	" 	" F
 
 
 
 G
 
 
  *( ( (.   BM M M  * * * * B* B* B* B*H/ / /b  >
 
 
"  @  * * * *(-* -* -* -*^* * * *8 # # [#J   [> 8 8 [8t   [,   [4 
 
 [
   [   [ ! ! [!F   [$ C C [CJ   [0   [.   [(   [   [: X X [Xt > > [>@ j j [jX M M [M^ > > [>   [    rA   r   )	metaclassc                     j         j        }|                    |           } j                            |          j        di |                    fdt          |          D             dg           d S )Nc                 0    g | ]\  }} ||           S ))r  r  r;   )r[   r  r  ordered_objs      r>   r]   z$method_set_order.<locals>.<listcomp>	  s,    NNNieR5	)	)	)NNNrA   r  r;   )ra   r   get_forward_related_filterr   rT  rV  bulk_updater~  )r=   r  id_listrU  	order_wrtr  s    `    r>   method_set_orderr  	  s    !7I66t<<K0K""5))0??;??KKNNNN9W;M;MNNN	
    rA   c                     |j         j        }|                    |           }|j         j        j        } |j        j        di |                    |d          S )NT)flatr;   )ra   r   r  r  rJ   r   rV  values_list)r=   r  r  r  pk_names        r>   method_get_orderr  	  s]    !7I66t<<K"'G%;%4444@@t@TTTrA   c                     t          |d| j                                        z  t          t          |                      t          |d| j                                        z  t          t
          |                      d S )Nzget_%s_orderzset_%s_order)r   rD   lowerr   r  r  )r   r  s     r>   r   r   	  s    --///&..  
 --///&..    rA   c                 x    t          | t                    rt          j        |  }n| }|                    |          S )z7Used to unpickle Model subclasses with deferred fields.)rZ   r   r   r  r|   )model_idr   s     r>   r,  r,  
  s;    (E"" ) ==rA   Tr   )`rx   rQ   r;  collectionsr   	functoolsr   	itertoolsr   asgiref.syncr   r)  django.appsr   django.confr   django.corer	   django.core.exceptionsr
   r   r   r   r   r   r  r   r   r   r   r   r   django.db.modelsr   r   r   r   r   django.db.models.constantsr   django.db.models.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   rK  r8   r   rN   rU   rI   rW   r   r   r   r  r  r   r,  __safe_for_unpickle__r;   rA   r>   <module>r&     sx      # # # # # # # # # # # #       & & & & & &                                                        W V V V V V V V V V V V V V 1 1 1 1 1 1 8 8 8 8 8 8 8 8 8 8 8 8 8 8 A A A A A A            0 / / / / / , , , , , , , , , , , , ' ' ' ' ' ' ' '              @ ? ? ? ? ? ? ? = = = = = = + + + + + + / / / / / / 5 5 5 5 5 5 5 5 6 6 6 6 6 6" " " " " " " " 8::  $P P P
X) X) X) X) X) X) X) X)v
       	5 	5 	5 	5 	5 	5 	5 	5S  S  S  S  S J) S  S  S  S z@   U U U
 
 
$      (, $ $ $rA   