
    Gwg]                     \   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 d dl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 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Z-dZ.dZ/dZ0dZ1e-e.e0eefZ2 G d dejf                        Z4 G d d      Z5y)    )datetime	timedelta)forms)settings)messages)FieldListFilter)DisallowedModelAdminLookupDisallowedModelAdminToField)IS_POPUP_VARTO_FIELD_VARIncorrectLookupParameters)get_fields_from_pathlookup_spawns_duplicatesprepare_lookup_valuequote)FieldDoesNotExistImproperlyConfiguredSuspiciousOperation)InvalidPage)ExistsFFieldManyToOneRelOrderByOuterRef)
Combinable)reverse)	urlencode)
make_aware)gettextallopqec                        e Zd Z fdZ xZS )ChangeListSearchFormc                 h    t        |   |i | t        t        j                  dd      i| _        y )NF)requiredstrip)super__init__
SEARCH_VARr   	CharFieldfields)selfargskwargs	__class__s      V/var/www/horilla/myenv/lib/python3.12/site-packages/django/contrib/admin/views/main.pyr,   zChangeListSearchForm.__init__.   s0    $)&) eD
    )__name__
__module____qualname__r,   __classcell__)r3   s   @r4   r'   r'   -   s    
 
r5   r'   c                   n    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 Zd Zd Zd Zy)
ChangeListc                    || _         |j                  | _        | j                  | _        |j	                  |      | _        || _        || _        || _        d | _	        d | _
        d | _        || _        || _        || _        |	| _        |
| _        || _        |j%                  |      | _        || _        || _        | j-                  |j.                        }|j1                         sD|j2                  j5                         D ]'  }t7        j8                  |dj;                  |             ) |j<                  j?                  t@              xs d| _!        	 tE        |j.                  j?                  tF        d            | _$        tL        |j.                  v | _'        tP        |j.                  v | _)        |j.                  j?                  tT              }|r |jW                  ||      stY        d|z        || _-        t]        |j.                  j_                               | _0        tF        | j`                  v r| j`                  tF        = tb        | j`                  v r| j`                  tb        = | jR                  rd| _2        n|| _2        | j	                  |      | _3        | ji                  |       | jR                  rtk        d      }n2| j"                  jm                  |      rtk        d      }ntk        d      }|| j                  jn                  z  | _8        | j                  jr                  jt                  | _;        y # tJ        $ r d| _$        Y w xY w)	Nz,     z"The field %s cannot be referenced. z	Select %szSelect %s to changezSelect %s to view)<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getr-   queryintPAGE_VARpage_num
ValueErrorALL_VARshow_allr   is_popupr   to_field_allowedr
   to_fielddictitemsparams
ERROR_FLAGlist_editablequerysetget_resultsr    has_change_permissionverbose_nametitlepkattname
pk_attname)r0   requestr@   rF   rG   rH   rL   rM   rN   rO   rP   rm   rQ   rT   rU   _search_formr[   rh   rr   s                      r4   r,   zChangeList.__init__9   s   " 
KK	99(55g>("4&"&$(!,*#6 *!2&!,!B!B7!K& 0 --gkk:$$&%,,335 :w		%(89:!..22:>D"
	! <=DM  7;;.$3;;??<0K88(K-4x?  !7;;,,./t{{"H%$J'==!#D!.D))'2!==K(E33G<12E/0ETYY333
**--55;  	DM	s   .L2 2MMc                     d| j                   j                  d| j                  j                  d| j                  j                   j                  dS )N<z: model=z model_admin=>)r3   r8   r@   rQ   )r0   s    r4   __repr__zChangeList.__repr__   s;    NN''JJ##&&33
 	
r5   Nc                 l    |xs | j                   }|j                         }t        D ]
  }||v s||=  |S )z:
        Return all params except IGNORED_PARAMS.
        )rk   copyIGNORED_PARAMS)r0   rk   lookup_paramsignoreds       r4   get_filters_paramszChangeList.get_filters_params   sF     &4;; & 	+G-'!'*	+ r5   c           	         | j                         }d}d}|j                         D ]/  \  }}| j                  j                  ||      r#t	        d|z         g }| 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        |      kD  r|t!        | j"                  |      z  }|
s|
j%                         s|j'                  |
       |	t        |      kD  sd} | j(                  r9|j+                  d| j(                  z  d       }||j+                  d| j(                  z  d       }|j+                  d| j(                  z  d       }	 t-        t/        |      t/        ||nd	      t/        ||nd	            }|r|t5        d	
      z   }nA|r |t5        d
      z   j7                  d	      }n|j7                  |j8                  d	z         }t:        j<                  rt?        |      }t?        |      }|jA                  d| j(                  z  |d| j(                  z  |i       	 |j                         D ]-  \  }}tC        ||      ||<   |t!        | j"                  |      z  }/ |tE        |      |||fS # t0        $ r}t3        |      |d }~ww xY w# tF        $ r}t3        |      |d }~ww xY w)NFzFiltering by %s not allowed)
field_pathTz%s__yearz	%s__monthz%s__dayr>   )days    )day)yearz%s__gtez%s__lt)$r   rj   rQ   lookup_allowedr	   rH   lencallabler@   
isinstancetuplelistr   creater   r   r   rC   
has_outputappendrL   popr   r`   rc   r   r   replacer   r   USE_TZr   updater   boolr   )r0   rv   r   may_have_duplicatesrJ   keyvaluefilter_specsrH   lookup_params_countspecr   fieldfield_list_filter_classr   monthr   	from_dater%   to_dates                       r4   get_filterszChangeList.get_filters   sn   //1#"'--/ 	VJC##223>01NQT1TUU	V ++ &	.K"%m"4$"7M4::tGWGWX!
kE4=95@2E2
 6A/BXBX2E!%/!&J0ZHLE.!JJ$$) ']);;'+C((", ' )##D)&]);;)-&M&	.P  !$$Z$2E2E%EtLD%))+8K8K*KTR#''	D4G4G(GN> (D	U%6EA>3?C:!I ')*;;G  )9"+==FF1FMG'//Y^^a5G/HG?? *9 5I(1G$$!D$7$77 4#6#66	6+113 W
U%9#u%Ec"#'?@P@PRU'VV#W \"#" = " >3A6A=>J ! 	6+A.A5	6s1   +0L AL1 	L.L))L.1	M:MMc                 8   |i }|g }| j                   j                         }|D ]'  }t        |      D ]  }|j                  |      s||=  ) |j	                         D ]  \  }}|	||v s||= |||<    dt        t        |j	                                     z  S )Nz?%s)rk   r}   r   
startswithrj   r   sorted)r0   
new_paramsremover#   rkvs          r4   get_query_stringzChangeList.get_query_string   s    J>FKK 	A!W <<?!	 $$& 	DAqy6!!	 y	!2333r5   c                    | j                   j                  || j                  | j                        }|j                  }| j                   j
                  r| j                  j	                         }nd }|| j                  k  }|| j                  kD  }| j                  r|s|s| j                  j                         }n&	 |j                  | j                        j                  }|| _        | j                   j
                  | _        | j
                   xs t!        |      | _        || _        || _        || _        || _        || _        y # t        $ r t        w xY wN)rQ   get_paginatorrn   rO   countshow_full_result_countrE   rP   re   _clonepagerb   object_listr   r   result_countr   show_admin_actionsfull_result_countresult_listcan_show_all
multi_page	paginator)r0   rv   r   r   r   r   r   r   s           r4   ro   zChangeList.get_results  s<   $$22T]]D$6$6
	 ! 22 $ 2 2 8 8 : $#t'='==!D$6$66
 MMl:--..0K0'nnT]];GG )&*&6&6&M&M# '+&A&A"A #
TF
 "3&($"  0//0s   ;%E Ec                     g }| j                   j                  r| j                   j                  }|S | j                  j                  r| j                  j                  }|S r   )rQ   orderingrC   )r0   r   s     r4   _get_default_orderingz ChangeList._get_default_ordering7  sU    $$''00H  &&''00Hr5   c                 |   	 | j                   j                  |      }|j                  S # t        $ r t	        |      r|}nCt        | 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)rC   	get_fieldnamer   r   hasattrrQ   getattrr@   r   propertyr   )r0   
field_namer   attrs       r4   get_ordering_fieldzChangeList.get_ordering_field?  s    	<$$..z:E::  	< 
#!)):6t//<tzz:6$)gdF.Cyy4!4d;;	<s   &) BB;:B;c                    | j                   }t        | j                  j                  |      xs | j	                               }t
        |v r,g }|t
           j                  d      }|D ]  }	 |j                  d      \  }}}	| j                  t        |	         }
| j                  |
      }|sFt        |t              r7|dk(  r |j                         }|j                          |j                  |       nt!        |d      r5|j                  |dk(  r|j#                         n|j%                                n?|j'                  d      r|dk(  r|j                  |dd        n|j                  ||z           |j-                  |j.                  j0                         | j3                  |      S # t(        t*        f$ r Y Xw xY w)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_expressionr>   N)rk   r   rQ   get_orderingr   	ORDER_VARsplit
rpartitionrF   r`   r   r   r   r}   reverse_orderingr   r   descascr   
IndexErrorrc   extendr_   order_by_get_deterministic_ordering)r0   rv   rn   rk   r   order_paramsr#   nonepfxidxr   order_fields               r4   r   zChangeList.get_orderingW  s    ))'2Rd6P6P6R
 H!),2237L! %&\\#%6ND#s!%!2!23s8!<J"&"9"9*"EK& !+w7#:*5*:*:*<K'88: 4 .BC 25*K,,.+//BS %//4 AB8 k(9:+4 	//0//99 #J/ s   -A F..CF..G Gc                    t        |      }t               }dh| j                  j                  D ch c]&  }|j                  r|j
                  s|j                  ( c}z  }|D ]  }d}t        |t              r|j                  d      }n]t        |t              r|j                  }n@t        |t              r0t        |j                  t              r|j                  j                  }|s	 | j                  j                  |      }|j                   r||j                  k(  r|j                  |v r |S |j#                  |j                          g | j                  j$                  d | j                  j&                  D        }|D ]X  }|D cg c]  }| j                  j                  |       }	}t)        d |	D              r>|j+                  d |	D              sW |S  |j-                  d       |S c c}w # t        $ r Y w xY wc c}w )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.
        rs   Nr   c              3   4   K   | ]  }|j                     y wr   )r/   ).0
constraints     r4   	<genexpr>z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s      " %%   c              3   4   K   | ]  }|j                     y wr   )nullr   r   s     r4   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     6euzz6r   c              3   4   K   | ]  }|j                     y wr   )rt   r   s     r4   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s     -Pemm-Pr   z-pk)r   setrC   r/   uniquer   rt   r   strlstripr   r   r   
expressionr   r   remote_fieldaddunique_togethertotal_unique_constraintsany
issupersetr   )
r0   r   ordering_fieldsr   total_ordering_fieldspartr   constraint_field_namesfield_namesr/   s
             r4   r   z&ChangeList._get_deterministic_ordering  s    >%!%))00*
||EJJ MM*
 !

  0	'DJ$$![[-
D!$!YY
D'*z$//1/M!__11
 ,,66zBE %%*

*B==$996 5  ##EMM2/0	'6&!!11&&*&6&6&O&O&"  6 ' NY?ID$$..z: 
 6v66"---P-PP
 ' &m*
$ )  .s   +G5*G:"H
:	HHc                    | j                         }i }t        | j                  vr|D ]  }t        |t        t
        f      rbt        |t
              s|j                         }t        |j                  t              r'|j                  rdnd}|j                  j                  }n{|j                  d      r|dd }d}nd}t        | j                        D ]   \  }}| j                  |      |k(  s|||<      |S | j                  t           j                  d      D ]/  }|j!                  d      \  }}	}
	 t#        |
      }
|	dk(  rdnd||
<   1 |S # t$        $ r Y ?w xY w)zT
        Return a dictionary of ordering field column numbers and asc/desc.
        r   r   r   r>   Nr   )r   r   rk   r   r   r   r   r   r   
descendingr   r   	enumeraterF   r   r   r   r`   rc   )r0   r   r   r   
order_typeindexr   r#   r   r   r   s              r4   get_ordering_field_columnsz%ChangeList.get_ordering_field_columns  sm    --/DKK' " ej'%:;%eW5 %		!%"2"2A6/4/?/?VU
 % 0 0 5 5 %%c*!!"IE!'J!&J#,T->->#? KE4..t4=1;.4  [[+11#6 G!"c!2c3c(C 25v$G  " s   4E	EEc                    | j                  |      \  | _        | _        }}| _        | j                  }| j                  D ]  }|j                  ||      }||} 	  |j                  di |}| j                  j                  ||| j                        \  }}| j                  || j                               | _        ||z  r?|j                  t#        d            }| j                  j                  t%        |            }| j'                  ||      }	 |j(                  |	 }|j                  j*                  s| j-                  |      }|S # t        t        f$ r  t        $ r}t        |      d }~ww xY w)N)r   r   rs   )rs   r?   )r   r   rI   rJ   rE   rn   filterr   r   	Exceptionr   rQ   get_search_resultsr_   r   r   rK   r   r   r   r   select_relatedapply_select_related)
r0   rv   remaining_lookup_paramsfilters_may_have_duplicatesqsfilter_specnew_qsr%   search_may_have_duplicatesr   s
             r4   rD   zChangeList.get_queryset  s    W%	
#'# ,, 	K ))'26F!	
	/ 545B *.)9)9)L)LJJ*
&& %)$9$9.**, %: %
!
 ')CChtn-B##**6":6B $$Wb1R[[(#xx&&**2.B	I $%9: 	  	/ ,A..	/s   E E4$E//E4c                     | j                   du r|j                         S | j                   du r | j                         r|j                         S | j                   r |j                  | j                    S |S NTF)rN   r  !has_related_field_in_list_display)r0   r  s     r4   r  zChangeList.apply_select_related*  so    ##t+$$&&##u,557((**##$2$$d&>&>??	r5   c                     | j                   D ]N  }	 | j                  j                  |      }t        |j                  t
              s:||j                         k7  sN y y# t        $ r Y ]w xY wr
  )rF   rC   r   r   r   r   get_attnamer   )r0   r   r   s      r4   r  z,ChangeList.has_related_field_in_list_display6  sq    ++ 		$J$((22:> e00,?!U%6%6%88#		$  % s   A	A+*A+c                     t        || j                        }t        d| j                  j                  d| j                  j
                  dt        |      f| j                  j                  j                        S )Nzadmin:__change)r1   current_app)
r   ru   r   rB   	app_label
model_namer   rQ   
admin_siter   )r0   resultrs   s      r4   url_for_resultzChangeList.url_for_resultC  sY    VT__-$(II$7$79M9MN)((3388
 	
r5   r   )NN)r6   r7   r8   r'   rV   r,   r{   r   r   r   ro   r   r   r   r   r   rD   r  r  r  r?   r5   r4   r;   r;   6   s\    ,J6X
e6N4$##J<0-:^?B&P9v

r5   r;   N)6r   r   djangor   django.confr   django.contribr   django.contrib.adminr   django.contrib.admin.exceptionsr	   r
   django.contrib.admin.optionsr   r   r   django.contrib.admin.utilsr   r   r   r   django.core.exceptionsr   r   r   django.core.paginatorr   django.db.modelsr   r   r   r   r   r   django.db.models.expressionsr   django.urlsr   django.utils.httpr   django.utils.timezoner   django.utils.translationr    rd   r   ra   r-   rl   r~   Formr'   r;   r?   r5   r4   <module>r'     s    (    # 0 
  
 . N N 3  ' , , 	

9j,M
5:: 
S
 S
r5   