
     h]                     `   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j3                  Z4 G d d          Z5dS )    )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                 ~     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      ^/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/contrib/admin/views/main.pyr,   zChangeListSearchForm.__init__.   sB    $)&))) eDDD
    )__name__
__module____qualname__r,   __classcell__)r3   s   @r4   r'   r'   -   s8        
 
 
 
 
 
 
 
 
r5   r'   c                   p    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dS )
ChangeListc                 b   || _         |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                            tT                    }|r(|+                    ||          stY          d|z            || _-        t]          |j        /                                          | _0        tF          | j0        v r| j0        tF          = tb          | j0        v r| j0        tb          = | j)        rd| _2        n|| _2        |                     |          | _3        | 4                    |           | j)        rtk          d          }n9| j        6                    |          rtk          d          }ntk          d          }|| j        j7        z  | _8        | j        j9        j:        | _;        d S )	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   " 
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;??<00 	K88(KK 	-4x?   !7;,,..//t{""H%$$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=>)r3   r8   r@   rQ   )r0   s    r4   __repr__zChangeList.__repr__   s<     N'''J###&333
 	
r5   Nc                 b    |p| j         }|                                }t          D ]	}||v r||= 
|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   sH     &4; & 	+ 	+G-''!'*r5   c           	      
   |                                  }d}d}|                                D ]2\  }}| j                            ||          st	          d|z            3g }| 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        rr|                    d| j        z  d           }|Q|                    d| j        z  d           }|                    d| j        z  d           }	 t-          t/          |          t/          ||nd	          t/          ||nd	                    }n"# t0          $ r}t3          |          |d }~ww xY w|r|t5          d	
          z   }nH|r(|t5          d
          z                       d	          }n|                    |j        d	z             }t:          j        rt?          |          }t?          |          }|                     d| j        z  |d| j        z  |i           	 |                                D ]0\  }}tC          ||          ||<   |t!          | j        |          z  }1|tE          |          |||fS # 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   s4   //11#"'--// 	V 	VJC#223>> V01NQT1TUUUV + &	. &	.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		U%6EEA>>3?CC::! !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   5A H6 6
I II
AM# #
N-M==Nc                 V   |i }|g }| j                                         }|D ],}t          |          D ]}|                    |          r||= -|                                D ]\  }}|||v r||= |||<   dt          t          |                                                    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K 	 	A!WW  <<?? ! $$&& 	 	DAqy66!!y		!2!23333r5   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)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  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   )rQ   orderingrC   )r0   r   s     r4   _get_default_orderingz ChangeList._get_default_ordering7  s@    $ 	1'0HH& 	1'0Hr5   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)rC   	get_fieldnamer   r   hasattrrQ   getattrr@   r   propertyr   )r0   
field_namer   attrs       r4   get_ordering_fieldzChangeList.get_ordering_field?  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 ]c}	 |                    d          \  }}}	| j        t          |	                   }
| 
                    |
          }|sOt          |t                    rD|dk    r(|                                }|                                 |                    |           nt!          |d          rB|                    |dk    r|                                n|                                           nQ|                    d          r$|dk    r|                    |dd                    n|                    ||z              M# t(          t*          f$ r Y aw 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_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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    %//44 ; ABB8888 k(9:::"J/   H 	/000//999s   5A
F> C<F>>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.
        rs   c                 8    h | ]}|j         	|j        |j        S r?   )uniquenullrt   .0r   s     r4   	<setcomp>z9ChangeList._get_deterministic_ordering.<locals>.<setcomp>  s>     *
 *
 *
|*
 %*J*
M*
 *
 *
r5   Nr   c              3   $   K   | ]}|j         V  d S r   )r/   )r   
constraints     r4   	<genexpr>z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s9        " %     r5   c                 D    g | ]}j                             |          S r?   )rC   r   )r   r   r0   s     r4   
<listcomp>z:ChangeList._get_deterministic_ordering.<locals>.<listcomp>  s7       ?ID$..z::  r5   c              3   $   K   | ]}|j         V  d S r   )r   r   s     r4   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s$      66euz666666r5   c              3   $   K   | ]}|j         V  d S r   )rt   r   s     r4   r   z9ChangeList._get_deterministic_ordering.<locals>.<genexpr>  s$      -P-Pem-P-P-P-P-P-Pr5   z-pk)r   setrC   r/   r   strlstripr   r   r   
expressionr   r   remote_fieldrt   addunique_togethertotal_unique_constraintsany
issupersetr   )
r0   r   ordering_fieldstotal_ordering_fieldspartr   r   constraint_field_namesfield_namesr/   s
   `         r4   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
        }n%z|                    d          r|d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>   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  s    --//DK'' "  ej'%:;; '%eW55 , %		!%"2A66 !/4/?%JVVU
 % 0 5 %%c** '!!""IE!'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 ]}|                    ||          }||}	  |j        di |}n2# t          t          f$ r  t          $ r}t          |          d }~ww xY w| j                            ||| j                  \  }}|                     ||                                           | _        ||z  rJ|                    t#          d                    }| j                            t%          |                    }|                     ||          }	 |j        |	 }|j        j        s|                     |          }|S )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66F!	/ 55455BB#%9: 	 	 	  	/ 	/ 	/ ,A...	/ *.)9)L)LJ*
 *
&& %)$9$9.**,, %: %
 %
!
 ')CC 	7htnn--B#**6"::66B $$Wb11R[(#x& 	/**2..B	s   A% %B BBc                     | j         du r|                                S | j         du r(|                                 r|                                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*  sz    #t++$$&&&#u,,5577 +((***# 	@$2$d&>??	r5   c                     | j         D ]b}	 | j                            |          }t          |j        t
                    r||                                k    r dS S# t          $ r Y _w xY wdS r  )rF   rC   r   r   r   r   get_attnamer   )r0   r   r   s      r4   r  z,ChangeList.has_related_field_in_list_display6  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)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  sa    VT_--w$(I$7$7$79M9M9MN))(3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6 J6 J6X
 
 
   e6 e6 e6N4 4 4 4$## ## ##J  < < <0-: -: -:^? ? ?B& & &P9 9 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 0 0 0 0 0                
                    
 . - - - - - N N N N N N N N N N N N N N N N 3 3 3 3 3 3       ' ' ' ' ' ' , , , , , , , , , , , , 	

9j,M
 
 
 
 
5: 
 
 
S
 S
 S
 S
 S
 S
 S
 S
 S
 S
r5   