Python 如何自定义 Django Admin 管理后台,展示数据库数据
Django 是一个功能强大的 Python Web 框架,帮助开发者快速构建高效、安全的网站或应用程序。Django 提供了丰富的功能,其中 Django Admin 管理后台是最受欢迎的功能之一。它让开发者能够快速地管理网站的数据库,免去了手动编写管理界面的繁琐工作。但有时候,我们需要根据项目的需求,定制这个后台界面。本篇文章将带你了解如何在 Django 中自定义 Admin 管理后台,并展示数据库中的数据。
什么是 Django Admin?
Django Admin 是 Django 框架自带的一个强大工具,用来自动生成管理网站数据的界面。通过它,开发者可以方便地对数据库表(即模型 Model)进行增删改查操作。默认情况下,Django Admin 会为你创建一个基础的用户界面,允许你查看、编辑和删除数据库中的数据。但在实际项目中,往往需要对这个后台界面进行自定义,以满足具体的需求。
准备工作
在开始之前,确保你已经完成了以下准备工作:
-
安装了 Python 和 Django。如果还没有安装,可以使用以下命令来安装 Django:
pip install django
-
创建了一个 Django 项目。如果还没有创建项目,可以使用以下命令:
django-admin startproject myproject
-
在项目中创建一个应用(app)。可以使用以下命令来创建应用:
python manage.py startapp myapp
-
配置数据库。Django 默认使用 SQLite 数据库,你可以在
settings.py
中配置其他数据库类型,例如 PostgreSQL、MySQL 等。
Django Admin 的基本设置
Django Admin 默认是自动启用的,但你需要将应用(app)注册到 admin.py
文件中,以便管理对应的数据库模型。假设我们有一个简单的模型 Product
,用于存储产品信息。我们首先定义这个模型,并将其注册到 Django Admin。
1. 定义模型
在应用的 models.py
文件中定义模型 Product
:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100) # 产品名称
price = models.DecimalField(max_digits=10, decimal_places=2) # 产品价格
description = models.TextField(blank=True) # 产品描述
stock = models.IntegerField() # 库存数量
available = models.BooleanField(default=True) # 是否有货
def __str__(self):
return self.name
该模型 Product
包含了产品名称、价格、描述、库存数量以及产品是否有货等字段。定义完模型后,别忘了运行数据库迁移命令,将模型应用到数据库中:

python manage.py makemigrations
python manage.py migrate
2. 注册模型到 Django Admin
在应用的 admin.py
文件中,我们需要将 Product
模型注册到 Admin 管理后台:
from django.contrib import admin
from .models import Product
admin.site.register(Product)
现在,如果你运行开发服务器并登录到 Django Admin,你将能够看到 Product
模型,且可以进行数据的增删改查操作:
python manage.py runserver
访问 http://127.0.0.1:8000/admin/
,并使用你创建的超级用户(python manage.py createsuperuser
)登录后,可以在界面中看到 Product
的数据表。
自定义 Django Admin
Django Admin 提供了基本的管理功能,但默认界面和功能有时不能满足项目需求。接下来我们将讲解如何定制 Django Admin 的展示界面和功能。
1. 自定义模型的展示列表
默认情况下,Admin 后台只显示模型的字符串表示(即 __str__()
方法返回的内容)。我们可以自定义在后台展示的字段。例如,我们希望在 Product
的后台列表中展示产品名称、价格和库存数量,而不是默认的名称。可以通过自定义 ProductAdmin
来实现。
修改 admin.py
文件,添加 ProductAdmin
类:
from django.contrib import admin
from .models import Product
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'price', 'stock', 'available') # 自定义显示的列
admin.site.register(Product, ProductAdmin)
这样,当你刷新 Django Admin 后台页面时,Product
模型的列表中将显示产品名称、价格、库存数量以及是否有货。
2. 添加搜索功能
Django Admin 提供了强大的搜索功能,允许你根据指定字段来搜索数据。假设我们希望根据产品名称和描述进行搜索,可以通过在 ProductAdmin
中添加 search_fields
来实现。
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'price', 'stock', 'available')
search_fields = ('name', 'description') # 添加搜索功能
现在你会在后台看到一个搜索框,输入关键字后,可以根据产品名称和描述进行搜索。
3. 添加过滤器
过滤器可以让你根据某些字段快速筛选数据。Django 提供了内置的过滤器功能,我们可以通过 list_filter
来实现。例如,我们希望根据产品是否有货来筛选产品。
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'price', 'stock', 'available')
search_fields = ('name', 'description')
list_filter = ('available',) # 添加过滤功能
添加 list_filter
后,页面右侧会出现过滤器,用户可以快速筛选出有货或无货的产品。
4. 自定义表单
有时候,我们需要对数据的输入界面进行定制。例如,我们希望 description
字段使用更大的文本框来输入。可以通过在 ProductAdmin
中自定义表单界面来实现。
from django import forms
class ProductForm(forms.ModelForm):
class Meta:
model = Product
fields = '__all__'
widgets = {
'description': forms.Textarea(attrs={
'rows': 3, 'cols': 40}),
}
class ProductAdmin(admin.ModelAdmin):
form = ProductForm
list_display = ('name', 'price', 'stock', 'available')
search_fields = ('name', 'description')
list_filter = ('available',)
这样,我们就自定义了 description
字段的输入框,使用了更大的文本区域来输入描述信息。
5. 批量操作
Django Admin 支持批量操作,例如批量删除数据。我们可以进一步扩展,添加自定义的批量操作。例如,我们希望批量将选中的产品标记为无货。
def make_unavailable(modeladmin, request, queryset):
queryset.update(available=False) # 将选中的产品标记为无货
make_unavailable.short_description = "标记为无货"
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'price', 'stock', 'available')
search_fields = ('name', 'description')
list_filter = ('available',)
actions = [make_unavailable] # 添加自定义批量操作
添加自定义操作后,用户可以选择多个产品,并通过批量操作将其标记为无货。
高级自定义功能
除了上面介绍的基本自定义功能,Django Admin 还允许进行更高级的定制。例如:
- 内联编辑(Inline Editing):允许在一个页面中编辑相关的多个模型数据。例如,一个订单模型可以包含多个产品明细,我们可以在订单的编辑页面中内联编辑产品明细。
- 自定义权限:通过自定义权限系统,控制哪些用户可以访问或编辑哪些数据。
- 更复杂的验证和数据处理:通过重写
save_model
方法,可以在保存数据之前执行复杂的逻辑验证。
小结
Django Admin 是一个非常强大的工具,极大地减少了开发者构建管理后台的工作量。通过自定义 Django Admin,我们可以根据项目需求灵活定制管理界面,展示和处理数据库数据。本篇文章介绍了从基础的模型注册到高级的批量操作、表单自定义等功能,帮助你掌握自定义 Django Admin 的基本技巧。希望通过这些内容,你可以更好地理解和使用 Django Admin 来管理数据库中的数据。
继续深入学习,你还可以探究更复杂的自定义需求,比如通过插件扩展功能、优化界面设计,甚至为用户提供图表和统计分析等高级功能。