
    $g                       d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZmZmZ d d
lmZm Z m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-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lJmKZKmLZL d dlMmNZO  G d d          ZP eP            ZQd ZRd ZS G d deT          ZU G d  d!          ZV G d" d#          ZW G d$ d%eDeU&          ZXd,d'ZYd( ZZd) Z[d* Z\d+e\_]        dS )-    N)partialmethod)chain)sync_to_async)apps)settings)checks)NON_FIELD_ERRORSFieldDoesNotExist
FieldErrorMultipleObjectsReturnedObjectDoesNotExistValidationError)DJANGO_VERSION_PICKLE_KEYDatabaseError
connectionconnectionsroutertransaction)NOT_PROVIDEDExpressionWrapperIntegerFieldMaxValue
LOOKUP_SEP)CheckConstraintUniqueConstraint)CASCADE	Collector)DatabaseDefaultRawSQL)ForeignObjectRelOneToOneFieldlazy_related_operationresolve_relation)Coalesce)Manager)Options)FQ)class_prepared	post_init	post_savepre_initpre_save)
AltersDatamake_model_tuple)	force_str)make_hashable)capfirstget_text_list)gettext_lazyc                       e Zd Zd Zd ZdS )Deferredc                     dS Nz<Deferred field> selfs    U/var/www/html/netbox-4.1.3/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   E   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   W   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>d   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>a  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%   modelr1   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___   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_classq  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._preparew  s   yc% 	R$12D% % %C! )62E) ) )C% )6 R0)/&'CS&QQQ ;		66$+6666666CK
 %-$C$G$G%
 %
! % 	HC+-FGGG} 	1<<<<<<<  -/2|<   iiG#'G Y000
 Y& 	/ 	/E: /))#...3''''''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dDdZd Z eee          Zd ZdEdZdEdZd Z	 dFdZde_        	 dFdZde_        ed             Z	 	 	 	 	 dGdZde_        	 dDdZ	 	 	 	 	 	 dHdZd Zd ZdDdZdIdZde_        dIdZ de _        d Z!d Z"d  Z#dDd!Z$d" Z%d# Z&dDd$Z'dId%Z(d& Z)d' Z*d( Z+d) Z,d* Z-dDd+Z.dJd,Z/dDd-Z0ed.             Z1ed/             Z2ed0             Z3ed1             Z4ed2             Z5ed3             Z6ed4             Z7ed5             Z8ed6             Z9ed7             Z:ed8             Z;ed9             Z<ed:             Z=ed;             Z>ed<             Z?ed=             Z@ed>             ZAed?             ZBed@             ZCedA             ZDedB             ZEedC             ZF xZGS )KModelc                    | j         }| j        }t          }t          }|j        rt          d          t          j        |||           t                      | _	        t          |          t          |j                  k    rt          d          |sBt          |j                  }t          ||          D ]\  }}	||u r
 || |	j        |           nt          |j                  }t          ||          D ]b\  }}	||u r
 || |	j        |           |                    |	j        t&                    t&          urt          |j         d|	j         d          c|D ]+}	d}
|	j        |vr|	j        |	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>6  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__  sn   nz	= 	GEFFFStF;;;; !ll t99s4/0000FGGG 	t344K
 "$44 3 3
U)##u}c22223 t{++K!$44  
U)##u}c222::ej,77|KK#+ G G8=
G G G   L ! &	7 &	7E %}F**u|/Cu/C *e02BCC 2	6"(**UZ"8"8,0))# 6 6 66"(**U]";";CC' 6 6 6"'"3"3"5"5CCC6	62$jj77# 2 2 2
 $//112 ''))  	7
 )++HT5:w777i''HT5=#666 	!1NJ%||~~ 8 8e >))I-- tU3338t,,, !	11$HT4777	 - . . ."tg-


.
  #'99,I,Ij,I,I,I#I#I | * *'* *   	cD111111sZ   F66
HGHG=:H<G==HHH""IIK..L L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>B  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__K  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__N  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__Q  sW    %'' 	"!!:$(BBB5=5=   rA   c                 V    | j         t          d          t          | j                   S )Nz8Model instances without primary key value are unhashable)r  r   hashr<   s    r>   __hash__zModel.__hash__[  s&    7?VWWWDG}}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__`  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=   stater/  attrrT   s        r>   r&  zModel.__getstate__f  s    ""$$)E(O44h',X'C'H'H'J'Jh$  ;;== 	? 	?KD%%,, ?!(($e)=>>> 	 ):E%&0    e		$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.r/  )r   r   r'  r(  warningswarnRuntimeWarningr}   r0  r   r   )r=   r3  pickled_versionr4  rT   s        r>   __setstate__zModel.__setstate__w  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                 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           	      `  	 |i | _         nft          | dd          }|D ]}||v r||= |                    |           |sdS t          d |D                       rt	          dt
          z            d| i}| j        j                            ||          	                    | j
                  }|                                 	|t          |          } |j        | }n$	r"	fd	| j        j        D             } |j        | }|                                }|                                }| j        j        D ]f}|j        |v rt%          | |j        t          ||j                             |j        r*|                    |           r|                    |            g| j        j        D ],}|                    |           r|                    |            -| j        j        D ]3}|j        r*|                    |           r|                    |            4|j        j        | j        _        dS )
aU  
        Reload field values from the database.

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

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

        When accessing deferred fields of an instance, the deferred loading
        of the field will call this method.
        N_prefetched_objects_cacher;   c              3   (   K   | ]}t           |v V  d S r   r   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    g | ]}|j         v|j         S r;   )r   )r[   rp   deferred_fieldss     r>   r]   z)Model.refresh_from_db.<locals>.<listcomp>  s2       9O33 	333rA   )rG  r   remover   r   r   r   r   
db_managerfilterr  rE  listonlyra   r   r   r   r   is_relation	is_cacheddelete_cached_valuerelated_objectsr   r   r   )
r=   usingr   prefetched_objects_cacher   rI  db_instance_qsdb_instancenon_loaded_fieldsrL  s
            @r>   refresh_from_dbzModel.refresh_from_db  s    >-/D**'.t5PRT'U'U$ ) )44407MM%((( 33F33333  13=>  
 T"5@@ A 
 

&DG&

 	
 2244&\\F0^0&9NN 	:   3  F
 1^0&9N$((**';;==Z/ 	0 	0E} 111D%-em)L)LMMM  0U__T%:%: 0))$/// Z/ 	0 	0Et$$ 0))$/// Z. 	0 	0E  0U__T%:%: 0))$///$+.rA   c                 P   K    t          | j                  ||           d {V S )N)rV  r   )r   r[  )r=   rV  r   s      r>   arefresh_from_dbzModel.arefresh_from_db  s8      8]4#788uVTTTTTTTTTTrA   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    ::Fc                                           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    rtt                      } j        j        D ]3}|j        s*t          |d	          s|                    |j                   4|	                    |          }	|	rt          |	          }                     ||||
           dS )aa  
        Save the current instance. Override this in a subclass if you want to
        control the saving process.

        The 'force_insert' and 'force_update' parameters can be used to insist
        that the "save" must be an SQL insert or update (or equivalent for
        non-SQL backends), respectively. Normally, they should not be set.
        save)operation_namer   z6Cannot force both insert and updating in model saving.c                 L    h | ] }|j         j        v|j        d u |j         !S )F)r   r   r   rD  s     r>   rq   zModel.save.<locals>.<setcomp>  s@     )
 )
 )
y--!+2F2F I2F2F2FrA   Nz_The following fields do not exist in this model, are m2m fields, or are non-concrete fields: %sr   through)rV  force_insertforce_updateupdate_fields) _prepare_related_fields_for_saver   db_for_writer   r   ra   r   	frozenset_non_pk_concrete_field_names
differencer   r   r   r   primary_keyrS   r   r   	save_base)
r=   rg  rh  rV  ri  deferred_non_generated_fieldsr   non_model_fieldsr   loaded_fieldss
   `         r>   rb  z
Model.save  s    	--V-DDDK,T^dKKK 	W\ 	W] 	WUVVV)
 )
 )
 )
Z/)
 )
 )
%
 $ ! %m44M*AK,77DD  =ii 0112   	9-	9 ''%%K3 3 3( 3	1J1J 3OOEM222'223PQQM 9 )- 8 8%%'	 	 	
 	
 	
 	
 	
rA   Tc                 T   K    t          | j                  ||||           d {V S )N)rg  rh  rV  ri  )r   rb  )r=   rg  rh  rV  ri  s        r>   asavezModel.asave?  sU       .]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   rg  members      r>   _validate_force_insertzModel._validate_force_insertK  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.
        rd  N)r   r   rawrV  ri  F)rV  	savepoint)rV  )r   r   createdri  r{  rV  )r   rk  r   ra   r   r   ru   r/   r   r   r   atomicmark_for_rollback_on_errorry  _save_parents_save_tabler   r   r   r-   )r=   r{  rg  rh  rV  ri  r   originr   context_managerparent_insertedupdateds               r>   rp  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   rV  ri  rg  updated_parents)r   rV  ri  rg  T)ra   r   r~   r   r  r   r   r   r  r  rw  r>  rS  rT  )r=   r   rV  ri  rg  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         d j        D             }rfd|D             }                               }|5j                                       }t           j        j        |           |dus|srt          d          d}	sN|sL j        j	        r@j        j
        rj        j
        t          usj        j        rj        j        t          urd}ro|sm|j                            |          }
 fd|D             }p|}                     |
||||          }	|r|	st!          d          r|	st!          d	          |	s'j        rj        }|                               } |j                            |          j        di |                    t+          t-          t/          d
          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 | ]}|j         	|j        |S r;   )ro  r   ro   s     r>   r]   z%Model._save_table.<locals>.<listcomp>  s<     !
 !
 !
=!
 *+!
!
 !
 !
rA   c                 8    g | ]}|j         v s	|j        v |S r;   )rJ   r   )r[   rp   ri  s     r>   r]   z%Model._save_table.<locals>.<listcomp>  s<     % % %6]**ai=.H.H .H.H.HrA   Nz5Cannot force an update in save() with no primary key.FTc                 p    g | ]2}|d rt          |j                  n|                    d          f3S r  )r   r   r/   )r[   rp   r{  r=   s     r>   r]   z%Model._save_table.<locals>.<listcomp>  sZ        	 14QWT19---!**T5:Q:Q  rA   z&Forced update did not affect any rows.z0Save with update_fields did not affect any rows._order   )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   local_concrete_fieldsr>  r  get_pk_value_on_saver   r   r   r   r   defaultr   
db_defaultr   rV  
_do_updater   r   get_filter_kwargs_for_objectrO  	aggregater&   r   r   r   r   r  db_returning_fields
_do_insertr   )r=   r{  r   rg  rh  rV  ri  non_pks_non_generatedpk_valr  base_qsr  forced_updater   filter_argsr   returning_fieldsresultsrT   r   r  s   ``    `            @@r>   r  zModel._save_table  sz    y!
 !
/!
 !
 !
  	% % % %.% % %! !!$''>W11$77FD$'/6222t# 	V< 	V= 	VTUUU 		  		  "		 
 		 
 &*W_L%H%HG& &I+/7+=\+Q+Q  L 	X, 	X'--e44G     /  F *9\Moo} G  NG N#$LMMM XW X#$VWWW 	8)  2#@@FFC%++E22+ +)+ +Y$,- #Ha 8|~~   "!HH	% %    $	%     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).
        rJ  Nr   )rO  existsra   select_on_save_update)r=   r  rV  r  r  ri  r  filtereds           r>   r  zModel._do_update7  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  rV  r{  )_insert)r=   r   rV  r   r  r{  s         r>   r  zModel._do_insertS  s0    
 F-  
 
 	
rA   c                    | j         j        D ]}|r||vr	|j        r|                    |           rt	          | |j        d           }|s>|j        @|j        j        s|j        	                    |           t          |d|j        d          t	          | |j                  |j        v rt          | |j        |           t	          ||j        j                  t	          | |j                  k    r|	                    |            | j         j        D ]o}|r||vr	|j        r_|                    |           rJt!          |d          r:|                    | d           }|r!|j        t          | d|j         d          pd S )NzB() prohibited to prevent data loss due to unsaved related object 'rl   fk_field)r  )ra   r   rR  rS  r   rJ   r  r   multiplerT  r   r   empty_valuesr   r@  r   rS   get_cached_value)r=   rc  r   r   r   s        r>   rj  z&Model._prepare_related_fields_for_save`  s   
 Z/  	4  	4E %v--   4U__T%:%: 4dEJ55  6> -6 D*>>sCCC$2@..%***N   T5=11U5GGG D%*c222 3 2 :;;w%-@ @   --d333Z. 	 	E %v--!
OOD))
 E:..

 ,,T4,@@ 36>$) B B38:B B B  	 	rA   c                     | j         .t          | j        j        d| j        j         j        d          |pt          j        | j        |           }t          ||           }|	                    | g|           |
                                S )Nz% object can't be deleted because its z attribute is set to None.rd  )rV  r  )keep_parents)r  r   ra   r)  r   r   rk  r   r   collectdelete)r=   rV  r  	collectors       r>   r  zModel.delete  s    7?"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)rV  r  )r   r  )r=   rV  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                 |   | j         st          d          |rdnd}|rdnd}t          | |j                  }t	          j        |j        |fd| | j         fgt          j                  }t	          j        ||j         d| |fgt          j                  } | j	        j
                            | j        j                  j        di |                    |                              ||j        d	|z            }	 |d
         S # t           $ r( |                     d| j	        j        j        z            w xY w)Nz8get_next/get_previous cannot be used on unsaved objects.gtlt -pk__)	connector__z%spkr   z!%s matching query does not exist.r;   )r  r   r   r   r*   createrJ   ANDORr   r   rV  r   r   rO  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  s_   w 	YWXXX&TT$&3em,,Huz5)K2KK+ABaeTTTHaUZ//2//78ADIIIDN+11$+.AA  VAYYXuzz2FUNCC	 		a5L 	 	 	##3dn6J6VV  	s   D	 	2D;c                    d|z  }t          | |          s|rdnd}|rdnd}| j        j        }|                    |           }  | j        j        j        di |j        di d|z   | j        j                            d          j        di | j        j        j	        | j        ii
                    |          d d                                         }t          | ||           t          | |          S )	Nz__%s_order_cacher  r  r  z-_orderz
_order__%sr  r;   )rS   ra   r   r  r   r   rO  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        } fd|j        D             }dvrt           j        |j                  |d<   |S )Nc                     i | ]Q}|j         v|j        |j         t          |j                  xrt	          d           rnt          |          RS )resolve_expression)rJ   r   r   r   rS   r   )r[   r   excluder=   rT   s     r>   
<dictcomp>z3Model._get_field_expression_map.<locals>.<dictcomp>  s|     	
 	
 	
 z((( J$T5=999E)E#788) 5%(( )((rA   r  )r   ra   r  r   r  )r=   r   r  	field_maprT   s   ` ` @r>   _get_field_expression_mapzModel._get_field_expression_map  s    ?eeG!tz	
 	
 	
 	
 	
 	
 3	
 	
 	
	 w#DGTW55IdOrA   c                     | j         t          d| z            t          | |j                                        j                  S )Nz9Unsaved model instance %r cannot be used in an ORM query.)r  r   r   r   get_related_fieldr   )r=   r   s     r>   prepare_database_savezModel.prepare_database_save  sG    7?KdR   tU/AACCKLL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.clean  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_errorskvs           r>   validate_uniquezModel.validate_unique  s    
 &*%<%<W%<%M%M"{,,];;//<<%%'' 	/ 	/DAqa$$++A.... 	*!&)))	* 	*rA   c                    t                      g }| j        | j        j        fg}g }|r| j        | j        j        fg}| j                                        D ]^}|j        j        r!|                    ||j        j        f           |r-|j        j        r!|                    ||j        j        f           _|D ]I\  }}|D ]A}	t          fd|	D                       s$|                    |t          |	          f           BJ|rI|D ]F\  }}
|
D ]>}t          fd|j	        D                       s|                    ||j	        f           ?Gg }| j        | j        j
        fg}| j                                        D ]#}|                    ||j        j
        f           $|D ]\  }}|D ]}|j        }|v r|j        r|                    ||ff           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           |j        r'|j        vr|                    |d||j        f           ||fS )a{  
        Return a list of checks to perform. Since validate_unique() could be
        called from a ModelForm, some fields may have been excluded; we can't
        perform a unique check on a model that is missing fields involved
        in that check. Fields that did not validate should also be excluded,
        but they need to be passed in via the exclude argument.
        Nc              3       K   | ]}|v V  	d S r   r;   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>4  s'      MM4twMMMMMMrA   dateyearmonth)r   r   ra   unique_togethertotal_unique_constraintsget_parent_listr1  r   r   r   r   rJ   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   s    `               r>   r  zModel._get_unique_checks  sP    ?eeG!^TZ-GHI# 	R NDJ,OPQK J6688 	 	L!1  ''!<#5#EF   ( L,>,W ""!<#5#NO   -= 	F 	F(K( F F====u===== F!((+uU||)DEEEF
 $ 	O2= O O.."3 O OJMMMM:;LMMMMM O%,,k:;L-MNNNO
 
 #ndj.EFG J6688 	V 	VL$$lL4F4S%TUUUU#4 	Y 	YK Y Yv7??8 A!((+w)?@@@$ W):')I)I&&VT1CT'UVVV$ W):')I)I&&VT1CT'UVVV% Y!*<G*K*K&&WdADV'WXXXY k))rA   c                    i }|D ]a\  }}i }|D ]q}| j                             |          }t          | |j                  }||dk    rt          j        j        rK|j        r| j        j	        s_||t          |          <   rt          |          t          |          k    r |j        j        di |}	|                     |j                   }
| j        j	        s|
|	                    |
          }	|	                                r`t          |          dk    r	|d         }nt"          }|                    |g                               |                     ||                     c|S )Nr  rJ  r  r   r;   )ra   r  r   r   r   features!interprets_empty_strings_as_nullsro  r   r   strr   r   rO  r>  r  r  r	   r  r1  unique_error_message)r=   r  r  r  unique_checklookup_kwargsr_  rp   lookup_valuer  model_class_pkkeys               r>   r  zModel._perform_unique_checksP  s   )6 *	 *	%K M* > >
J((44&tQY77' B&&"+M ' = ); 1=c*oo.. <  C$6$6664-4EE}EEB "--k.?@@N;% 3.*DZZ>Z22yy{{ |$$))&q/CC*C!!#r**11--k<HH   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"| j        |		                    | j                  }	|	
                                r>|                    |g                               |                     |||                     
|S )Nr  z%s__dayz	%s__monthz%s__yearr  rJ  r;   )r   dayr  r  r   rO  r   r   r  r  r  r  r1  date_error_message)
r=   r  r  r  lookup_typer   
unique_forr
  r  r  s
             r>   r  zModel._perform_date_checks  sU   ;F 	 	7KeZM 4,,D|f$$8<i*45:>*kJ679=j:566FM+G G***kkBC $+4#7#7M% 4-4EE}EEB ;% ,$'*=ZZ47Z++yy{{ !!%,,33++K
KK   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  r_  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   r	  r  r   r  r  r  c                 ^    g | ])}t                              |          j                  *S r;   )r4   r  r  )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   r  r   r  r   r  r5   _)r=   r  r	  r  r   r   r   s         @r>   r  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                                        D ]/}|j        j        r!|                    ||j        j        f           0|S r   )r   ra   r  r  r1  )r=   r  r  s      r>   get_constraintszModel.get_constraints  sj    
(>?@ J6688 	S 	SL!- S""L,2D2P#QRRR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 )Nrd  )r  rV  r  r  r  r   )r#  r   rk  r   validater   r   r   r   r  r1  update_error_dict)	r=   r  r  rV  r  r  r  r  es	            r>   validate_constraintszModel.validate_constraints  s3   **,,#DNTBBB.9 	= 	=*K*/ 
= 
=
	=''T7RW'XXXX& = = =6400H<<
 122a77))**;A*>CCJJ1MMMM!"!4!4V!<!<=
=  	*!&)))	* 	*s   A
C#"A7CC#c                 4   i }|t                      }nt          |          }	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w	 |                                  n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rm|D ]&}|t
          k    r||vr|                    |           '	 |                     |           n,# t          $ r}|                    |          }Y d}~nd}~ww xY w|rt          |          dS )z
        Call clean_fields(), clean(), validate_unique(), and
        validate_constraints() on the model. Raise a ValidationError for any
        errors that occur.
        Nr  )	r   clean_fieldsr   r&  r  r	   r   r  r(  )r=   r  r  r(  r  r'  rJ   s          r>   
full_cleanzModel.full_clean  s+    ?eeGG'llG	1g.... 	1 	1 	1((00FFFFFF	1
	1JJLLLL 	1 	1 	1((00FFFFFF	1  	5 & &+++G0C0CKK%%%5$$W$5555" 5 5 5,,V445   	5 & &+++G0C0CKK%%%5))')::::" 5 5 5,,V445  	*!&)))	* 	*s]   ; 
A$AA$(A= =
B&B!!B&C, ,
D6DDE 
F%E??Fc           	         |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_valuer'  s         r>   r*  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_index_together_check_unique_together_check_indexes_check_ordering_check_constraints_check_default_pk_check_db_table_comment)r   r   r  r1  clash_errorss        r>   r   zModel.check7  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   WarningrG  r   rF   r   s    r>   rC  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                    | 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   rJ  )ra   db_table_commentr   allow_migrate_modelr   r  rO  required_db_featuresr1  r   rM  display_name)r   r1  r  r   r   s        r>   rD  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rJ  rH   'z' references 'z0', which has not been installed, or is abstract.zmodels.E002)ra   r   r   	get_modelr   r1  r   Error	swappableLookupErrorsplit)r   r  rb   r   s       r>   r2  zModel._check_swappable  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.E017rV  )ra   r   r   r   r1  r   rY  rD   r   r  s     r>   r3  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>   r4  zModel._check_managers  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>   r5  zModel._check_fields  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   rf  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.E003rP  )
ra   r   r   r   rf  through_fieldsr1  r   rY  r   )r   r  seen_intermediary_signaturesr   rp   	signatures         r>   r6  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 rV  )rJ   ra   r  )r[   rp   r   s     r>   r]   z)Model._check_id_field.<locals>.<listcomp>  s8     
 
 
4ADUDUADUDUDUrA   r   rJ  zP'id' can only be used as a field name if the field also sets 'primary_key=True'.zmodels.E004rP  )ra   r   ro  r  rJ   r   rY  )r   r   s   ` r>   r8  zModel._check_id_field  s    
 
 
 
y-
 
 
  
	&)/ 
	CIL4E4M4M/$	    IrA   c                    g }i }| j                                         D ]}|j         j        D ]}|                    |j                  p|                    |j                  pd}|rU|                    t          j        d|j        d|j	        j         d|j        d|j	        j         d	| d                     |||j        <   |||j        <   | j                                         D ],}|j         
                                D ]}||vr
|||j        <   -| j         j                                        D ]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.E005rP  z' from model 'zmodels.E006rJ  )ra   r  r   r   rJ   r   r1  r   rY  r   
get_fieldsr   r  )r   r  used_fieldsr   rp   clashrv   id_conflicts           r>   r9  zModel._check_field_name_clashes  s     i//11 	+ 	+F\. + +#//U;??193M3MUQU 
MM  %zzz5;+<+<+<afffagmmmU !$,  	 	 	 '(AF#)*AI&&+& i//11 	, 	,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 ]l}|                                \  }}|r<||v r8|                    t	          j        d|j        d|dd| d                     W|                    |           m|S )NzField 'z' has column name 'z ' that is used by another field.z$Specify a 'db_column' for the field.zmodels.E007rH  )ra   r   get_attname_columnr1  r   rY  rJ   )r   used_column_namesr  rp   r!  column_names         r>   r=  z Model._check_column_name_clashesK  s     ' 	6 	6A1133NA{  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 )Nr!  zgThe model name '%s' cannot start or end with an underscore as it collides with the query lookup syntax.zmodels.E023rP  zbThe model name '%s' cannot contain double underscores as it collides with the query lookup syntax.zmodels.E024)rD   
startswithendswithr1  r   rY  r   )r   r  r   s      r>   r:  z)Model._check_model_name_db_lookup_clashesd  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   Z   K   | ]&}|j         r|j        |                                V  'd S r   )rR  related_modelget_attnamero   s     r>   rh   zLModel._check_property_name_related_field_accessor_clashes.<locals>.<genexpr>  sJ       #
 #
}#
 "#!< MMOO!<!<!<!<#
 #
rA   Freversez8The property '%s' clashes with a related field accessor.zmodels.E025rP  )ra   r  _get_fieldsr1  r   rY  )r   r  r  related_field_accessorsaccessors        r>   r;  z9Model._check_property_name_related_field_accessor_clashes|  s    2#
 #
Y**5*99#
 #
 #

 0 		 		H>))L$&./(	     rA   c                     g }t          d | j        j        D                       dk    r*|                    t	          j        d| d                     |S )Nc              3   (   K   | ]}|j         	d V  dS )r  N)ro  ro   s     r>   rh   z2Model._check_single_primary_key.<locals>.<genexpr>  s)      BBQAMBqBBBBBBrA   r  zBThe model cannot have more than one field with 'primary_key=True'.zmodels.E026rP  )sumra   r   r1  r   rY  r^  s     r>   r<  zModel._check_single_primary_key  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 "index_together" option.z)'index_together' must be a list or tuple.zmodels.E008rP  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   rZ   r   rP  r[   r   s     r>   rh   z.Model._check_index_together.<locals>.<genexpr>  sD       
 
6<
6E4=111
 
 
 
 
 
rA   z6All 'index_together' elements must be lists or tuples.zmodels.E009index_together)
rZ   ra   r  r   rP  r   rY  r   r  _check_local_fieldsr   r  r   s      r>   r>  zModel._check_index_together  s     #)2UDMBB 	?$     
 
@C	@X
 
 
 
 
 	 L$    F)2 Q Qc55f>NOOPPPPMrA   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.E010rP  c              3   P   K   | ]!}t          |t          t          f           V  "d S r   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   rP  r   rY  r   r  r  r  s      r>   r?  zModel._check_unique_together  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   r!  z@The index name '%s' cannot start with an underscore or a number.zmodels.E033rP  z8The index name '%s' cannot be longer than %d characters.zmodels.E034c              3   &   K   | ]}|d          V  dS )r   Nr;   )r[   refs     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.W037rH  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   r!  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>1  s'    WWWuWWg7WWWWrA   r   )r   ra   r   rJ   isdigitr1  r   rY  r   max_name_lengthr  expressionsr   _get_expr_referencesr   rR  r   r  r  rS  r   rM  rT  r  r  r  r  )	r   r1  r  
referencesr   
expressionr   r   r   s	            r>   r@  zModel._check_indexes  s    UU
Y& 	 	E z!}##uz!}'<'<'>'>#L').4(	     5:!666L&).U5J(KL(	     ) "'"3  J%% & &*-*B*B:*N*N& & &      3	 3	B-b#66 $RJ#<-1OOOQQsy?PQQQQQ PNF$12:  (	 	 	   #=.#)2PPPCC1BCCCCC QNK$12B  (	 	 	   #?0CI4RRRPPci>OPPPPP SNE$12:  (	 	 	  
 
"y0
 
 
 	WW	(9WWWW*c--fi@@AAArA   c                 t   ddl m} i }| j                            d          D ]&}|||j        <   t          |d          r
|||j        <   'g }|D ]}	 ||         }t          |j        |j	                  r5|
                    t          j        d|d|d|d	| d
                     Z|| j        j        vr?|
                    t          j        d|d|d| j        j        d	d| d                     # t          $ r4 |
                    t          j        d|d|d	| d                     Y w xY w|S )Nr   )modelsFrz  r   rW  z' refers to a ManyToManyField 'z.', but ManyToManyFields are not permitted in 'rl   zmodels.E013rP  z' refers to field 'z' which is not local to model 'z4This issue may be caused by multi-table inheritance.zmodels.E016rH  z#' refers to the nonexistent field 'zmodels.E012)	django.dbr  ra   r|  rJ   rS   r   rZ   r   ManyToManyRelr1  r   rY  r   r)  r  )r   r   optionr  forward_fields_mapr   r  r_  s           r>   r  zModel._check_local_fields6  s   $$$$$$  Y**5*99 	: 	:E-2uz*ui(( :49"5=1  '	 '	J&*:6 e0&2FGG MM !' *

 & !$,
 
 
    #)"888MM'-vvzzz39;P;P;PR!W #,    9    LL #FF&JJ
  (  
 
 
 
 
J s   C77;D54D5c           
         | j         j        rt          j        d| d          gS | j         j        s| j         j        sg S t          | j         j        t          t          f          st          j        d| d          gS g }| j         j        }d |D             }d |D             }g }g }|D ]6}t          |v r|
                    |           !|
                    |           7|}|D ]}| }d}|                    t                    D ]}		 |	d	k    r|j         j        }n|j                             |	          }|j        r|j        d
         j        j        }nd}R# t$          t&          f$ r\ |*|                    |	          B|                    |	          -|
                    t          j        d|z  | d                     Y w xY wd |D             }g }
| j         }t-          t/          j        d t/          |j        |j                  D                                 }|
                    ||z
             |
D ]/}|
                    t          j        d|z  | d                     0|S )ze
        Check "ordering" option -- is it a list of strings and do all fields
        exist?
        z?'ordering' and 'order_with_respect_to' cannot be used together.zmodels.E021rP  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   r  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 rJ  r;   ro   s     r>   rq   z(Model._check_ordering.<locals>.<setcomp>  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   rY  r   rj   rZ   rP  r   r   r1  r\  r  r  rR  
path_infosto_optsr   r
   AttributeErrorget_transform
get_lookupr   r   from_iterabler   rU  r  )r   r  r   _fieldsrelated_fieldsrp   r   _clsfldpartinvalid_fieldsr   valid_fieldsinvalid_fields                 r>   rA  zModel._check_orderingm  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                 2   |sg S g }d}d}|D ]^}t          j        ||           st          |         }|j                                        }||j        j        rM||}|}T||k     r|}|}_||S | j        j        D ]j}|	                                \  }	}
|j
        J|
Ht          |
          |k    r5|                    t          j        d|
d|d|dd| d                     k| j        j        D ]}t!          |j        j        t&                    r"|j        j        j        j        D ]j}|	                                \  }	}|j
        J|Ht          |          |k    r5|                    t          j        d	|d|d|dd
| d                     k|S )z
        Check that any auto-generated column names are shorter than the limits
        for each database in which the model will be created.
        Nz.Autogenerated column name too long for field "z". Maximum length is "z" for database "z".z/Set the column name manually using 'db_column'.zmodels.E018rH  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   rR  r   opsr  r  truncates_namesra   r   rp  	db_columnr   r1  r   rY  r   rZ   r   rf  r  )r   r1  r  allowed_lendb_aliasr   r   r  rp   r!  rr  m2mrel_names                r>   r7  zModel._check_long_column_names  s-     	I  	" 	"B-b#66 $RJ(n<<>>O&**=*M&&"1K!HH${22"1K!HM' 	 	A1133NA{
 #+$${22LL ';;XXX? O(  	 	 	 - 	 	A!.0#66  ~-3@  !44668M) ,H33MM  (xxhhh@!R !$,
 
 
  * 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        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d	|j        z  d| d
                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     |j        j        sdd| j        j        v sVt          d | j        j        D                       r3|	                    t          j        d|j        z  d| d                     t%          t'          j        d | j        j        D                                 }t%                      }| j        j        D ]}t+          |t,                    r|j        j        sd| j        j        vrGt+          |j        t0                    r-|                    |                     |j                             |j        j        sd| j        j        vr9|j        r2|j        D ]*}|                    |                     |                     +t+          |t:                    r|j        j        sd| j        j        vrt+          |j        t0                    r-|                    |                     |j                             t          d |j                                        D                       r4|	                    t          j        d|j         dd| d                      |D ]^}	}
|	d!k    r|!                    |	           |
s#	 |	d!k    r| j        j"        }n| j        #                    |	          }|j$        r|j%        s|j&        rgn# tN          $ r Y tw xY w|
d"         }tQ          |d#          r}tQ          |d$          rm|)                    |          X|*                    |          C|	                    t          j+        d%tY          j-        |	g|
z             z  | d&'                     |.                    | /                    |d(                     |S ))N supports_table_check_constraintsc              3   @   K   | ]}t          |t                    V  d S r   )rZ   r   r[   r  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>G	  s@         :77     rA   z&%s does not support check constraints.zOA constraint won't be created. Silence this warning if you don't care about it.zmodels.W027rH  r  c              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rZ   r   r  r  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>Z	  sS          :'788 5(4     rA   z7%s does not support unique constraints with conditions.zmodels.W036&supports_deferrable_unique_constraintsc              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rZ   r   
deferrabler  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>o	  sS          :'788 6)5     rA   z2%s does not support deferrable unique constraints.zmodels.W038r  c              3   N   K   | ] }t          |t                    o|j        V  !d S r   )rZ   r   r  r  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>	  sI         :'788OZ=O     rA   z<%s does not support unique constraints with non-key columns.zmodels.W039r  c              3   N   K   | ] }t          |t                    o|j        V  !d S r   )rZ   r   r  r  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>	  sN          :'788 43     rA   z6%s does not support unique constraints on expressions.zmodels.W044*supports_nulls_distinct_unique_constraintsc              3   R   K   | ]"}t          |t                    o|j        d uV  #d S r   )rZ   r   nulls_distinctr  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>	  sS          :'788 :-T9     rA   z;%s does not support unique constraints with nulls distinct.zmodels.W047c              3   b   K   | ]*}t          |t                    g |j        |j        R V  +d S r   )rZ   r   r   r  r  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>	  sZ       $ $"!*.>??$=j'=**<==$ $ $ $ $ $rA   c              3   @   K   | ]}t          |t                    V  d S r   )rZ   r!   )r[   r  s     r>   rh   z+Model._check_constraints.<locals>.<genexpr>	  s@         $ 'tV44     rA   zCheck constraint zS contains RawSQL() expression and won't be validated during the model full_clean().z0Silence this warning if you don't care about it.zmodels.W045r  r   r  r  z.'constraints' refers to the joined field '%s'.zmodels.E041rP  r  )0r   rR  r   r  r  ra   rS  r   r  r1  r   rM  rT  r  r  r  r  r  r   r   r  rZ   r   r  r*   r   r  r  r  r   r   flattenrJ   r   r  r  rR  many_to_manyone_to_manyr
   rS   r  r  rY  r   r   r  r  )r   r1  r  r   r   r   r  r  r  r_  lookupsr   first_lookups                r>   rB  zModel._check_constraints=	  s    R	J R	JB-b#66 $RJ#D59WWW  "%)"7     X
 N@$12B  (	 	 	   #<-1OOO   #&)"7     P N&(2(?@B  (	 	 	   #J;912 2   #&)"7    2 NL$12B  (	 	 	   #=.#)2PPP  "%)"7     Q
 N#%/%<=B  (	 	 	   #?0CI4RRR   #&)"7     S N')3)@AB  (	 	 	   #N Ay56 6    #&)"7    6 N*,6,CDB  (	 	 	   # $ $&)i&;$ $ $   F J!i3 + +
j*:;; *"+D5"y=> >$Z%91==> #))44Z5IJJ   #+GT8"y=> >$9> +5*@ T TJ&--c.F.Fz.R.RSSSS
O<< "+L="y=> > &j&6:: &-- # 8 89I J J     (2(8(@(@(B(B      #MM &%F
 %F %F %F). ),'4
!" 
!" 
!"   )3  $
W%%JJz*** !T)) #	 #	 3 3J ? ? , !0B !eFW ! !(   H  'qzE?33|44 ++L99A((66>MML(ozlW.DEEF #,	     MM#11&-HHIIIIs   )AT--
T:9T:r   )NN)FFNN)FFFNN)FNFFNNr  )NTT)HrD   rE   rF   r  classmethodr  r?   rC   r!  r$  r-  r&  r<  r>  rA  r   r  rE  r[  r]  r`  rb  alters_dataru  ry  rp  r  r  r  r  rj  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r#  r(  r+  r*  r   rC  rD  r2  r3  r4  r5  r6  r8  r9  r=  r:  r;  r<  r>  r?  r@  r  rA  r7  r  rB  r^   r   s   @r>   r   r     s       p2 p2 p2 p2 p2d 
 
 [
< < <E E E! ! !  
1 1 1  "$ $ $,. . . .; ; ; 
+{	+	+B
 
 
F/ F/ F/ F/PU U U U, , ,$ QU<
 <
 <
 <
| D QU
 
 
 
 E  [* D D D DL !I HL- - - -b _ _ _ _B, , ,8
 
 
4 4 4 4l	" 	" 	" 	" F
 
 
 
 G
 
 
  *( ( (.   $M M M  * * * * =* =* =* =*~/ / /b  >
 
 
"  @  * * * *(-* -* -* -*^* * * *8 # # [#J   [>   [,   [4 
 
 [
   [   [ ! ! [!F   [$ C C [CJ   [0   [.   [(   [   [8   [: X X [Xt 4 4 [4l j j [jX P P [Pd > > [> U U [U U U U U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   rN  rO  bulk_update	enumerate)r=   r  id_listrV  	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   rO  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   rx  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   rX  r|   )model_idr   s     r>   r*  r*  ?
  s;    (E"" ) ==rA   Tr   )^rx   rQ   r8  	functoolsr   	itertoolsr   asgiref.syncr   r'  django.appsr   django.confr   django.corer   django.core.exceptionsr	   r
   r   r   r   r   r  r   r   r   r   r   r   django.db.modelsr   r   r   r   r   django.db.models.constantsr   django.db.models.constraintsr   r   django.db.models.deletionr   r   django.db.models.expressionsr    r!   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.utilsr0   r1   django.utils.encodingr2   django.utils.hashabler3   django.utils.textr4   r5   django.utils.translationr6   r!  r8   r   rN   rU   rI   rW   r   r   r   r  r  r   r*  __safe_for_unpickle__r;   rA   r>   <module>r     s`      # # # # # #       & & & & & &                                                        W V V V V V V V V V V V V V 1 1 1 1 1 1 J J J J J J J J 8 8 8 8 8 8 8 8 @ @ @ @ @ @ @ @            0 / / / / / , , , , , , , , , , , , ' ' ' ' ' ' ' '              @ ? ? ? ? ? ? ? + + + + + + / / / / / / 5 5 5 5 5 5 5 5 6 6 6 6 6 6" " " " " " " " 8::  $P P P
X) X) X) X) X) X) X) X)v
       	5 	5 	5 	5 	5 	5 	5 	5H! H! H! H! H!J) H! H! H! H!dB   U U U
 
 
$      (, $ $ $rA   