3
(h
                 @   s`   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 G dd	 d	ee	jZd
S )    )reverse)router)	Collector)PermissionDenied)generic   )MessageUserMixinc                   sh   e Zd ZdZdZdd Zdd Z fddZ fd	d
Z fddZ	dd Z
 fddZdd Z  ZS )DeleteModelViewz?View for deleting an object and all linked by foreign key data.Nc             C   s$   | j dk	r| j j||S tddS )ztObject delete permission check.

        If view had a `viewset`, the `viewset.has_delete_permission` used.
        NzViewset is not provided)viewsetZhas_delete_permissionNotImplementedError)selfrequestobj r   K/tmp/pip-install-q3hcpn_q/django-material/material/frontend/views/delete.pyhas_object_permission   s    
z%DeleteModelView.has_object_permissionc             C   s&   t tj| jd}|j| jg |jS )N)Zusing)r   r   Zdb_for_writeobjectZcollectdata)r   Z	collectorr   r   r   _get_deleted_objects   s    z$DeleteModelView._get_deleted_objectsc                s"   |j d| j  tt| jf |S )zgExtend view context data.

        `{{ deleted_objects }}` - list of related objects to delete
        Zdeleted_objects)
setdefaultr   superr	   get_context_data)r   kwargs)	__class__r   r   r      s    z DeleteModelView.get_context_datac                s$   t t| j }| j| j|s t|S )zaRetrive the object for delete.

        Check object delete permission at the same time.
        )r   r	   
get_objectr   r   r   )r   r   )r   r   r   r   %   s    zDeleteModelView.get_objectc                s4   | j dkr&| jj}tdj|j|jS tt| j	 S )zARedirect back to the list view if no `success_url` is configured.Nz
{}:{}_list)
Zsuccess_urlmodel_metar   format	app_label
model_namer   r	   get_success_url)r   opts)r   r   r   r    /   s    
zDeleteModelView.get_success_urlc             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, uses::

             [<app_label>/<model_label>_delete.html,
              'material/frontend/views/confirm_delete.html']
        Nz{}/{}{}.htmlz+material/frontend/views/confirm_delete.html)Ztemplate_namer   r   r   r   r   Ztemplate_name_suffix)r   r!   r   r   r   get_template_names6   s
    	
z"DeleteModelView.get_template_namesc                s$   t t| j|f||}| j  |S )N)r   r	   deletemessage_user)r   r   argsr   response)r   r   r   r#   H   s    zDeleteModelView.deletec             C   s   | j d d S )Nz.The {name} "{link}"  was deleted successfully.)success)r   r   r   r   r$   M   s    zDeleteModelView.message_user)__name__
__module____qualname____doc__r
   r   r   r   r   r    r"   r#   r$   __classcell__r   r   )r   r   r	   
   s   	
r	   N)Zdjango.core.urlresolversr   Z	django.dbr   Zdjango.db.models.deletionr   Zdjango.core.exceptionsr   Zdjango.viewsr   Zmixinsr   Z
DeleteViewr	   r   r   r   r   <module>   s   