如何重写 def delete_model(self, request, obj): 可以让删除键变为一个叉,并且做到一点叉就可以删除
时间: 2024-03-29 16:40:02 浏览: 114
要重写 `def delete_model(self, request, obj):` 方法以实现自定义删除功能,您可以按照以下步骤操作:
1. 在模型的admin.py文件中,定义StaffInfoAdmin类并重写 `delete_model` 方法:
```
from django.contrib import admin
from .models import StaffInfo
class StaffInfoAdmin(admin.ModelAdmin):
# ...
def delete_model(self, request, obj):
# 从数据库中删除模型实例
obj.delete()
```
2. 在模板中将删除链接替换为删除图标,您可以使用Font Awesome或其他图标库中的图标:
```
{% extends 'base.html' %}
{% block content %}
<h1>Staff Info</h1>
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% for staff in staff_list %}
<tr>
<td>{{ staff.first_name }}</td>
<td>{{ staff.last_name }}</td>
<td>{{ staff.email }}</td>
<td><a href="#" onclick="deleteStaffInfo({{ staff.id }})"><i class="fa fa-times"></i></a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block scripts %}
<script>
function deleteStaffInfo(id) {
if (confirm('Are you sure you want to delete this staff info?')) {
// 发送删除请求
fetch(`/staffinfo/${id}/delete/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': '{{ csrf_token }}',
},
body: JSON.stringify({}),
})
.then(response => {
if (response.ok) {
// 删除成功,刷新页面
window.location.reload();
}
});
}
}
</script>
{% endblock %}
```
在上面的模板代码中,我们将删除链接替换为一个带有 "fa fa-times" CSS类的Font Awesome图标。我们还添加了一个JavaScript函数 deleteStaffInfo,该函数将在用户单击删除图标时调用。
3. 在JavaScript函数 deleteStaffInfo 中,我们使用 fetch API 发送一个POST请求来删除StaffInfo实例。在发送请求之前,我们先弹出一个确认对话框,以确保用户确实想要删除该条目。
4. 最后,在StaffInfoAdmin类中,我们重写了 `delete_model` 方法来删除模型实例。我们不需要在模板中添加任何其他代码,因为我们已经使用JavaScript函数来处理删除操作。
请注意,为了使删除操作正常工作,您需要确保在模型的urls.py中包含与删除操作对应的URL。具体来说,您需要添加一个类似于以下代码的URL模式:
```
from django.urls import path
from .views import StaffInfoDeleteView
urlpatterns = [
# ...
path('<int:pk>/delete/', StaffInfoDeleteView.as_view(), name='staffinfo-delete'),
]
```
在上面的代码中,我们定义了一个名为 "staffinfo-delete" 的URL模式,该模式将一个整数参数传递给StaffInfoDeleteView视图。这个视图将处理删除操作并返回一个JSON响应。
阅读全文