3
(h0                 @   s~  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ yd dl	m
Z
 W n  ek
rh   d dlm
Z
 Y nX 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dlmZmZ d dlmZmZ d%Zdd ZG dd dejZ G dd de!Z"G dd de!Z#G dd de"eZ$G dd de#eZ%G d d de%Z&G d!d de%Z'G d"d de#eZ(G d#d de(Z)G d$d de(Z*dS )&    N)settings)helpers)GenericInlineModelAdmin)staticfiles_storage)reverse)forms)capfirst)six)zip)ugettext   )NestedInlineFormSetNestedBaseGenericInlineFormSet)
ModelAdminInlineModelAdminNestedModelAdminNestedModelAdminMixinNestedInlineAdminFormsetNestedInlineModelAdminNestedStackedInlineNestedTabularInlineNestedInlineModelAdminMixinNestedGenericInlineModelAdminNestedGenericStackedInlineNestedGenericTabularInlinec             C   s   t jr| jS | S )N)r	   PY2Zim_func)fn r   D/tmp/pip-install-q3hcpn_q/django-nested-admin/nested_admin/nested.pyget_method_function   s    r   c                   s\   e Zd ZdZ fddZ fddZdd ZeeZedd	 Z	d
d Z
edd Z  ZS )r   Nc                sL   |j dd | _tt| j|f|| t|dd rBdj|j| _nd| _d S )Nrequestclasses  )popr    superr   __init__getattrjoinr!   )selfinlineargskwargs)	__class__r   r   r&   &   s
    z!NestedInlineAdminFormset.__init__c       	      #   s   xt t| j D ]}t|jdd s|j}|jjr6|jnd }g g  }}|}|jjdrZ| j	}t|dd phg }t|dd pxg }| j
j| j|||dd|_x.|jjD ]"}x|D ]}| j|j7  _qW qW |V  qW d S )NinlinesZ
__prefix__nested_formsetsnested_inlinesT)objallow_nested)r%   r   __iter__r'   forminstancepkprefixendswithformsetmodel_adminget_inline_formsetsr    r.   Zprepopulated_fields)	r)   Zinline_admin_formr4   r1   formsetsr.   Zobj_with_nesting_dataZnested_inlineZnested_form)r-   r   r   r3   /   s     

z!NestedInlineAdminFormset.__iter__c             C   s   | j j| jj }x<| D ]4}||j }x$t|jdd p6g D ]}||j }q8W qW tj}td}ttddrldnd}|t	j
||d| fd|d	| fid
 S )Nr.   Znesting_server_dataZNESTED_ADMIN_DEBUGFr#   z.minz#nested_admin/dist/nested_admin%s.jsallz$nested_admin/dist/nested_admin%s.css)Zjscss)optsmediar9   r'   r4   r   urlr   r   r   ZMedia)r)   r@   fsr*   Z
static_urlZserver_data_jsZmin_extr   r   r   _mediaA   s    

zNestedInlineAdminFormset._mediac             C   s   dj | jjj| jjjgS )N-)r(   r?   Z	app_labelZ
model_name)r)   r   r   r   inline_model_idV   s    z(NestedInlineAdminFormset.inline_model_idc             C   s   | j j}tjd| jj | jjtddt|i tddt| j dd t| j di t| j di t| jd	d rt| jj	j
nd
t| jddt| j dd | j j jj
d| j| j jddS )Nz#%szAdd another %(verbose_name)sverbose_nameZRemove)r7   ZaddTextZ
deleteTextZsortable_field_nameZrelated_lookup_fieldsZautocomplete_lookup_fieldsfkr#   nesting_depthr   )positionr6   )ZsortableFieldNameZlookupRelatedZlookupAutocompleteZformsetFkNameZnestingLevelZ
fieldNamesZinlineModelZsortableOptions)nameoptionsZnestedOptions)r?   rF   jsondumpsr9   r7   r   r   r'   rG   rJ   r6   rE   sortable_options)r)   rF   r   r   r   inline_formset_dataZ   s     

z,NestedInlineAdminFormset.inline_formset_datac             C   s*   t t| jdd pg }t|d| j hB S )Nhandler_classeszdjn-model-%s)setr'   r?   tuplerE   )r)   r!   r   r   r   rP   t   s    z(NestedInlineAdminFormset.handler_classes)__name__
__module____qualname__r!   r&   r3   rC   propertyr@   rE   rO   rP   __classcell__r   r   )r-   r   r   "   s   	c                   s*   e Zd ZeZdddZ fddZ  ZS )r   NFc          
   C   s   g }x|t ||D ]n\}}| r,t|ddr,qt|j||}	t|j||}
t|j||}| j|||	||
| |d}|j| qW |S )N	is_nestedF)r:   r    )	r
   r'   listZget_fieldsetsZget_readonly_fieldsdictZget_prepopulated_fieldsinline_admin_formset_helper_clsappend)r)   r    r<   inline_instancesr1   r2   Zinline_admin_formsetsr*   r9   Z	fieldsetsreadonlyZprepopulatedZinline_admin_formsetr   r   r   r;   ~   s    

z)NestedModelAdminMixin.get_inline_formsetsc                sN  t t| j|||\}}g }g }i }xt||D ]\ }	t dsLd _|j  |j|	 t|	dg r2 fdd|	j|D }
d}x|t	|
k r@|
| \} |d7 }t
 jd g }x||D ]r}|d k	r |_|j}|j}n jd}d }|j||}d||j f }|j|dd ||< || dkrDd||| f }|||j|d	}|jd
kr~|j|j|jd|jkd |f |d_ jd _|_|d kr }n$|}|jd
kr|j |j| t|dd pg |_t|dd pg |_|jj |jj| t|dr|
fdd|j|D 7 }
qW qW q2W ||fS )NrH   r   r.   c                s   g | ]}| fqS r   r   ).0nested)r9   r   r   
<listcomp>   s   z:NestedModelAdminMixin._create_formsets.<locals>.<listcomp>r   emptyz%s-%s)r5   r7   ZquerysetPOSTZ
_saveasnew)datafilesZsave_as_newTr/   r0   get_inline_instancesc                s   g | ]}| fqS r   r   )r_   Znested_nested)nested_formsetr   r   ra      s   )r%   r   _create_formsetsr
   hasattrrH   r\   r'   rf   lenrY   r   Zparent_formsetr7   r5   Z
add_prefixZget_formsetZget_default_prefixgetZget_querysetmethodupdaterc   ZFILESrX   Zparent_formr/   r0   )r)   r    r1   ZchangeZorig_formsetsZorig_inline_instancesr<   r]   prefixesZinline_instanceZinlines_and_formsetsir`   Zformset_formsr4   Zform_prefixZform_objZInlineFormSetr7   Zformset_params)r-   )r9   rg   r   rh      sr    











z&NestedModelAdminMixin._create_formsets)NF)rS   rT   rU   r   r[   r;   rh   rW   r   r   )r-   r   r   z   s   
c                   s   e Zd ZdZeZg Zdejkr$dZ	ndejkr4dZ	ndZ	 fddZ
eejZeejZeed	rleejZeed
reejZ  ZS )r   TZsuitz'nesting/admin/includes/suit_inline.html	grappelliz,nesting/admin/includes/grappelli_inline.htmlz"nesting/admin/includes/inline.htmlc                sR   d| j  i}t| dr | j|d< t| dr6|j| j || _tt| j|| d S )Ndisabledsortable_excludesZsortableExcludesrN   )is_sortableri   rr   rm   rN   r%   r   r&   )r)   r+   r,   rN   )r-   r   r   r&      s    


z$NestedInlineModelAdminMixin.__init__get_formsets_get_formsets)rS   rT   rU   rs   r   r9   r.   r   INSTALLED_APPSfieldset_templater&   r   r   rf   Zget_formsets_with_inlinesri   rt   ru   rW   r   r   )r-   r   r      s   






c               @   s   e Zd ZdS )r   N)rS   rT   rU   r   r   r   r   r     s   c               @   s   e Zd ZdS )r   N)rS   rT   rU   r   r   r   r   r     s   c               @   s    e Zd ZdejkrdZndZdS )r   rp   z,nesting/admin/inlines/grappelli_stacked.htmlz"nesting/admin/inlines/stacked.htmlN)rS   rT   rU   r   rv   templater   r   r   r   r   
  s   
c               @   s$   e Zd ZdejkrdZdZndZdS )r   rp   z,nesting/admin/inlines/grappelli_tabular.htmlz4nesting/admin/includes/grappelli_inline_tabular.htmlz"nesting/admin/inlines/tabular.htmlN)rS   rT   rU   r   rv   rx   rw   r   r   r   r   r     s   
c               @   s   e Zd ZeZdS )r   N)rS   rT   rU   r   r9   r   r   r   r   r     s   c               @   s    e Zd ZdejkrdZndZdS )r   rp   z,nesting/admin/inlines/grappelli_stacked.htmlz"nesting/admin/inlines/stacked.htmlN)rS   rT   rU   r   rv   rx   r   r   r   r   r      s   
c               @   s$   e Zd ZdejkrdZdZndZdS )r   rp   z,nesting/admin/inlines/grappelli_tabular.htmlz4nesting/admin/includes/grappelli_inline_tabular.htmlz"nesting/admin/inlines/tabular.htmlN)rS   rT   rU   r   rv   rx   rw   r   r   r   r   r   (  s   
)
r   r   r   r   r   r   r   r   r   r   )+rL   Zdjango.confr   Zdjango.contrib.adminr   Z!django.contrib.contenttypes.adminr   Z"django.contrib.staticfiles.storager   Zdjango.urlsr   ImportErrorZdjango.core.urlresolversZdjangor   Zdjango.template.defaultfiltersr   Zdjango.utilsr	   Zdjango.utils.six.movesr
   Zdjango.utils.translationr   r<   r   r   Zdjango.contrib.admin.optionsr   r   __all__r   ZInlineAdminFormSetr   objectr   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s<      Xb&	