
^Q\f2                 @   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
 Wn" e k
 r d  d l m
 Z
 Yn Xd  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 Gd d   d e j  Z  Gd d   d e!  Z" Gd d   d e!  Z# Gd d   d e" e  Z$ Gd d   d e# e  Z% Gd  d   d e%  Z& Gd! d   d e%  Z' Gd" d   d e# e  Z( Gd# d   d e(  Z) Gd$ 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	   PY2im_func)fn r   F/var/www/dbchiro/venv/build/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   S)r   Nc                sh   | j  d d   |  _ t t |   j | | |  t | d d   r[ d 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*  x#t  t |   j   D]} t | j d d   s | j } | j j rO | j n d  } g  g  } } | } | j j d  r |  j	 } n  t | d d   p g  } t | d d   p g  } |  j
 j |  j | | d | d d | _ n  x7 | j j D]) } x  | D] } | j | j 7_ q Wq W| Vq Wd  S)NinlinesZ
__prefix__nested_formsetsnested_inlinesobjallow_nestedT)r&   r   __iter__r(   forminstancepkprefixendswithformsetmodel_adminget_inline_formsetsr!   r/   Zprepopulated_fields)	r*   Zinline_admin_formr5   r2   formsetsr/   Zobj_with_nesting_dataZnested_inlineZnested_form)r.   r   r   r4   /   s     	z!NestedInlineAdminFormset.__iter__c          	   C   s   |  j  j |  j j } xN |  D]F } | | j } x0 t | j d d   pK g  D] } | | j } qL Wq Wt j } t d  } t t d d  r d n d } | t	 j
 d | | d |  f d	 i | d
 |  f d 6 S)Nr/   Znesting_server_dataZNESTED_ADMIN_DEBUGFr$   z.minZjsz#nested_admin/dist/nested_admin%s.jscssz$nested_admin/dist/nested_admin%s.cssall)optsmediar:   r(   r5   r   urlr   r   r   ZMedia)r*   rA   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 i d |  j j d 6i |  j j d 6t d  i t |  d 6d 6t d  d 6d	 6i t |  j  d
 d   d 6t |  j  d i   d 6t |  j  d i   d 6t |  j d d   r |  j j	 j
 n d d 6t |  j d d  d 6i t |  j  d
 d   d 6|  j  j  j j
 d 6d 6|  j d 6|  j  j d 6d 6 S)Nz#%snamer8   zAdd another %(verbose_name)sverbose_nameZaddTextZRemoveZ
deleteTextoptionssortable_field_nameZsortableFieldNameZrelated_lookup_fieldsZlookupRelatedZautocomplete_lookup_fieldsZlookupAutocompletefkr$   ZformsetFkNamenesting_depthr   ZnestingLevelpositionr7   Z
fieldNamesZinlineModelZsortableOptionsZnestedOptions)r@   rH   jsondumpsr:   r8   r   r   r(   rK   rG   r7   rF   sortable_options)r*   rH   r   r   r   inline_formset_dataZ   s&    	+
z,NestedInlineAdminFormset.inline_formset_datac             C   s9   t  t |  j d d   p g   } t | d |  j h B S)Nhandler_classeszdjn-model-%s)setr(   r@   tuplerF   )r*   r"   r   r   r   rR   t   s    !z(NestedInlineAdminFormset.handler_classes)__name__
__module____qualname__r"   r'   r4   rD   propertyrA   rF   rQ   rR   r   r   )r.   r   r   "   s   	c                   s:   e  Z d  Z e Z d d d d  Z   f d d   Z   S)r   NFc             C   s   g  } x t  | |  D] \ } } | rA t | d d  rA q n  t | j | |   }	 t | j | |   }
 t | j | |   } |  j | | |	 | |
 d |  d | } | j |  q W| S)N	is_nestedFr;   r!   )	r
   r(   listZget_fieldsetsZget_readonly_fieldsdictZget_prepopulated_fieldsinline_admin_formset_helper_clsappend)r*   r!   r=   inline_instancesr2   r3   Zinline_admin_formsetsr+   r:   Z	fieldsetsreadonlyZprepopulatedZinline_admin_formsetr   r   r   r<   ~   s    z)NestedModelAdminMixin.get_inline_formsetsc                s>  t  t |   j | | |  \ } } g  } g  } i  } xt | |  D]\   }	 t   d  sm d   _ n  | j    | j |	  t |	 d g   rF   f d d   |	 j |  D }
 d } xl| t	 |
  k  r,|
 | \ }   | d 7} t
   j  d  g } x | D]} | d  k	 r=  | _ | j } | j } n   j d  } d  } | j | |  } d | | j   f } | j | d  d | | <| | d k rd | | | f } n  i | d	 6| d
 6| j |  d 6} | j d k r"| j i | j d 6| j d 6d | j k d 6 n  | |    d  _   j d  _ |  _ | d  k re  } n2 | } | j d k r| j   | j |  n  t | d d   pg  | _ t | d d   pg  | _ | j j   | j j |  t | d  r|
  f d d   | j |  D 7}
 qqWq WqF qF W| | f S)NrL   r   r/   c                s   g  |  ] } |   f  q Sr   r   ).0nested)r:   r   r   
<listcomp>   s   	z:NestedModelAdminMixin._create_formsets.<locals>.<listcomp>r   emptyz%s-%sr6   r8   ZquerysetPOSTdatafilesZ
_saveasnewZsave_as_newTr0   r1   get_inline_instancesc                s   g  |  ] } |   f  q Sr   r   )r`   Znested_nested)nested_formsetr   r   rb      s   	)r&   r   _create_formsetsr
   hasattrrL   r]   r(   rg   lenrZ   r   Zparent_formsetr8   r6   Z
add_prefixget_formsetZget_default_prefixgetZget_querysetmethodupdaterd   ZFILESrY   Zparent_formr0   r1   )r*   r!   r2   ZchangeZorig_formsetsZorig_inline_instancesr=   r^   prefixesZinline_instanceZinlines_and_formsetsira   Zformset_formsr5   Zform_prefixZform_objZInlineFormSetr8   Zformset_params)r.   )r:   rh   r   ri      st    
			

			&z&NestedModelAdminMixin._create_formsets)rU   rV   rW   r   r\   r<   ri   r   r   )r.   r   r   z   s   c                   s   e  Z d  Z d Z d Z e Z g  Z d e j	 k r< d Z
 n d e j	 k rT d Z
 n d Z
   f d d	   Z e e j  Z e e j  Z e e d
  r e e j  Z n  e e d  r e e j  Z n  d   f d d  Z   S)r   TNZsuitz'nesting/admin/includes/suit_inline.html	grappelliz,nesting/admin/includes/grappelli_inline.htmlz"nesting/admin/includes/inline.htmlc                sx   i |  j  d 6} t |  d  r0 |  j | d <n  t |  d  rR | j |  j  n  | |  _ t t |   j | |   d  S)Ndisabledsortable_excludesZsortableExcludesrP   )is_sortablerj   rt   ro   rP   r&   r   r'   )r*   r,   r-   rP   )r.   r   r   r'      s    	z$NestedInlineModelAdminMixin.__init__get_formsets_get_formsetsc                sg   | j  d   j  } }   j rA G  f d d   d |  } n  | | d <t t    j | | |  S)Nr:   c                   s   e  Z d  Z   j Z d S)z8NestedInlineModelAdminMixin.get_formset.<locals>.FormSetN)rU   rV   rW   rJ   r   )r*   r   r   FormSet  s   rx   )r%   r:   rJ   r&   r   rl   )r*   r!   r2   r-   rx   ZBaseFormSet)r.   )r*   r   rl     s
    	
z'NestedInlineModelAdminMixin.get_formset)rU   rV   rW   ru   rJ   r   r:   r/   r   INSTALLED_APPSfieldset_templater'   r    r   rg   Zget_formsets_with_inlinesrj   rv   rw   rl   r   r   )r.   r   r      s"   		c               @   s   e  Z d  Z d S)r   N)rU   rV   rW   r   r   r   r   r     s   c               @   s   e  Z d  Z d S)r   N)rU   rV   rW   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   rr   z,nesting/admin/inlines/grappelli_stacked.htmlz"nesting/admin/inlines/stacked.htmlN)rU   rV   rW   r   ry   templater   r   r   r   r     s   	c               @   s4   e  Z d  Z d e j k r* d Z d Z n d Z d S)r   rr   z,nesting/admin/inlines/grappelli_tabular.htmlz4nesting/admin/includes/grappelli_inline_tabular.htmlz"nesting/admin/inlines/tabular.htmlN)rU   rV   rW   r   ry   r{   rz   r   r   r   r   r     s   	c               @   s   e  Z d  Z e Z d S)r   N)rU   rV   rW   r   r:   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   rr   z,nesting/admin/inlines/grappelli_stacked.htmlz"nesting/admin/inlines/stacked.htmlN)rU   rV   rW   r   ry   r{   r   r   r   r   r   +  s   	c               @   s4   e  Z d  Z d e j k r* d Z d Z n d Z d S)r   rr   z,nesting/admin/inlines/grappelli_tabular.htmlz4nesting/admin/includes/grappelli_inline_tabular.htmlz"nesting/admin/inlines/tabular.htmlN)rU   rV   rW   r   ry   r{   rz   r   r   r   r   r   3  s   	)
zNestedModelAdminzNestedModelAdminMixinzNestedInlineAdminFormsetzNestedInlineModelAdminzNestedStackedInlinezNestedTabularInlinezNestedInlineModelAdminMixinzNestedGenericInlineModelAdminzNestedGenericStackedInlinezNestedGenericTabularInline)+rN   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1	