
    `fd                        d dl Z d dlmZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZmZmZmZ d d	lmZmZmZmZmZ d d
lmZmZmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 dZ3dZ4dZ5dZ6dZ7e3e4e6eeefZ8 G d dej9                  Z: G d d          Z;dS )    N)datetime	timedelta)forms)settings)messages)FieldListFilter)DisallowedModelAdminLookupDisallowedModelAdminToField)IS_FACETS_VARIS_POPUP_VARTO_FIELD_VARIncorrectLookupParameters
ShowFacets)%build_q_object_from_lookup_parametersget_fields_from_pathlookup_spawns_duplicatesprepare_lookup_valuequote)FieldDoesNotExistImproperlyConfiguredSuspiciousOperation)InvalidPage)FFieldManyToOneRelOrderBy)
Combinable)reverse)RemovedInDjango60Warning)	urlencode)func_supports_parameter)
make_aware)gettextallopqec                        e Zd Z fdZ xZS )ChangeListSearchFormc                 ~     t                      j        |i | t          t          j        dd          i| _        d S )NF)requiredstrip)super__init__
SEARCH_VARr   	CharFieldfields)selfargskwargs	__class__s      Q/var/www/html/env/lib/python3.11/site-packages/django/contrib/admin/views/main.pyr/   zChangeListSearchForm.__init__;   sB    $)&))) eDDD
    )__name__
__module____qualname__r/   __classcell__)r6   s   @r7   r*   r*   :   s8        
 
 
 
 
 
 
 
 
r8   r*   c                   r    e Zd ZeZd Zd ZddZd ZddZ	d Z
d Zd	 Zd
 Zd Zd ZddZd Zd Zd ZdS )
ChangeListc                    || _         |j        | _        | j        | _        |                    |          | _        || _        || _        || _        d | _	        d | _
        d | _        || _        || _        || _        |	| _        |
| _        || _        |                    |          | _        || _        || _        |                     |j                  }|                                sD|j                                        D ]*}t7          j        |d                    |                     +|j                            t@                    pd| _!        	 tE          |j                            tF          d                    | _$        n# tJ          $ r
 d| _$        Y nw xY wtL          |j        v | _'        tP          |j        v | _)        |j*        tV          j,        u p |j*        tV          j-        u ot\          |j        v | _/        |j*        tV          j-        u | _0        |j                            tb                    }|r(|2                    ||          stg          d|z            || _4        tk          |j        6                                          | _7        tk          |j        8                                          | _9        tF          | j7        v r| j7        tF          = | j9        tF          = tt          | j7        v r| j7        tt          = | j9        tt          = | ;                    t\          g          | _<        | ;                    t\          di          | _=        | j)        rd| _>        n|| _>        |                     |          | _?        | @                    |           | j)        rt          d          }n9| j        B                    |          rt          d	          }nt          d
          }|| j        jC        z  | _D        | j        jE        jF        | _G        d S )Nz,     z"The field %s cannot be referenced.)removeT z	Select %szSelect %s to changezSelect %s to view)Hmodel_metaoptslookup_optsget_querysetroot_querysetlist_displaylist_display_linkslist_filterhas_filtershas_active_filtersclear_all_filters_qsdate_hierarchysearch_fieldslist_select_relatedlist_per_pagelist_max_show_allmodel_adminget_preserved_filterspreserved_filterssortable_bysearch_help_textsearch_form_classGETis_validerrorsvaluesr   errorjoincleaned_datagetr0   queryintPAGE_VARpage_num
ValueErrorALL_VARshow_allr   is_popupshow_facetsr   ALWAYSALLOWr   
add_facetsis_facets_optionalr   to_field_allowedr
   to_fielddictitemsparamslistsfilter_params
ERROR_FLAGget_query_stringremove_facet_linkadd_facet_linklist_editablequerysetget_resultsr#   has_change_permissionverbose_nametitlepkattname
pk_attname)r3   requestrD   rJ   rK   rL   rP   rQ   rR   rS   rT   r{   rU   rX   rY   _search_formr_   rq   r   s                      r7   r/   zChangeList.__init__F   s   " 
K	9(55g>>("4&"&$(!,*#6 *!2&!,!B!B7!K!K& 0 --gk::$$&& 	:%,3355 : :w		%(8(89999!.22:>>D"
	! < <==DMM 	 	 	DMMM	7;.$3%1Z5FF 
#z'77XMW[<X 	 #."9Z=M"M;??<00 	K88(KK 	-4x?   !7;,,..//!'+"3"3"5"566t{""H%"8,$$J'":.!%!6!6}o!6!N!N"33]D4IJJ= 	/!#D!.D))'22!!!= 	1K((EE33G<< 	1122EE/00ETY33
*-5s   2F FFc                 `    d| j         j        d| j        j        d| j        j         j        dS )N<z: model=z model_admin=>)r6   r;   rD   rU   )r3   s    r7   __repr__zChangeList.__repr__   s<     N'''J###&333
 	
r8   Nc                 b    |p| j         }|                                }t          D ]	}||v r||= 
|S )z:
        Return all params except IGNORED_PARAMS.
        )rv   copyIGNORED_PARAMS)r3   rt   lookup_paramsignoreds       r7   get_filters_paramszChangeList.get_filters_params   sI     -4- & 	+ 	+G-''!'*r8   c           	         |                                  }d}d}t          | j        j        d          }|s-t	          j        d| j        j        j         dt                     |	                                D ]7\  }}|D ]/}|r|||fn||f}	 | j        j        |	 st          d| d          08g }
| j        D ]$}t          |          }t          |          r |||| j        | j                  }nd }t          |t           t"          f          r|\  }}n|t$          j        }}t          |t(                    s|}t+          | j        |          d         } ||||| j        | j        |          }|t          |          k    r|t-          | j        |          z  }|r>|                                r*|
                    |           |t          |          k    rd	}&| j        r|                    d
| j        z  d           }|e|                    d| j        z  d           }|                    d| j        z  d           }	 t9          t;          |d                   t;          ||d         nd          t;          ||d         nd                    }n"# t<          $ r}t?          |          |d }~ww xY w|r|tA          d          z   }nH|r(|tA          d          z   !                    d          }n|!                    |j"        dz             }tF          j$        rtK          |          }tK          |          }|&                    d| j        z  |gd| j        z  |gi           	 |	                                D ]0\  }}tO          ||          ||<   |t-          | j        |          z  }1|
tQ          |
          |||fS # tR          $ r}t?          |          |d }~ww xY w)NFr   z,`request` must be added to the signature of z.lookup_allowed().zFiltering by z not allowed)
field_pathTz%s__yearz	%s__monthz%s__dayrA   )days    )day)yearz%s__gtez%s__lt)*r   r!   rU   lookup_allowedwarningswarnr6   r;   r   rs   r	   rL   lencallablerD   
isinstancetuplelistr   creater   r   r   rG   
has_outputappendrP   popr   rd   rg   r   r   replacer   r   USE_TZr"   updater   boolr   )r3   r   r   may_have_duplicatesrN   supports_requestkey
value_listvaluert   filter_specsrL   lookup_params_countspecr   fieldfield_list_filter_classr   monthr   	from_dater(   to_dates                          r7   get_filterszChangeList.get_filters   s   //11#"2+Y
 
   	MO#-:O O O(  
  -2244 	X 	XOC# X X2BT#ug..e6t'6? X45VS5V5V5VWWWXX
 + &	. &	.K"%m"4"4$$  "{7M4:tGWXX!
kE4=99 Y5@2E22
 6A/BX2E!%// M!&J0ZHHLE..!J$)   ']););;;'+C(", , '  .)) .##D)))&]););;;)-& 	 !$$Z$2E%EtLLD%))+8K*KTRR#''	D4G(GNN> (DH):E"IIBBsCGGA>>! !II
 " > > >3A66A=> I')*;*;*;;GG I  )9"+=+=+==FF1FMMGG'//Y^a5G/HHG? 2 *9 5 5I(11G$$!D$77) 4#66	  	6+1133 W W
U%9#u%E%Ec"#'?@PRU'V'VV##\""#"  ! 	6 	6 	6+A..A5	6s2   AJ 
J5 J00J5,AO 
O$OO$c                 Z   |i }|g }| j                                         }|D ],}t          |          D ]}|                    |          r||= -|                                D ]\  }}|||v r||= |||<   dt          t          |                                          d          z  S )Nz?%sT)doseq)rv   r   r   
startswithrs   r    sorted)r3   
new_paramsrB   r&   rkvs          r7   rx   zChangeList.get_query_string!  s    J>F##%% 	 	A!WW  <<?? ! $$&& 	 	DAqy66!!y		!2!2$?????r8   c                 @   | j                             || j        | j                  }|j        }| j         j        r| j                                        }nd }|| j        k    }|| j        k    }| j        r|s|s| j        	                                }n6	 |
                    | j                  j        }n# t          $ r t          w xY w|| _        | j         j        | _        | j         pt!          |          | _        || _        || _        || _        || _        || _        d S N)rU   get_paginatorr|   rS   countshow_full_result_countrI   rT   ri   _clonepagerf   object_listr   r   result_countr   show_admin_actionsfull_result_countresult_listcan_show_all
multi_page	paginator)r3   r   r   r   r   r   r   r   s           r7   r}   zChangeList.get_results3  sN   $22T]D$6
 
	 ! 2 	% $ 2 8 8 : : $#t'==!D$66
 M 	0l 	0: 	0-..00KK0'nnT];;G 0 0 0//0 )&*&6&M# '+&A"A #
TF
 F
 "3&($"s   B2 2Cc                 l    g }| j         j        r| j         j        }n| j        j        r| j        j        }|S r   )rU   orderingrG   )r3   r   s     r7   _get_default_orderingz ChangeList._get_default_ordering[  s@    $ 	1'0HH& 	1'0Hr8   c                    	 | j                             |          }|j        S # t          $ r t	          |          r|}n@t          | j        |          rt          | j        |          }nt          | j        |          }t          |t                    rt          |d          r|j        }t          |dd          cY S w xY w)ai  
        Return the proper model field name corresponding to the given
        field_name to use for ordering. field_name may either be the name of a
        proper model field or the name of a method (on the admin or model) or a
        callable with the 'admin_order_field' attribute. Return None if no
        proper model field name can be matched.
        fgetadmin_order_fieldN)rG   	get_fieldnamer   r   hasattrrU   getattrrD   r   propertyr   )r3   
field_namer   attrs       r7   get_ordering_fieldzChangeList.get_ordering_fieldc  s    	<$..z::E:  	< 	< 	< 
## 7!):66 7t/<<tz:66$)) !gdF.C.C !y4!4d;;;;;	<s    # BB?>B?c                 *   | j         }t          | j                            |          p|                                           }t
          |v rg }|t
                                       d          }|D ]n}	 |                    d          \  }}}	| j        t          |	                   }
| 
                    |
          }|sOt          |t                    rD|dk    r(|                                }|                                 |                    |           nt!          |d          rB|                    |dk    r|                                n|                                           n\|dk    r>|                    |          r)|                    |                    |                     n|                    ||z              X# t*          t,          f$ r Y lw xY w|                    |j        j                   |                     |          S )a  
        Return the list of ordering fields for the change list.
        First check the get_ordering() method in model admin, then check
        the object's default ordering. Then, any manually-specified ordering
        from the query string overrides anything. Finally, a deterministic
        order is guaranteed by calling _get_deterministic_ordering() with the
        constructed ordering.
        .-resolve_expression)rt   r   rU   get_orderingr   	ORDER_VARsplit
rpartitionrJ   rd   r   r   r   r   reverse_orderingr   r   descascr   removeprefix
IndexErrorrg   extendrc   order_by_get_deterministic_ordering)r3   r   r|   rt   r   order_paramsr&   nonepfxidxr   order_fields               r7   r   zChangeList.get_ordering{  s    ))'22Rd6P6P6R6R
 
 H!),22377L!  %&\\#%6%6ND#s!%!23s88!<J"&"9"9*"E"EK& ! !+w77 ;#::*5*:*:*<*<K'88::: 4444 .BCC 	; 25**K,,...+//BSBS    (>(>s(C(C (@(@(E(EFFFF k(9:::"J/   H 	/000//999s   5A
G	 DG		GGc                 f    t          |          }t                      }dhd  j        j        D             z  }|D ]}d}t	          |t
                    r|                    d          }nXt	          |t                    r|j        }n;t	          |t                    r&t	          |j
        t                    r|j
        j        }|rd	  j                            |          }n# t          $ r Y w xY w|j        r||j        k    r|j        |v r n|                    |j                   g  j        j        d  j        j        D             R }|D ]K} fd|D             }	t%          d |	D                       r*|                    d |	D                       r nL|                    d	           |S )
a  
        Ensure a deterministic order across all database backends. Search for a
        single field or unique together set of fields providing a total
        ordering. If these are missing, augment the ordering with a descendant
        primary key.
        r   c                 8    h | ]}|j         	|j        |j        S rC   )uniquenullr   .0r   s     r7   	<setcomp>z9ChangeList._get_deterministic_ordering.<locals>.<setcomp>  s>     *
 *
 *
|*
 %*J*
M*
 *
 *
r8   Nr   c              3   $   K   | ]}|j         V  d S r   )r2   )r   
constraints     r7   	<genexpr>z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s9        " %     r8   c                 D    g | ]}j                             |          S rC   )rG   r   )r   r   r3   s     r7   
<listcomp>z:ChangeList._get_deterministic_ordering.<locals>.<listcomp>  s7       ?ID$..z::  r8   c              3   $   K   | ]}|j         V  d S r   )r   r   s     r7   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s$      66euz666666r8   c              3   $   K   | ]}|j         V  d S r   )r   r   s     r7   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s$      -P-Pem-P-P-P-P-P-Pr8   z-pk)r   setrG   r2   r   strlstripr   r   r   
expressionr   r   remote_fieldr   addunique_togethertotal_unique_constraintsany
issupersetr   )
r3   r   ordering_fieldstotal_ordering_fieldspartr   r   constraint_field_namesfield_namesr2   s
   `         r7   r   z&ChangeList._get_deterministic_ordering  sA    >>%%!% *
 *
)0*
 *
 *
 !

  0	' 0	'DJ$$$ 2![[--

D!$$ 2!Y

D'** 2z$/1/M/M 2!_1
 3 ,66zBBEE(    H % *
*B*B=$999E##EM222&!1& &*&6&O  & &"  6 ' '   MX  
 66v66666 "---P-P-P-P-PPP E
 &&&s   C  
C-,C-c                    |                                  }i }t          | j        vr|D ]}t          |t          t
          f          r\t          |t
                    s|                                }t          |j        t                    r|j	        rdnd}|j        j
        }n0z|                    d          r|                    d          }d}nd}t          | j                  D ]%\  }}|                     |          |k    r|||<    n&no| j        t                                       d          D ]I}|                    d          \  }}	}
	 t%          |
          }
n# t&          $ r Y 8w xY w|	dk    rdnd||
<   J|S )zT
        Return a dictionary of ordering field column numbers and asc/desc.
        r   r   r   r   )r   r   rt   r   r   r   r   r   r   
descendingr   r   r   	enumeraterJ   r   r   r   rd   rg   )r3   r   r  r   
order_typeindexr   r&   r   r   r   s              r7   get_ordering_field_columnsz%ChangeList.get_ordering_field_columns  s    --//DK'' "  ej'%:;; '%eW55 , %		!%"2A66 !/4/?%JVVU
 % 0 5 %%c** '!..s33E!'JJ!&J#,T->#?#?  KE4..t44==1;. >& [+11#66 G G!"c!2!2c3c((CC!   H14vv$$s   E
E*)E*c                    |                      |          \  | _        | _        }}| _        | j        }| j        D ]6}||                                |k    r|                    ||          }||}7	 t          |          }|                    |          }n2# t          t          f$ r  t          $ r}	t          |	          d }	~	ww xY w|j        j        s|                     |          }|                     ||          }
 |j        |
 }| j                            ||| j                  \  }}|                     ||                                           | _        ||z  r|                                S |S )N)r   rB   )r   r   rM   rN   rI   expected_parametersr|   r   filterr   r   	Exceptionr   rc   select_relatedapply_select_relatedr   r   rU   get_search_resultsrx   r   rO   distinct)r3   r   exclude_parametersremaining_lookup_paramsfilters_may_have_duplicatesqsfilter_specnew_qsq_objectr(   r   search_may_have_duplicatess               r7   rH   zChangeList.get_queryset  s    W%%	
#'# , 	  	 K"*22448JJJ$--gr::%B	/ ==TUUH8$$BB#%9: 	 	 	  	/ 	/ 	/ ,A...	/ x& 	/**2..B $$Wb11R[(# *.)9)L)LJ*
 *
&& %)$9$9.**,, %: %
 %
!
 ')CC 	;;== Is   1$B C1C  Cc                     | j         du r|                                S | j         du r(|                                 r|                                S | j         r |j        | j          S |S NTF)rR   r  !has_related_field_in_list_display)r3   r  s     r7   r  zChangeList.apply_select_relatedR  sz    #t++$$&&&#u,,5577 +((***# 	@$2$d&>??	r8   c                     | j         D ]b}	 | j                            |          }t          |j        t
                    r||                                k    r dS S# t          $ r Y _w xY wdS r#  )rJ   rG   r   r   r  r   get_attnamer   )r3   r   r   s      r7   r$  z,ChangeList.has_related_field_in_list_display^  s    + 		$ 		$J$(22:>> e0,?? $!U%6%6%8%888#tt %    us   A
A('A(c                     t          || j                  }t          d| j        j        d| j        j        dt          |          f| j        j        j	                  S )Nzadmin:__change)r4   current_app)
r   r   r   rF   	app_label
model_namer   rU   
admin_siter   )r3   resultr   s      r7   url_for_resultzChangeList.url_for_resultk  sa    VT_--w$(I$7$7$79M9M9MN))(38
 
 
 	
r8   r   )NN)r9   r:   r;   r*   rZ   r/   r   r   r   rx   r}   r   r   r   r   r  rH   r  r$  r/  rC   r8   r7   r>   r>   C   s       ,S6 S6 S6j
 
 
   p6 p6 p6d@ @ @ @$&# &# &#P  < < <0-: -: -:^? ? ?B& & &P= = = =~
 
 
  
 
 
 
 
r8   r>   )<r   r   r   djangor   django.confr   django.contribr   django.contrib.adminr   django.contrib.admin.exceptionsr	   r
   django.contrib.admin.optionsr   r   r   r   r   django.contrib.admin.utilsr   r   r   r   r   django.core.exceptionsr   r   r   django.core.paginatorr   django.db.modelsr   r   r   r   django.db.models.expressionsr   django.urlsr   django.utils.deprecationr   django.utils.httpr    django.utils.inspectr!   django.utils.timezoner"   django.utils.translationr#   rh   r   re   r0   rw   r   Formr*   r>   rC   r8   r7   <module>rB     s    ( ( ( ( ( ( ( (                   # # # # # # 0 0 0 0 0 0                                          
 . - - - - - < < < < < < < < < < < < 3 3 3 3 3 3       = = = = = = ' ' ' ' ' ' 8 8 8 8 8 8 , , , , , , , , , , , , 	

 
 
 
 
 
5: 
 
 
n
 n
 n
 n
 n
 n
 n
 n
 n
 n
r8   