Django 删除视图
创建 Django DeleteView 类
DjangoDeleteView类允许您定义基于类的视图,该视图显示确认页面并删除现有对象。
如果 HTTP 请求方法是GET,DeleteView视图将显示确认页面。但是,如果请求是POST,DeleteView视图将删除该对象。
要使用该类DeleteView,您需要定义一个从它继承的类并添加属性和方法来覆盖默认行为。
例如,下面定义了一个删除Todo 应用TaskDelete程序任务的类:
#...
from django.views.generic.edit import DeleteView, CreateView, UpdateView
from django.contrib import messages
from django.urls import reverse_lazy
from .models import Task
class TaskDelete(DeleteView):
    model = Task
    context_object_name = 'task'
    success_url = reverse_lazy('tasks')
    
    def form_valid(self, form):
        messages.success(self.request, "The task was deleted successfully.")
        return super(TaskDelete,self).form_valid(form)
#...在此示例中,我们定义了TaskDelete作为DeleteView类的子类的类。该类TaskDelete具有以下属性:
- model- Task指定将被删除的模型 ( ) 的类。
- context_object_name指定将传递给模板的对象名称。默认情况下,该类- DeleteView使用- object作为名称。但是,您可以使用属性覆盖名称- context_object_name。
- success_url是成功删除对象后将重定向到的 URL。
- form_valid()成功删除对象后调用方法。在这个例子中,我们创建了一个 flash 消息。
默认情况下,如果您未明确指定,该类DeleteView将使用模板。task_confirmation_delete.html
创建 task_confirm_delete.html 模板
使用以下代码在应用程序中创建一个新的文件task_confirm_delete.html模板:templates/todo
{%extends 'base.html'%}
{%block content%}
<div class="center">
	<form method="post" class="card">
		{% csrf_token %}
		<h2>Delete Task</h2>
		<p>Are you sure that you want to delete "{{task}}"?</p>
		<p class="form-buttons">
			<input type="submit" class="btn btn-primary" value="Delete">
			<a href="{% url 'tasks'%}" class="btn btn-outline">Cancel</a>
		</p>
	</form>
</div>
{%endblock content%}扩展task_confirm_delete.html模板base.html并包含一个用于删除任务的表单。
定义路线
在 中定义一个新路由,该路由映射一个 URL,该 URL 使用视图类的方法urls.py的结果删除任务:as_view()TaskDelete
from django.urls import path
from .views import (
    home, 
    TaskList, 
    TaskDetail, 
    TaskCreate, 
    TaskUpdate,
    TaskDelete
)
urlpatterns = [
    path('', home, name='home'),
    path('tasks/', TaskList.as_view(),name='tasks'),
    path('task/<int:pk>/', TaskDetail.as_view(),name='task'),
    path('task/create/', TaskCreate.as_view(),name='task-create'),
    path('task/update/<int:pk>/', TaskUpdate.as_view(),name='task-update'),
    path('task/delete/<int:pk>/', TaskDelete.as_view(),name='task-delete'),
]包括删除任务的链接
修改task_list.html模板,为任务列表中的每个任务添加一个删除任务的链接:
{%extends 'base.html'%}
{%block content%}
<div class="center">
	<h2>My Todo List</h2>
	{% if tasks %}
	<ul class="tasks">
		{% for task in tasks %}
			<li><a href="{% url 'task' task.id %}" class="{% if task.completed%}completed{%endif%}">{{ task.title }}</a> 
				 <div  class="task-controls">
				 	<a href="{%url 'task-delete' task.id %}"><i class="bi bi-trash"></i> </a>
					<a href="{%url 'task-update' task.id %}"><i class="bi bi-pencil-square"></i></a>
		         </div>
		    </li>
		{% endfor %}
	{% else %}
		<p>🎉 Yay, you have no pending tasks! <a href="{%url 'task-create'%}">Create Task</a></p>
	{% endif %}
	</ul>
</div>
{%endblock content%}
如果您单击删除按钮删除列表中的任务,您将看到以下删除确认页面:
 
单击删除按钮将从数据库中删除任务并将其重定向回任务列表:
 
您可以在此处下载此Django DeleteView 教程的最终代码。
概括
- 使用 DjangoDeleteView类定义删除现有对象的基于类的视图。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号