3
(h[                 @   sF   d dl mZ d dlmZ d dlmZ d dlmZ G dd dejZ	dS )    )reverse)PermissionDenied)models)genericc                   sX   e Zd ZdZdZdd Zdd Zdd Zd	d
 Z fddZ	 fddZ
dd Z  ZS )DetailModelViewz'Think wrapper for `generic.DetailView`.Nc             c   s   x~| j jjD ]p}t|tjr qn|jr*qndj|j }t	| j |rTt
| j | }qt
| j |j }|dk	r|jj |fV  qW dS )zpList of object fields to display.

        Choice fields values are exapanded to readable choice label.
        zget_{}_displayN)object_metafields
isinstancer   Z	AutoFieldZauto_createdformatZget_attnamehasattrgetattrZverbose_nametitle)selffieldZchoice_display_attrvalue r   K/tmp/pip-install-q3hcpn_q/django-material/material/frontend/views/detail.pyget_object_data   s    zDetailModelView.get_object_datac             C   s$   | j dk	r| j j||S tddS )zpObject view permission check.

        If view had a `viewset`, the `viewset.has_view_permission` used.
        NzViewset is not provided)viewsethas_view_permissionNotImplementedError)r   requestobjr   r   r   r       s    
z#DetailModelView.has_view_permissionc             C   s$   | j dk	r| j j||S tddS )zObject chane permission check.

        If view had a `viewset`, the `viewset.has_change_permission` used.

        If true, view will show `Change` link to the Change view.
        NzViewset is not provided)r   has_change_permissionr   )r   r   r   r   r   r   r   )   s    
z%DetailModelView.has_change_permissionc             C   s$   | j dk	r| j j||S tddS )zkObject delete permission check.

        If true, view will show `Delete` link to the Delete view.
        NzViewset is not provided)r   has_delete_permissionr   )r   r   r   r   r   r   r   4   s    
z%DetailModelView.has_delete_permissionc                s$   t t| j }| j| j|s t|S )zTRetrive the object.

        Check object view permission at the same time.
        )superr   
get_objectr   r   r   )r   r   )	__class__r   r   r   =   s    zDetailModelView.get_objectc                s   | j j}| j |d< | j| j| jrFtdj|j|j	| jj
gd|d< | j| j| jrxtdj|j|j	| jj
gd|d< tt| jf |S )zAdditional context data for detail view.

        :keyword object_data: List of fields and values of the object
        :keyword change_url: Link to the change view
        :keyword delete_url: Link to the delete view
        Zobject_dataz{}:{}_change)argsZ
change_urlz{}:{}_deleteZ
delete_url)modelr   r   r   r   r   r   r   	app_label
model_namepkr   r   r   get_context_data)r   kwargsopts)r   r   r   r$   G   s    z DetailModelView.get_context_datac             C   s2   | j dkr*| jj}dj|j|j| jdgS | j gS )z
        List of templates for the view.

        If no `self.template_name` defined, returns::

             [<app_label>/<model_label>_detail.html
              'material/frontend/views/detail.html']
        Nz{}/{}{}.htmlz#material/frontend/views/detail.html)Ztemplate_namer    r   r   r!   r"   Ztemplate_name_suffix)r   r&   r   r   r   get_template_names\   s    	
z"DetailModelView.get_template_names)__name__
__module____qualname____doc__r   r   r   r   r   r   r$   r'   __classcell__r   r   )r   r   r      s   		
r   N)
Zdjango.core.urlresolversr   Zdjango.core.exceptionsr   Z	django.dbr   Zdjango.viewsr   Z
DetailViewr   r   r   r   r   <module>   s   