
    h'                         d Z ddl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  G d	 d
e      Z G d dej                        Zy)zH
The child admin displays the change/delete view of the subclass model.
    N)admin)resolve)gettext_lazy)get_base_polymorphic_model   )PolymorphicParentModelAdminc                       e Zd ZdZy)ParentAdminNotRegisteredz/The admin site for the model is not registered.N)__name__
__module____qualname____doc__     L/home/dcms/DCMS/lib/python3.12/site-packages/polymorphic/admin/childadmin.pyr
   r
      s    5r   r
   c                        e Zd ZdZdZdZdZ ed      ZdZ	 fdZ
d fd	Z fdZed        Zed	        Zed
        Z fdZd Zd Zd fd	Zd fd	Zd fd	ZddZd fd	ZddZ xZS )PolymorphicChildModelAdmina  
    The *optional* base class for the admin interface of derived models.

    This base class defines some convenience behavior for the admin interface:

    * It corrects the breadcrumbs in the admin pages.
    * It adds the base model to the template lookup paths.
    * It allows to set ``base_form`` so the derived class will automatically include other fields in the form.
    * It allows to set ``base_fieldsets`` so the derived class will automatically display any extra fields.
    NContentsFc                 h    t        |   ||g|i | | j                  t        |      | _        y y N)super__init__
base_modelr   )selfmodel
admin_siteargskwargs	__class__s        r   r   z#PolymorphicChildModelAdmin.__init__2   s7    
<T<V<??"8?DO #r   c                     |j                  d| j                  xs | j                         | j                  s| j                  s|j                  dd       t        |   ||fi |S )Nformfields__all__)
setdefault	base_formr!   	fieldsetsr"   r   get_form)r   requestobjr   r   s       r   r'   z#PolymorphicChildModelAdmin.get_form8   sX     	&$.."=DII> ~~dkkh	2w777r   c                     t        |j                        }| j                  s#|j                  dk(  r|j                  dv rddddS t
        |   |      S )Nr   )indexapp_listF)addchangedelete)r   	path_infoshow_in_indexapp_nameurl_namer   get_model_perms)r   r(   matchr   s      r   r4   z*PolymorphicChildModelAdmin.get_model_permsH   sT    ))* ""')"77 EUCCw&w//r   c                 &   | j                   j                  }|j                  }| j                  j                  }|j                  }d| d|j                  j                          dd| dd| d|j                  j                          dd| dddgS )Nadmin//z/change_form.htmlz"admin/polymorphic/change_form.htmlzadmin/change_form.htmlr   _meta	app_labelr   object_namelowerr   optsr;   	base_optsbase_app_labels        r   change_form_templatez/PolymorphicChildModelAdmin.change_form_templateS   s    zzNN	 OO))	",, YKq!1!1!7!7!9 ::KLYK01^$Ai&;&;&A&A&C%DDUV^$$560$
 	
r   c                 &   | j                   j                  }|j                  }| j                  j                  }|j                  }d| d|j                  j                          dd| dd| d|j                  j                          dd| dddgS )Nr7   r8   z/delete_confirmation.htmlz*admin/polymorphic/delete_confirmation.htmlzadmin/delete_confirmation.htmlr9   r>   s        r   delete_confirmation_templatez7PolymorphicChildModelAdmin.delete_confirmation_templatef   s    zzNN	 OO))	",, YKq!1!1!7!7!9 ::STYK89^$Ai&;&;&A&A&C%DD]^^$$=>8,
 	
r   c                 &   | j                   j                  }|j                  }| j                  j                  }|j                  }d| d|j                  j                          dd| dd| d|j                  j                          dd| dddgS )Nr7   r8   z/object_history.htmlz%admin/polymorphic/object_history.htmlzadmin/object_history.htmlr9   r>   s        r   object_history_templatez2PolymorphicChildModelAdmin.object_history_templatey   s    zzNN	 OO))	",, YKq!1!1!7!7!9 ::NOYK34^$Ai&;&;&A&A&C%DDXY^$$893'
 	
r   c                    | j                   j                  j                  d      j                   }|| j                   k(  r
t               S 	 | j                  j
                  |   S # t        $ r t        j                  | j                         D ]M  }t        ||      s| j                  j
                  j                  |      }|8t        |t              sI|c cY S  t        d| d      w xY w)Npolymorphic_ctypez&No parent admin was registered for a 'z' model.)r   r:   	get_fieldr   r   	_registryKeyErrorinspectgetmro
issubclassget
isinstancer   r
   )r   parent_modelklassmodel_adminr   s       r   _get_parent_adminz,PolymorphicChildModelAdmin._get_parent_admin   s    zz''112EFLL4::%7N	??,,\:: 	 !

3 	'!%6 #oo77;;EB*z!<0 '&	' +8hO 	s   A$ $AC,C,C,C,c                 B    | j                         j                  ||      S r   )rT   response_post_save_addr   r(   r)   s      r   rV   z1PolymorphicChildModelAdmin.response_post_save_add   s    %%'>>wLLr   c                 B    | j                         j                  ||      S r   )rT   response_post_save_changerW   s      r   rY   z4PolymorphicChildModelAdmin.response_post_save_change   s    %%'AA'3OOr   c                 |    |j                  d| j                  j                  i       t        |   ||||||      S )Nr@   )r-   r.   form_urlr)   )updater   r:   r   render_change_form)r   r(   contextr-   r.   r[   r)   r   s          r   r]   z-PolymorphicChildModelAdmin.render_change_form   sB    T__%:%:;<w)W#fxS * 
 	
r   c                 V    d| j                   j                  i}t        |   |||      S )Nr@   )r   r:   r   delete_view)r   r(   	object_idr^   extra_contextr   s        r   r`   z&PolymorphicChildModelAdmin.delete_view   s+    $doo&;&;<w"7I}EEr   c                 ~    d| j                   j                  i}|r|j                  |       t        |   |||      S )Nr@   )rb   )r   r:   r\   r   history_view)r   r(   ra   rb   r^   r   s        r   rd   z'PolymorphicChildModelAdmin.history_view   s=     5 56NN=)w#GYg#NNr   c                     | j                   S r   )base_fieldsetsrW   s      r   get_base_fieldsetsz-PolymorphicChildModelAdmin.get_base_fieldsets   s    """r   c                     | j                  ||      }| j                  s| j                  s| j                  st        |   ||      S | j                  ||      }|r|d   | j                  d|iff|dd  z   S |S )Nr   r"      )rg   r&   r"   rf   r   get_fieldsetsget_subclass_fieldsextra_fieldset_title)r   r(   r)   rf   other_fieldsr   s        r   rj   z(PolymorphicChildModelAdmin.get_fieldsets   s    00#> >>T[[0C0C7(#66 //=q!**X|,DE qr"# #
 "!r   c                    t        | j                  xs g       }|j                  | j                  ||             | j	                  |||      }t        |j
                  j                               t        | j                  ||            z   }| j                  ||      D ]K  }|d   d   D ]>  }t        |t              r|D ]  }	 |j                  |        -	 |j                  |       @ M |S # t        $ r Y ;w xY w# t        $ r Y _w xY w)N)excluderi   r"   )listro   extendget_readonly_fieldsr'   base_fieldskeysrg   rP   tupleremove
ValueError)	r   r(   r)   ro   r!   subclass_fieldsfieldsetfield
line_fields	            r   rk   z.PolymorphicChildModelAdmin.get_subclass_fields   s    t||)r*t//=> }}Wc7};t//4467$$$Wc2;
 

 //= 	H!!X. eU+&+ !
!+22:>!'..u5	   * ! ! & s$   C0C?0	C<	;C<	?	D
Dr   )FF N)r   r   r   r   r   r%   rf   _rl   r1   r   r'   r4   propertyrB   rD   rF   rT   rV   rY   r]   r`   rd   rg   rj   rk   __classcell__)r   s   @r   r   r      s    	 J I
 N Z= M@8 	0 
 
$ 
 
$ 
 
$8MP
FO#"&r   r   )r   rL   django.contribr   django.urlsr   django.utils.translationr   r}   polymorphic.utilsr   r   RuntimeErrorr
   
ModelAdminr   r   r   r   <module>r      s>        6 8 /6| 6`!1!1 `r   