在Django管理页面中为每一行放置一个按钮,可以通过自定义模板来实现。以下是一种实现方式:
python manage.py startapp custom_admin
custom_admin
应用的目录下创建一个名为templates
的文件夹,并在其中创建一个名为admin
的子文件夹:custom_admin
├── templates
│ └── admin
admin
文件夹中创建一个名为change_list.html
的模板文件,用于自定义管理页面的列表视图:{% extends "admin/change_list.html" %}
{% block result_list %}
<table id="result_list">
<thead>
<tr>
{% block result_list_header %}
<!-- 添加自定义按钮列 -->
<th scope="col" class="column-action">Action</th>
{{ headers }}
{% endblock %}
</tr>
</thead>
<tbody>
{% block result_list_body %}
{% for result in results %}
<tr class="{% cycle row1,row2 %}">
<!-- 添加自定义按钮 -->
<td class="action-checkbox">
<a href="{% url 'custom_admin:custom_action' result.pk %}">Custom Action</a>
</td>
{{ result }}
</tr>
{% endfor %}
{% endblock %}
</tbody>
</table>
{% endblock %}
custom_admin
应用的urls.py
文件中添加一个URL模式,用于处理自定义按钮的点击事件:from django.urls import path
from . import views
app_name = 'custom_admin'
urlpatterns = [
path('custom_action/<int:pk>/', views.custom_action, name='custom_action'),
]
custom_admin
应用的views.py
文件中定义custom_action
视图函数,用于处理自定义按钮的点击事件:from django.shortcuts import get_object_or_404, redirect
from django.contrib import messages
from django.contrib.admin.views.main import ChangeList
def custom_action(request, pk):
# 根据主键获取对象
obj = get_object_or_404(MyModel, pk=pk)
# 执行自定义操作
# ...
# 添加成功消息
messages.success(request, 'Custom action executed successfully.')
# 重定向回原始的列表页面
return redirect('admin:myapp_mymodel_changelist')
admin.py
文件中,继承ChangeList
类,并指定自定义的模板:from django.contrib import admin
from django.contrib.admin.views.main import ChangeList
from .models import MyModel
class MyModelChangeList(ChangeList):
def get_template(self, request):
return ['admin/myapp/mymodel/change_list.html']
@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return MyModelChangeList
# 其他模型管理选项
# ...
现在,当您访问Django管理页面中的列表视图时,每一行都会显示一个名为"Custom Action"的按钮。当点击该按钮时,将执行custom_action
视图函数中定义的自定义操作,并显示成功消息。
领取专属 10元无门槛券
手把手带您无忧上云