o
    ˷eG                     @   sj  d dl 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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mZ d dlmZ d dlmZ  dZ!G dd dej"Z#e$ddidd Z%G dd dZ&G dd dZ'G dd dZ(G dd dZ)G dd dZ*G dd dZ+G d d! d!e&Z,G d"d# d#e'Z-G d$d% d%ej.j/Z0dS )&    N)forms)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_fieldlookup_fieldquote)ObjectDoesNotExist)ForeignObjectRelManyToManyRelOneToOneField)flatatt)capfirstlinebreaksbr)NoReverseMatchreverse)conditional_escapeformat_html)	mark_safe)gettext)gettext_lazy_selected_actionc                   @   s8   e Zd ZejeddZejdddeddidZ	d	S )

ActionFormzAction:)label Fr   classzselect-across)r   requiredinitialwidgetN)
__name__
__module____qualname__r   ChoiceField_actionBooleanFieldHiddenInputselect_across r(   r(   S/var/www/ideatree/venv/lib/python3.10/site-packages/django/contrib/admin/helpers.pyr      s    
r   r   zaction-selectc                 C   s   dS NFr(   )valuer(   r(   r)   <lambda>'   s    r,   c                   @   sf   e Zd Z		dddZdd Zdd Zedd	 Zed
d Zedd Z	edd Z
edd ZdS )	AdminFormNc                    sB    || _ | _ fdd| D | _|| _|d u rd}|| _d S )Nc                    s,   g | ]\}} |  fd d|D dqS )c                    s   g | ]} | qS r(   r(   .0fformr(   r)   
<listcomp>5   s    z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>)fielddependenciesr(   )r/   
field_namer5   r1   r(   r)   r3   4   s    z&AdminForm.__init__.<locals>.<listcomp>r(   )r2   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr2   r7   r9   r;   r:   r(   r1   r)   __init__+   s   

zAdminForm.__init__c                 C   s$   d| j j d| jj j d| jdS )N<z: form=z fieldsets=>)	__class__r!   r2   r7   r<   r(   r(   r)   __repr__=   s   zAdminForm.__repr__c                 c   s6    | j D ]\}}t| j|f| j| jd|V  qd S )N)r;   r:   )r7   Fieldsetr2   r;   r:   r<   nameoptionsr(   r(   r)   __iter__D   s   
zAdminForm.__iter__c                 C      | j jS N)r2   errorsrA   r(   r(   r)   rJ   N      zAdminForm.errorsc                 C   rH   rI   )r2   non_field_errorsrA   r(   r(   r)   rL   R   rK   zAdminForm.non_field_errorsc                 C   rH   rI   )r2   fieldsrA   r(   r(   r)   rM   V   rK   zAdminForm.fieldsc                 C   rH   rI   )r2   is_boundrA   r(   r(   r)   rN   Z   rK   zAdminForm.is_boundc                 C   s    | j j}| D ]}||j }q|S rI   )r2   mediar<   rO   fsr(   r(   r)   rO   ^   s   zAdminForm.mediaNN)r   r    r!   r=   rB   rG   propertyrJ   rL   rM   rN   rO   r(   r(   r(   r)   r-   *   s     





r-   c                   @   s6   e Zd Z						d	ddZedd Zdd ZdS )
rC   Nr(   c                 C   s6   || _ ||| _| _d|| _|| _|| _|| _d S )N )r2   rE   rM   joinclassesdescriptionr:   r;   )r<   r2   rE   r;   rM   rV   rW   r:   r(   r(   r)   r=   g   s   

zFieldset.__init__c                 C   s    d| j v rtjdgdS t S )Ncollapsezadmin/js/collapse.js)js)rV   r   MediarA   r(   r(   r)   rO   x   s   
zFieldset.mediac                 c   s*    | j D ]}t| j|| j| jdV  qd S )Nr:   )rM   	Fieldliner2   r;   r:   )r<   r4   r(   r(   r)   rG   ~   s   

zFieldset.__iter__)Nr(   r(   r(   NN)r   r    r!   r=   rS   rO   rG   r(   r(   r(   r)   rC   f   s    

rC   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	r\   Nc                    sb   | _ t|drt|tr|g _n| _t fdd jD   _| _|d u r,d}| _d S )NrG   c                 3   s,    | ]}| j jv o j j| jjV  qd S rI   )r2   rM   r   	is_hidden)r/   r4   rA   r(   r)   	<genexpr>   s
    
z%Fieldline.__init__.<locals>.<genexpr>r(   )	r2   hasattr
isinstancestrrM   allhas_visible_fieldr:   r;   )r<   r2   r4   r;   r:   r(   rA   r)   r=      s   

zFieldline.__init__c                 c   sV    t | jD ]"\}}|| jv rt| j||dk| jdV  qt| j||dkdV  qd S )Nr   )is_firstr:   )rd   )	enumeraterM   r;   AdminReadonlyFieldr2   r:   
AdminField)r<   ir4   r(   r(   r)   rG      s   

zFieldline.__iter__c                    s$   t d fdd jD dS )N
c                 3   s*    | ]}| j vr j| j V  qd S rI   )r;   r2   rJ   as_ulr.   rA   r(   r)   r^      s    
z#Fieldline.errors.<locals>.<genexpr>)r   rU   rM   striprA   r(   rA   r)   rJ      s   zFieldline.errorsrR   )r   r    r!   r=   rG   rJ   r(   r(   r(   r)   r\      s    
	r\   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )rg   c                 C   s.   || | _ || _t| j j jtj| _d| _d S r*   )r4   rd   r`   r   r   CheckboxInputis_checkboxis_readonly)r<   r2   r4   rd   r(   r(   r)   r=      s   

zAdminField.__init__c                 C   s~   g }t | jj}| jr|d | jjjr|d | js"|d |r+dd|ini }| jjt	||| jr;ddS d dS )NvCheckboxLabelr   inliner   rT   r   )contentsattrslabel_suffix)
r   r4   r   rm   appendr   rd   rU   	label_tagr   )r<   rV   rq   rr   r(   r(   r)   ru      s    



zAdminField.label_tagc                 C   s   t | jj S rI   )r   r4   rJ   rj   rA   r(   r(   r)   rJ      s   zAdminField.errorsN)r   r    r!   r=   ru   rJ   r(   r(   r(   r)   rg      s    rg   c                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )rf   Nc           	      C   s   t |r|jdkr|jnd}n|}|jjr"||jjv r"|jj| }n
t||jj||d}|jjr=||jjv r=|jj| }nt||jj}||jv rQ|j| j	j
}nd}|||||d| _|| _|| _|| _d| _d| _| | _d S )Nr,   r   r1   F)rE   r   	help_textr4   r]   T)callabler   _metalabelsr   model
help_textsr   rM   r   r]   r4   r2   r:   rd   rm   rn   get_empty_value_displayempty_value_display)	r<   r2   r4   rd   r:   
class_namer   rv   r]   r(   r(   r)   r=      s0   
zAdminReadonlyField.__init__c                 C   s6   i }| j s	d|d< | jd }tdt|t|| jjS )Nrp   r   r   z<label{}>{}{}</label>)rd   r4   r   r   r   r2   rs   )r<   rr   r   r(   r(   r)   ru      s   
zAdminReadonlyField.label_tagc                 C   s^   d|j jj|j jjf }zt|t|jg| jjj	d}t
d||W S  ty.   t| Y S w )Nzadmin:%s_%s_change)argscurrent_appz<a href="{}">{}</a>)rz   rx   	app_label
model_namer   r   pkr:   
admin_siterE   r   r   ra   )r<   remote_field
remote_objurl_nameurlr(   r(   r)   get_admin_url   s   
z AdminReadonlyField.get_admin_urlc           
   
   C   sP  ddl m} | jd | jj| j}}}zt|||\}}}W n ttt	fy1   | j
}Y t|S w || jjv rK| j| jj}	t|	ddrK|	||S |d u rpt|ddr]||}t|S t|drh|}t|S t|}t|S t|jtr|d urdtt| }nt|jttfr|d ur| |j|}nt||| j
}t|}t|S )	Nr   )_boolean_iconr4   	read_onlyFboolean__html__z, ),django.contrib.admin.templatetags.admin_listr   r4   r2   instancer:   r   AttributeError
ValueErrorr	   r}   rM   r   getattrrenderr_   r   r`   r   r   rU   mapra   rb   r
   r   r   r   r   )
r<   r   r4   objr:   r0   attrr+   result_reprr   r(   r(   r)   rq     sB   

zAdminReadonlyField.contentsrI   )r   r    r!   r=   ru   r   rq   r(   r(   r(   r)   rf      s
    
&rf   c                   @   sx   e Zd ZdZ							dddZdd Zdd	 Zd
d Zedd Z	dd Z
edd Zedd Zedd ZdS )InlineAdminFormSetzI
    A wrapper around an inline formset for use in the admin system.
    NTc                 C   sp   || _ || _|| _|| _|d u rd}|| _|d u ri }|| _|jr'd|jnd| _|| _|| _	|	| _
|
| _d S )Nr(   rT   r   )optsformsetr7   r:   r;   r9   rV   rU   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r<   rp   r   r7   r9   r;   r:   r   r   r   r   r(   r(   r)   r=   6  s   
zInlineAdminFormSet.__init__c                 c   s    | j r| j}n| jt| j }t| jj| j D ]\}}| j	|}t
| j|| j| j||| j|dV  q| jjD ]}t
| j|| j| jd | j| jdV  q:| jrft
| j| jj| j| jd | j| jdV  d S d S )N)r:   view_on_site_urlr[   )r   r;   r   r7   zipr   initial_formsget_querysetr   get_view_on_site_urlInlineAdminFormr9   extra_formsr   
empty_form)r<   readonly_fields_for_editingr2   originalr   r(   r(   r)   rG   S  sR   


	zInlineAdminFormSet.__iter__c           
      c   s   t | jdd }| jj}|jjpi }|jjpi }tt| jD ]k\}}|r+|j	|kr+q| j
r3|| jv rg|j|}d}|d urC|jj}|||pSt|| jj| j|dd|id||pbt|| jjdV  q|j| }|j}	|	d u r~t|| jj| j|d}	||	|j|j|jdV  qd S )NfkFr1   r]   )rE   r   r   r   rv   )r   r   r   rx   ry   r{   re   r   r7   rE   r   r;   rM   getr   r]   r   r   rz   r   r   r   rv   )
r<   r   r   meta_labelsmeta_help_textsrh   r6   
form_fieldwidget_is_hiddenr   r(   r(   r)   rM   ~  sN   




zInlineAdminFormSet.fieldsc                 C   s@   | j j}td| jj | jjtddt|i tdddS )Nz#%szAdd another %(verbose_name)sverbose_nameRemove)prefixaddText
deleteText)rE   rF   )r   r   jsondumpsr   r   r   r   )r<   r   r(   r(   r)   inline_formset_data  s   
z&InlineAdminFormSet.inline_formset_datac                 C   rH   rI   )r   r   rA   r(   r(   r)   r     rK   zInlineAdminFormSet.formsc                 C   s
   | j  S rI   )r   non_form_errorsrA   r(   r(   r)   r     s   
z"InlineAdminFormSet.non_form_errorsc                 C   rH   rI   )r   rN   rA   r(   r(   r)   rN     rK   zInlineAdminFormSet.is_boundc                 C   rH   rI   )r   total_form_countrA   r(   r(   r)   r     rK   z#InlineAdminFormSet.total_form_countc                 C   s(   | j j| jj }| D ]}||j }q
|S rI   )r   rO   r   rP   r(   r(   r)   rO     s   zInlineAdminFormSet.media)NNNTTTT)r   r    r!   __doc__r=   rG   rM   r   rS   r   r   rN   r   rO   r(   r(   r(   r)   r   1  s,    	
+*


r   c                       sX   e Zd ZdZ			d fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )r   zF
    A wrapper around an inline form for use in the admin system.
    Nc	           	         s>   || _ || _|| _|o|d u| _|| _t ||||| d S rI   )r   r:   r   show_urlabsolute_urlsuperr=   )	r<   r   r2   r7   r9   r   r;   r:   r   r@   r(   r)   r=     s   
zInlineAdminForm.__init__c                 c   s:    | j D ]\}}t| j| j|| jfd| ji|V  qd S )Nr:   )r7   InlineFieldsetr   r2   r;   r:   rD   r(   r(   r)   rG     s   
zInlineAdminForm.__iter__c                 C   s>   | j jjjjp| j jjjjj ptdd | j jjj D S )Nc                 s   s(    | ]}|j jp|j jj jj V  qd S rI   )rx   
auto_fieldrz   r   editable)r/   parentr(   r(   r)   r^     s
    
z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)r2   rx   rz   r   r   r   anyget_parent_listrA   r(   r(   r)   needs_explicit_pk_field  s   z'InlineAdminForm.needs_explicit_pk_fieldc                 C   s   t | j| jjjdS r*   )rg   r2   r   	_pk_fieldrE   rA   r(   r(   r)   pk_field  s   zInlineAdminForm.pk_fieldc                 C   s&   t | jdd }|rt| j|jdS dS )Nr   Fr   )r   r   rg   r2   rE   )r<   r   r(   r(   r)   fk_field  s   zInlineAdminForm.fk_fieldc                 C      ddl m} t| j|dS )Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsr   rg   r2   )r<   r   r(   r(   r)   deletion_field     zInlineAdminForm.deletion_fieldc                 C   r   )Nr   )ORDERING_FIELD_NAMEF)r   r   rg   r2   )r<   r   r(   r(   r)   ordering_field  r   zInlineAdminForm.ordering_field)NNN)r   r    r!   r   r=   rG   r   r   r   r   r   __classcell__r(   r(   r   r)   r     s    r   c                       s$   e Zd Z fddZdd Z  ZS )r   c                    s   || _ t j|i | d S rI   )r   r   r=   )r<   r   r   kwargsr   r(   r)   r=     s   zInlineFieldset.__init__c                 c   sF    t | jdd }| jD ]}|r|j|kr t| j|| j| jdV  qd S )Nr   r[   )r   r   rM   rE   r\   r2   r;   r:   )r<   r   r4   r(   r(   r)   rG     s   
zInlineFieldset.__iter__)r   r    r!   r=   rG   r   r(   r(   r   r)   r     s    r   c                       s    e Zd ZdZ fddZ  ZS )AdminErrorListz9Store errors for the form/formsets in an add/change view.c                    sZ   t    |jr)| |j  |D ]}| |  |jD ]	}| |  qqd S d S rI   )r   r=   rN   extendrJ   valuesr   )r<   r2   inline_formsetsinline_formseterrors_in_inline_formr   r(   r)   r=   (  s   

zAdminErrorList.__init__)r   r    r!   r   r=   r   r(   r(   r   r)   r   %  s    r   )1r   djangor   django.contrib.admin.utilsr   r   r   r   r   r   django.core.exceptionsr	   django.db.models.fields.relatedr
   r   r   django.forms.utilsr   django.template.defaultfiltersr   r   django.urlsr   r   django.utils.htmlr   r   django.utils.safestringr   django.utils.translationr   r   r#   ACTION_CHECKBOX_NAMEFormr   rl   checkboxr-   rC   r\   rg   rf   r   r   r   utils	ErrorListr   r(   r(   r(   r)   <module>   s2     
<#k H