Python 如何自定义 Django Admin 管理后台,展示数据库数据

Python 如何自定义 Django Admin 管理后台,展示数据库数据

Django 是一个功能强大的 Python Web 框架,帮助开发者快速构建高效、安全的网站或应用程序。Django 提供了丰富的功能,其中 Django Admin 管理后台是最受欢迎的功能之一。它让开发者能够快速地管理网站的数据库,免去了手动编写管理界面的繁琐工作。但有时候,我们需要根据项目的需求,定制这个后台界面。本篇文章将带你了解如何在 Django 中自定义 Admin 管理后台,并展示数据库中的数据。

在这里插入图片描述

什么是 Django Admin?

Django Admin 是 Django 框架自带的一个强大工具,用来自动生成管理网站数据的界面。通过它,开发者可以方便地对数据库表(即模型 Model)进行增删改查操作。默认情况下,Django Admin 会为你创建一个基础的用户界面,允许你查看、编辑和删除数据库中的数据。但在实际项目中,往往需要对这个后台界面进行自定义,以满足具体的需求。

准备工作

在开始之前,确保你已经完成了以下准备工作:

  1. 安装了 Python 和 Django。如果还没有安装,可以使用以下命令来安装 Django:

    pip install django
    
  2. 创建了一个 Django 项目。如果还没有创建项目,可以使用以下命令:

    django-admin startproject myproject
    
  3. 在项目中创建一个应用(app)。可以使用以下命令来创建应用:

    python manage.py startapp myapp
    
  4. 配置数据库。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 包含了产品名称、价格、描述、库存数量以及产品是否有货等字段。定义完模型后,别忘了运行数据库迁移命令,将模型应用到数据库中:

扫描二维码关注公众号,回复: 17580748 查看本文章
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 来管理数据库中的数据。

继续深入学习,你还可以探究更复杂的自定义需求,比如通过插件扩展功能、优化界面设计,甚至为用户提供图表和统计分析等高级功能。