o 3a?@sbddlZddlmZddlmZmZmZmZmZm Z ddl m Z ddl m Z mZmZddlmZddlmZmZddlmZmZdd lmZmZdd lmZdd lmZmZ d Z!Gd ddej"Z#e$ddiddZ%GdddZ&GdddZ'GdddZ(GdddZ)GdddZ*GdddZ+Gdd d e&Z,Gd!d"d"e'Z-Gd#d$d$ej.j/Z0dS)%N)forms)display_for_fieldflatten_fieldsetshelp_text_for_fieldlabel_for_field lookup_fieldquote)ObjectDoesNotExist)ForeignObjectRel ManyToManyRel OneToOneField)flatatt)capfirst linebreaksbr)NoReverseMatchreverse)conditional_escape format_html) mark_safe)gettext gettext_lazy_selected_actionc@s8eZdZejeddZejdddeddidZ d S) ActionFormzAction:)labelFrclassz select-across)rrequiredinitialwidgetN) __name__ __module__ __qualname__r ChoiceField_action BooleanField HiddenInput select_acrossr(r(>/usr/lib/python3/dist-packages/django/contrib/admin/helpers.pyrs  rrz action-selectcCsdSNFr()valuer(r(r) sr,c@sBeZdZd ddZddZeddZedd Zed d ZdS) AdminFormNcsB||_|_fdd|D|_||_|durd}||_dS)Ncs,g|]\}}|fdd|DdqS)csg|]}|qSr(r(.0fformr(r) (sz1AdminForm.__init__...)field dependenciesr()r/ field_namer5r1r(r)r3&s  z&AdminForm.__init__..r()r2 fieldsetsitemsprepopulated_fields model_adminreadonly_fields)selfr2r7r9r;r:r(r1r)__init__$s  zAdminForm.__init__ccs6|jD]\}}t|j|f|j|jd|VqdS)N)r;r:)r7Fieldsetr2r;r:r<nameoptionsr(r(r)__iter__/s zAdminForm.__iter__cC|jjSN)r2errorsr<r(r(r)rE8zAdminForm.errorscCrCrD)r2non_field_errorsrFr(r(r)rH<rGzAdminForm.non_field_errorscCs |jj}|D]}||j}q|SrD)r2mediar<rIfsr(r(r)rI@s zAdminForm.mediaNN) rr r!r=rBpropertyrErHrIr(r(r(r)r-#s    r-c@s.eZdZ  d ddZeddZddZdS) r>Nr(cCs6||_|||_|_d||_||_||_||_dS)N )r2r@fieldsjoinclasses descriptionr:r;)r<r2r@r;rOrQrRr:r(r(r)r=Is   zFieldset.__init__cCs d|jvr tjdgdStS)Ncollapsezadmin/js/collapse.js)js)rQrMediarFr(r(r)rIRs zFieldset.mediaccs*|jD]}t|j||j|jdVqdS)Nr:)rO Fieldliner2r;r:)r<r4r(r(r)rBXs zFieldset.__iter__)Nr(r(r(NN)rr r!r=rMrIrBr(r(r(r)r>Hs   r>c@s&eZdZdddZddZddZdS) rWNcsb|_t|dr t|tr|g_n|_tfddjD _|_|dur,d}|_dS)NrBc3s,|]}|jjvojj|jjVqdSrD)r2rOr is_hidden)r/r4rFr(r) ds  z%Fieldline.__init__..r() r2hasattr isinstancestrrOallhas_visible_fieldr:r;)r<r2r4r;r:r(rFr)r=^s    zFieldline.__init__ccsVt|jD]"\}}||jvrt|j||dk|jdVqt|j||dkdVqdS)Nr)is_firstr:)r_) enumeraterOr;AdminReadonlyFieldr2r: AdminField)r<ir4r(r(r)rBms  zFieldline.__iter__cs$tdfddjDdS)N c3s*|]}|jvrj|jVqdSrD)r;r2rEas_ulr.rFr(r)rYvs z#Fieldline.errors..)rrPrOstriprFr(rFr)rEts zFieldline.errorsrL)rr r!r=rBrEr(r(r(r)rW]s  rWc@s$eZdZddZddZddZdS)rbcCs.|||_||_t|jjjtj|_d|_dSr*)r4r_r[rr CheckboxInput is_checkbox is_readonly)r<r2r4r_r(r(r)r=}s  zAdminField.__init__cCs~g}t|jj}|jr|d|jjjr|d|js"|d|r+dd|ini}|jjt |||jr;ddSddS)NvCheckboxLabelrinlinerrNr)contentsattrs label_suffix) rr4rrhappendrr_rP label_tagr)r<rQrlrmr(r(r)rps     zAdminField.label_tagcCst|jjSrD)rr4rErerFr(r(r)rEszAdminField.errorsN)rr r!r=rprEr(r(r(r)rb|s rbc@s.eZdZd ddZddZddZdd ZdS) raNcCst|r|jdkr |jnd}n|}|jjr"||jjvr"|jj|}n t||jj||d}|jjr=||jjvr=|jj|}nt||jj}||||d|_||_ ||_ ||_ d|_ d|_ ||_dS)Nr,rr1)r@r help_textr4FT)callabler_metalabelsrmodel help_textsrr4r2r:r_rhriget_empty_value_displayempty_value_display)r<r2r4r_r: class_namerrqr(r(r)r=s(zAdminReadonlyField.__init__cCs6i}|js d|d<|jd}tdt|t||jjS)Nrkrrz{}{})r_r4rr rr2rn)r<rmrr(r(r)rps  zAdminReadonlyField.label_tagcCs^d|jjj|jjjf}zt|t|jg|jjj d}t d||WSt y.t |YSw)Nzadmin:%s_%s_change)args current_appz{}) rurs app_label model_namerrpkr: admin_siter@rrr\)r< remote_field remote_objurl_nameurlr(r(r) get_admin_urls   z AdminReadonlyField.get_admin_urlc CsPddlm}|jd|jj|j}}}z t|||\}}}Wnttt fy1|j }Yt|Sw||jj vrK|j|jj } t | ddrK| ||S|durpt |ddr]||}t|St|drh|}t|St|}t|St|jtr|durdtt|}nt|jttfr|dur||j|}nt|||j }t|}t|S) Nr) _boolean_iconr4 read_onlyFboolean__html__z, ),django.contrib.admin.templatetags.admin_listrr4r2instancer:rAttributeError ValueErrorr rxrOrgetattrrenderrZrr[rr rPmapr\r]r r rrr) r<rr4objr:r0attrr+ result_reprrr(r(r)rls<       zAdminReadonlyField.contentsrD)rr r!r=rprrlr(r(r(r)ras    rac@s^eZdZdZ    dddZddZdd Zd d Zed d Z eddZ eddZ dS)InlineAdminFormSetzI A wrapper around an inline formset for use in the admin system. NTc Csp||_||_||_||_|durd}||_|duri}||_|jr'd|jnd|_||_||_ | |_ | |_ dS)Nr(rNr) optsformsetr7r:r;r9rQrPhas_add_permissionhas_change_permissionhas_delete_permissionhas_view_permission) r<rkrr7r9r;r:rrrrr(r(r)r=s zInlineAdminFormSet.__init__c cs|jr|j}n|jt|j}t|jj|jD]\}}|j |}t |j||j|j |||j|dVq|jj D]}t |j||j|j d|j|jdVq:|j rft |j|jj|j|j d|j|jdVdSdS)N)r:view_on_site_urlrV)rr;rr7zipr initial_forms get_querysetrget_view_on_site_urlInlineAdminFormr9 extra_formsr empty_form)r<readonly_fields_for_editingr2originalrr(r(r)rB s.       zInlineAdminFormSet.__iter__c cst|jdd}|jj}|jjpi}|jjpi}tt|jD][\}}|r+|j |kr+q|j r3||j vrW|| |pCt ||jj|j|dddid| |pRt||jjdVq|j|}|j}|durnt ||jj|j|d}|||j|j|jdVqdS)Nfkr1rXF)r@rrrrq)rrrrsrtrvr`rr7r@rr;getrrrurrOrrrrq) r<rr meta_labelsmeta_help_textsrcr6 form_fieldrr(r(r)rO%s>     zInlineAdminFormSet.fieldscCs@|jj}td|jj|jjtddt|itdddS)Nz#%szAdd another %(verbose_name)s verbose_nameRemove)prefixaddText deleteText)r@rA)rrjsondumpsrrrr)r<rr(r(r)inline_formset_dataGs z&InlineAdminFormSet.inline_formset_datacCrCrD)rrrFr(r(r)rTrGzInlineAdminFormSet.formscCrCrD)rnon_form_errorsrFr(r(r)rXrGz"InlineAdminFormSet.non_form_errorscCs(|jj|jj}|D]}||j}q |SrD)rrIrrJr(r(r)rI\s zInlineAdminFormSet.media)NNNTTTT) rr r!__doc__r=rBrOrrMrrrIr(r(r(r)rs  "  rcsTeZdZdZ dfdd ZddZddZd d Zd d Zd dZ ddZ Z S)rzF A wrapper around an inline form for use in the admin system. Nc s>||_||_||_|o|du|_||_t|||||dSrD)rr:rshow_url absolute_urlsuperr=) r<rr2r7r9rr;r:r __class__r(r)r=hs zInlineAdminForm.__init__ccs:|jD]\}}t|j|j||jfd|ji|VqdS)Nr:)r7InlineFieldsetrr2r;r:r?r(r(r)rBqs zInlineAdminForm.__iter__cCs>|jjjjjp|jjjjjj ptdd|jjjjDS)Ncss(|]}|jjp|jjjjj VqdSrD)rs auto_fieldrur~editable)r/parentr(r(r)rYs z:InlineAdminForm.needs_explicit_pk_field..)r2rsrurr~ranyget_parent_listrFr(r(r)needs_explicit_pk_fieldxs z'InlineAdminForm.needs_explicit_pk_fieldcCst|j|jjjdSr*)rbr2r _pk_fieldr@rFr(r(r)pk_fieldszInlineAdminForm.pk_fieldcCs&t|jdd}|rt|j|jdSdS)NrFr)rrrbr2r@)r<rr(r(r)fk_fieldszInlineAdminForm.fk_fieldcCddlm}t|j|dS)Nr)DELETION_FIELD_NAMEF)django.forms.formsetsrrbr2)r<rr(r(r)deletion_field zInlineAdminForm.deletion_fieldcCr)Nr)ORDERING_FIELD_NAMEF)rrrbr2)r<rr(r(r)ordering_fieldrzInlineAdminForm.ordering_field)NNN) rr r!rr=rBrrrrr __classcell__r(r(rr)rds  rcs$eZdZfddZddZZS)rcs||_tj|i|dSrD)rrr=)r<rrzkwargsrr(r)r=szInlineFieldset.__init__ccsFt|jdd}|jD]}|r|j|kr t|j||j|jdVq dS)NrrV)rrrOr@rWr2r;r:)r<rr4r(r(r)rBs zInlineFieldset.__iter__)rr r!r=rBrr(r(rr)rs rcs eZdZdZfddZZS)AdminErrorListz9Store errors for the form/formsets in an add/change view.csZt|jr)||j|D]}|||jD] }||qqdSdSrD)rr=is_boundextendrEvaluesr)r<r2inline_formsetsinline_formseterrors_in_inline_formrr(r)r=s  zAdminErrorList.__init__)rr r!rr=rr(r(rr)rsr)1rdjangordjango.contrib.admin.utilsrrrrrrdjango.core.exceptionsr django.db.models.fields.relatedr r r django.forms.utilsr django.template.defaultfiltersrr django.urlsrrdjango.utils.htmlrrdjango.utils.safestringrdjango.utils.translationrrr#ACTION_CHECKBOX_NAMEFormrrgcheckboxr-r>rWrbrarrrutils ErrorListrr(r(r(r)s.      %[p2