3
u^<                 @   sR  d dl Z d dlmZ d dl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 d dl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mZ dZG dd dejZej 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+Z,dS )%    N)forms)settings)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_fieldlookup_field)ObjectDoesNotExist)ManyToManyRel)flatatt)capfirstlinebreaksbr)conditional_escapeformat_html)	mark_safe)gettextgettext_lazyZ_selected_actionc               @   s8   e Zd ZejeddZejdddej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#   @/usr/lib/python3.6/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               @   sB   e Zd ZdddZdd Zedd Zedd	 Zed
d ZdS )	AdminFormNc                sB    | | _ | _ fdd|j D | _|| _|d kr8f }|| _d S )Nc                s,   g | ]$\}} |  fd d|D dqS )c                s   g | ]} | qS r#   r#   ).0f)formr#   r$   
<listcomp>&   s    z1AdminForm.__init__.<locals>.<listcomp>.<listcomp>)fielddependenciesr#   )r(   
field_namer-   )r*   r#   r$   r+   $   s   z&AdminForm.__init__.<locals>.<listcomp>)r*   	fieldsetsitemsprepopulated_fieldsmodel_adminreadonly_fields)selfr*   r/   r1   r3   r2   r#   )r*   r$   __init__"   s    
zAdminForm.__init__c             c   s8   x2| j D ](\}}t| j|f| j| jd|V  qW d S )N)r3   r2   )r/   Fieldsetr*   r3   r2   )r4   nameoptionsr#   r#   r$   __iter__-   s    zAdminForm.__iter__c             C   s   | j jS )N)r*   errors)r4   r#   r#   r$   r:   6   s    zAdminForm.errorsc             C   s   | j jS )N)r*   non_field_errors)r4   r#   r#   r$   r;   :   s    zAdminForm.non_field_errorsc             C   s$   | j j}x| D ]}||j }qW |S )N)r*   media)r4   r<   fsr#   r#   r$   r<   >   s    
zAdminForm.media)NN)	r   r   r   r5   r9   propertyr:   r;   r<   r#   r#   r#   r$   r'   !   s
   
	r'   c               @   s6   e Zd Zdf f f ddfddZedd Zdd ZdS )r6   Nc             C   s6   || _ || | _| _dj|| _|| _|| _|| _d S )N )r*   r7   fieldsjoinclassesdescriptionr2   r3   )r4   r*   r7   r3   r@   rB   rC   r2   r#   r#   r$   r5   G   s    zFieldset.__init__c             C   s2   d| j kr*tjrdnd}tjd| gdS tj S )Ncollapser   z.minzadmin/js/collapse%s.js)js)rB   r   DEBUGr   Media)r4   extrar#   r#   r$   r<   P   s    
zFieldset.mediac             c   s,   x&| j D ]}t| j|| j| jdV  qW d S )N)r2   )r@   	Fieldliner*   r3   r2   )r4   r,   r#   r#   r$   r9   W   s    zFieldset.__iter__)r   r   r   r5   r>   r<   r9   r#   r#   r#   r$   r6   F   s   r6   c               @   s&   e Zd ZdddZdd Zdd ZdS )	rI   Nc                sd   | _ t|d st|tr&|g _n| _t fdd jD   _| _|d krZf }| _d S )Nr9   c             3   s*   | ]"}| j jko  j j| jjV  qd S )N)r*   r@   r   	is_hidden)r(   r,   )r4   r#   r$   	<genexpr>d   s   z%Fieldline.__init__.<locals>.<genexpr>)	r*   hasattr
isinstancestrr@   allZhas_visible_fieldr2   r3   )r4   r*   r,   r3   r2   r#   )r4   r$   r5   ]   s    

zFieldline.__init__c             c   sX   xRt | jD ]D\}}|| jkr:t| j||dk| jdV  qt| j||dkdV  qW d S )Nr   )is_firstr2   )rP   )	enumerater@   r3   AdminReadonlyFieldr*   r2   
AdminField)r4   ir,   r#   r#   r$   r9   l   s    
zFieldline.__iter__c                s$   t dj fdd jD jdS )N
c             3   s(   | ] }| j kr j| jj V  qd S )N)r3   r*   r:   as_ul)r(   r)   )r4   r#   r$   rK   v   s    z#Fieldline.errors.<locals>.<genexpr>)r   rA   r@   strip)r4   r#   )r4   r$   r:   s   s    zFieldline.errors)NN)r   r   r   r5   r9   r:   r#   r#   r#   r$   rI   \   s   
rI   c               @   s$   e Zd Zdd Zdd Zdd ZdS )rS   c             C   s.   || | _ || _t| j j jtj| _d| _d S )NF)r,   rP   rM   r   r   CheckboxInputis_checkboxis_readonly)r4   r*   r,   rP   r#   r#   r$   r5   |   s    
zAdminField.__init__c             C   sz   g }t | jj}| jr |jd | jjjr4|jd | jsD|jd |rVddj|ini }| jjt	||| jrrdnd dS )NZvCheckboxLabelr   inliner   r?   r   )contentsattrslabel_suffix)
r   r,   r   rY   appendr   rP   rA   	label_tagr   )r4   rB   r\   r]   r#   r#   r$   r`      s    



zAdminField.label_tagc             C   s   t | jjj S )N)r   r,   r:   rV   )r4   r#   r#   r$   r:      s    zAdminField.errorsN)r   r   r   r5   r`   r:   r#   r#   r#   r$   rS   {   s   rS   c               @   s&   e Zd ZdddZdd Zdd ZdS )	rR   Nc             C   s   t |r|jdkr|jnd}n|}|jjrD||jjkrD|jj| }nt||jj||d}|jjrz||jjkrz|jj| }nt||jj}||||d| _|| _	|| _
|| _d| _d| _|j | _d S )Nz<lambda>r   )r*   )r7   r   	help_textr,   FT)callabler   _metalabelsr   model
help_textsr   r,   r*   r2   rP   rY   rZ   get_empty_value_displayempty_value_display)r4   r*   r,   rP   r2   
class_namer   ra   r#   r#   r$   r5      s&    
zAdminReadonlyField.__init__c             C   s6   i }| j sd|d< | jd }tdt|t|| jjS )Nr[   r   r   z<label{}>{}{}</label>)rP   r,   r   r   r   r*   r^   )r4   r]   r   r#   r#   r$   r`      s
    
zAdminReadonlyField.label_tagc       
      C   s  ddl m} | jd | jj| j  }}}yt|||\}}}W n  ttt	fk
r^   | j
}Y nX || jjkr| j| jj}	t|	ddr|	j||S |d krt|ddr||}nt|dr|}nt|}n@t|jtr|d k	rdjtt|j }nt||| j
}t|}t|S )	Nr   )_boolean_iconr,   Z	read_onlyFZboolean__html__z, )Z,django.contrib.admin.templatetags.admin_listrj   r,   r*   instancer2   r   AttributeError
ValueErrorr	   rh   r@   r   getattrrenderrL   r   rM   remote_fieldr
   rA   maprN   rO   r   r   )
r4   rj   r,   objr2   r)   attrr%   Zresult_reprr   r#   r#   r$   r\      s*    


zAdminReadonlyField.contents)N)r   r   r   r5   r`   r\   r#   r#   r#   r$   rR      s   
 rR   c               @   sV   e Zd ZdZdddZdd Z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 kr$f }|| _|d kr6i }|| _|jrNdj|jnd| _|| _|| _	|	| _
|
| _d S )Nr?   r   )optsformsetr/   r2   r3   r1   rB   rA   has_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission)r4   r[   rw   r/   r1   r3   r2   rx   ry   rz   r{   r#   r#   r$   r5      s    zInlineAdminFormSet.__init__c             c   s   | j r| j}n| jt| j }xNt| jj| jj D ]6\}}| jj	|}t
| j|| j| j||| j|dV  q4W x2| jjD ]&}t
| j|| j| jd | j| jdV  qxW | jrt
| j| jj| j| jd | j| jdV  d S )N)r2   view_on_site_url)r2   )ry   r3   r   r/   ziprw   initial_formsget_querysetrv   get_view_on_site_urlInlineAdminFormr1   extra_formsrx   
empty_form)r4   Zreadonly_fields_for_editingr*   originalr|   r#   r#   r$   r9      s$    

zInlineAdminFormSet.__iter__c       	      c   s   t | jdd }| jj}|jjp i }|jjp,i }xtt| jD ]\}}|rV|j	|krVq>| j
 sh|| jkr||j|pt|| jj| j|dddid|j|pt|| jjdV  q>|j| }|j}|d krt|| jj| j|d}|||j|j|jdV  q>W d S )Nfk)r*   rJ   F)r7   r   r   r   ra   )ro   rw   r   rc   rd   rf   rQ   r   r/   r7   ry   r3   getr   rv   re   r   r@   r   r   r   ra   )	r4   r   r   Zmeta_labelsZmeta_help_textsrT   r.   
form_fieldr   r#   r#   r$   r@     s4     
zInlineAdminFormSet.fieldsc             C   s@   | j j}tjd| jj | jjtddt|i tdddS )Nz#%szAdd another %(verbose_name)sverbose_nameZRemove)prefixZaddTextZ
deleteText)r7   r8   )rv   r   jsondumpsrw   r   r   r   )r4   r   r#   r#   r$   inline_formset_data2  s    
z&InlineAdminFormSet.inline_formset_datac             C   s   | j jS )N)rw   r   )r4   r#   r#   r$   r   ?  s    zInlineAdminFormSet.formsc             C   s   | j jS )N)rw   non_form_errors)r4   r#   r#   r$   r   C  s    z"InlineAdminFormSet.non_form_errorsc             C   s,   | j j| jj }x| D ]}||j }qW |S )N)rv   r<   rw   )r4   r<   r=   r#   r#   r$   r<   G  s    
zInlineAdminFormSet.media)NNNTTTT)r   r   r   __doc__r5   r9   r@   r   r>   r   r   r<   r#   r#   r#   r$   ru      s      
"ru   c                   sR   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 k	| _|| _t j||||| d S )N)rw   r2   r   Zshow_urlabsolute_urlsuperr5   )	r4   rw   r*   r/   r1   r   r3   r2   r|   )	__class__r#   r$   r5   S  s    zInlineAdminForm.__init__c             c   s<   x6| j D ],\}}t| j| j|| jfd| ji|V  qW d S )Nr2   )r/   InlineFieldsetrw   r*   r3   r2   )r4   r7   r8   r#   r#   r$   r9   \  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j D S )Nc             s   s&   | ]}|j jp|j jj jj V  qd S )N)rc   
auto_fieldre   pkeditable)r(   parentr#   r#   r$   rK   j  s   z:InlineAdminForm.needs_explicit_pk_field.<locals>.<genexpr>)r*   rc   re   r   r   r   anyget_parent_list)r4   r#   r#   r$   needs_explicit_pk_fieldc  s     z'InlineAdminForm.needs_explicit_pk_fieldc             C   s   t | j| jjjdS )NF)rS   r*   rw   	_pk_fieldr7   )r4   r#   r#   r$   pk_fieldn  s    zInlineAdminForm.pk_fieldc             C   s*   t | jdd }|r"t| j|jdS dS d S )Nr   Fr   )ro   rw   rS   r*   r7   )r4   r   r#   r#   r$   fk_fieldq  s    zInlineAdminForm.fk_fieldc             C   s   ddl m} t| j|dS )Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsr   rS   r*   )r4   r   r#   r#   r$   deletion_fieldx  s    zInlineAdminForm.deletion_fieldc             C   s   ddl m} t| j|dS )Nr   )ORDERING_FIELD_NAMEF)r   r   rS   r*   )r4   r   r#   r#   r$   ordering_field|  s    zInlineAdminForm.ordering_field)NNN)r   r   r   r   r5   r9   r   r   r   r   r   __classcell__r#   r#   )r   r$   r   O  s   r   c                   s$   e Zd Z fddZdd Z  ZS )r   c                s   || _ t j|| d S )N)rw   r   r5   )r4   rw   argskwargs)r   r#   r$   r5     s    zInlineFieldset.__init__c             c   sJ   t | jdd }x6| jD ],}| s*|j|krt| j|| j| jdV  qW d S )Nr   )r2   )ro   rw   r@   r7   rI   r*   r3   r2   )r4   r   r,   r#   r#   r$   r9     s    zInlineFieldset.__iter__)r   r   r   r5   r9   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                s^   t  j  |jrZ| j|jj  x8|D ]0}| j|j  x|jD ]}| j|j  q@W q&W d S )N)r   r5   is_boundextendr:   valuesr   )r4   r*   inline_formsetsinline_formsetZerrors_in_inline_form)r   r#   r$   r5     s    

zAdminErrorList.__init__)r   r   r   r   r5   r   r#   r#   )r   r$   r     s   r   )-r   djangor   django.confr   django.contrib.admin.utilsr   r   r   r   r   django.core.exceptionsr	   django.db.models.fields.relatedr
   django.forms.utilsr   django.template.defaultfiltersr   r   django.utils.htmlr   r   django.utils.safestringr   django.utils.translationr   r   r   ACTION_CHECKBOX_NAMEFormr   rX   checkboxr'   r6   rI   rS   rR   ru   r   r   utils	ErrorListr   r#   r#   r#   r$   <module>   s,   
%Gp2