📅  最后修改于: 2023-12-03 15:23:32.240000             🧑  作者: Mango
在 Django Admin 中,我们可以轻松地创建一个模型实例管理界面。但是,有些时候,我们可能想添加一些自定义按钮来扩展 Django Admin 的功能。在本文中,我们将介绍如何在字段中自定义 Django Admin 编辑模型按钮。
在开始本教程之前,你应该已经了解模型管理器、模型和 Django Admin 路由器的概念。如果你还没有接触过这些内容,建议先学习它们。
假设我们要管理一个名为 Person
的模型,我们可以在 models.py
中创建它:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
要在 Django Admin 中添加自定义编辑按钮,我们需要在 admin.py
中注册该模型,并定义一个自定义 ModelAdmin
类。在该类中,我们可以使用 list_display
属性添加我们想要显示的字段,并使用 list_editable
属性添加我们想要编辑的字段。
但是,在本教程中,我们将详细介绍如何在字段中自定义按钮。我们可以使用 django.urls.reverse
来创建自定义 URL,并在每个字段中添加一个自定义按钮。
首先,在 admin.py
中导入 reverse
函数和 HttpResponseRedirect
类:
from django.urls import reverse
from django.http import HttpResponseRedirect
接下来,我们需要定义一个带有 request
参数的自定义方法。在该方法中,我们可以获取当前模型实例的 ID 和字段值,并使用 reverse
函数创建自定义 URL。最后,我们使用 HttpResponseRedirect
类重定向到自定义 URL。
def custom_edit(obj):
url = reverse('admin:custom_edit', args=[obj.id, obj.age])
return '<a href="%s">Edit</a>' % url
custom_edit.short_description = 'Custom Edit'
在以上示例中,我们定义了一个名为 custom_edit
的方法,它接收一个参数 obj
,表示当前模型实例。我们使用 reverse
函数创建一个名为 admin:custom_edit
的自定义 URL,其中 obj.id
表示当前模型实例的 ID,obj.age
表示当前模型实例的年龄值。最后,我们使用 <a>
标签将链接包装起来,并返回一个字符串。
接下来,我们需要将 custom_edit
方法添加到 list_display
属性中。我们可以使用 short_description
属性为自定义按钮添加一个短描述。
class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'age', custom_edit',)
# ...
最后,我们需要为自定义 URL 添加一个视图函数。我们可以在 urls.py
文件中定义一个 URL,并指定它所属的视图函数:
from django.urls import path
from .views import custom_edit_view
urlpatterns = [
path('custom_edit/<int:pk>/<int:age>/', custom_edit_view, name='custom_edit'),
# ...
]
在以上示例中,我们定义了一个名为 custom_edit_view
的视图函数,并指定它所属的 URL 为 custom_edit/<int:pk>/<int:age>/
。其中,<int:pk>
表示模型实例的 ID,<int:age>
表示模型实例的年龄值。
最后,在 views.py
文件中定义 custom_edit_view
视图函数:
from django.shortcuts import render
def custom_edit_view(request, pk, age):
# 获取模型实例
person = Person.objects.get(pk=pk)
# 更新模型
person.age = age * 2
person.save()
# 重定向到模型管理器页面
return HttpResponseRedirect(reverse('admin:myapp_person_changelist'))
在以上示例中,我们获取模型实例、更新模型、保存模型,并使用 reverse
函数重定向到模型管理器页面。
我们已经成功地添加了一个自定义编辑按钮。当我们单击按钮时,将打开一个自定义 URL,它将获取模型实例的 ID 和字段值,并更新模型。最后,它将重定向到模型管理器页面。
在本文中,我们介绍了如何在字段中自定义 Django Admin 编辑模型按钮。我们使用 django.urls.reverse
函数创建自定义 URL,并在每个字段中添加一个自定义按钮。最后,我们为自定义 URL 添加一个视图函数,并完成模型的更新操作。