当前位置: 首页 > article >正文

Djiang 5实用指南(八)后台管理系统

Django 自带了一个强大的后台管理系统,用于管理网站中的数据和模型。通过 Django 后台管理系统,开发者可以轻松地对模型数据进行增、删、改、查等操作,而无需编写大量的管理界面代码。Django5 继续优化并增强了后台管理功能,使得管理系统更加灵活和易用。

本章将详细介绍如何定制和扩展 Django5 的后台管理系统,包括如何配置模型管理、定制后台界面、使用内联表单和自定义管理命令等。

8.1 基础的后台管理配置

Django 的后台管理系统基于模型(Model)。为了在后台管理界面中管理模型数据,我们需要为每个模型定义一个 ModelAdmin 类,并在 admin.py 文件中注册该模型。

8.1.1 注册模型到后台管理系统

首先,定义一个模型并将其注册到 Django 的后台管理系统:

# models.py
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)

    author = models.CharField(max_length=100)

    publish_date = models.DateField()

    price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.title

然后,在 admin.py 文件中注册该模型,使其出现在后台管理界面:

# admin.py
from django.contrib import admin
from .models import Book

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):

    list_display = ('title', 'author', 'publish_date', 'price')
  • @admin.register(Book):这是装饰器,告诉 Django 将 Book 模型注册到后台管理系统。
  • list_display:指定在后台管理界面中显示的字段。它会显示模型中的哪些字段。
8.1.2 后台管理界面功能

Django 的后台管理界面为我们提供了许多内置功能,如排序、过滤和搜索。

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'publish_date', 'price')

    search_fields = ('title', 'author')  # 搜索字段

    list_filter = ('publish_date',)  # 过滤器

    ordering = ('publish_date',)  # 默认排序
  • search_fields:定义后台管理系统可以搜索的字段。
  • list_filter:在后台界面中添加过滤器。
  • ordering:设置后台显示数据的默认排序。

8.2 定制后台管理界面

Django 的后台管理系统提供了高度可定制的功能,可以定制模型显示、字段编辑、表单等。

8.2.1 修改模型表单

有时候,模型的字段需要通过定制表单来修改显示或验证。我们可以通过自定义表单类来定制后台界面的字段。

# forms.py
from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:

        model = Book

        fields = ['title', 'author', 'publish_date', 'price']

        widgets = {
            'publish_date': forms.SelectDateWidget(years=range(1990, 2025)),
        }


# admin.py
from django.contrib import admin
from .models import Book
from .forms import BookForm

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):

    form = BookForm  # 使用自定义表单
  • widgets:我们在 BookForm 中为 publish_date 字段定制了一个日期选择小部件(SelectDateWidget)。
  • form:在 BookAdmin 中使用 form 属性来指定使用自定义表单类。
8.2.2 自定义字段的显示

我们可以通过重写 ModelAdmin 的 get_form 方法来自定义字段的显示顺序和显示方式。

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'publish_date', 'price')

    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)

        # 自定义字段的顺序
        form.base_fields['title'].widget.attrs.update({'class': 'custom-class'})

        return form

在 get_form 中,我们可以通过修改表单字段的 widget 属性来定制字段的显示。

8.3 使用内联表单

内联表单允许在同一个页面上管理相关模型的多个实例。例如,我们可以将图书与其评论模型关联,允许在图书管理界面内嵌评论表单。

8.3.1 创建内联模型

首先,定义评论模型并创建关联:

# models.py
class Comment(models.Model):
    book = models.ForeignKey(Book, related_name='comments', on_delete=models.CASCADE)

    text = models.TextField()

    created_at = models.DateTimeField(auto_now_add=True)

然后,创建一个内联模型类,将评论嵌套在图书模型下:

# admin.py
from django.contrib import admin
from .models import Book, Comment

class CommentInline(admin.TabularInline):
    model = Comment

    extra = 1  # 默认显示一个空白表单

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'publish_date', 'price')

    inlines = [CommentInline]  # 添加评论内联表单
  • CommentInline:admin.TabularInline 表示我们希望以表格形式显示内联表单,extra 表示默认显示的空表单数量。
8.3.2 配置内联表单

可以进一步定制内联表单的字段和样式。例如,可以通过 fields 来指定内联表单显示的字段。

class CommentInline(admin.TabularInline):
    model = Comment

    fields = ('text', 'created_at')

    extra = 1

8.4 自定义管理命令

Django 后台系统不仅支持模型的管理,还可以自定义命令来执行后台任务。Django 提供了 django.core.management.BaseCommand 类用于创建自定义管理命令。

8.4.1 创建自定义管理命令
# management/commands/cleanup_books.py
from django.core.management.base import BaseCommand
from myapp.models import Book

class Command(BaseCommand):
    help = 'Cleanup old books'

    def handle(self, *args, **kwargs):
        books = Book.objects.filter(publish_date__lt='2000-01-01')

        books.delete()

        self.stdout.write(self.style.SUCCESS('Successfully deleted old books'))

在这个命令中,我们删除了所有出版日期早于 2000 年的书籍。

8.4.2 使用自定义管理命令

在终端中运行以下命令:

python manage.py cleanup_books

这会执行自定义的 cleanup_books 命令,删除数据库中所有早于 2000 年出版的书籍。

小结

本章介绍了 Django5 后台管理系统的核心功能,包括如何注册和定制模型管理界面、使用内联表单以及创建自定义管理命令。通过强大的后台管理系统,Django 极大地简化了模型数据的管理过程,开发者可以通过少量的配置和定制,快速创建出符合需求的后台管理系统。

使用 Django 后台管理系统的关键是理解 ModelAdmin 类的各项配置项,以及如何定制表单、显示、内联和命令等功能。掌握这些技巧,可以大大提升后台管理系统的灵活性和可维护性。


http://www.kler.cn/a/566822.html

相关文章:

  • JSON-to-Excel v2.0.0发布,可以在Excel内部,把JSON转换成Excel格式,嵌套的JSON也能转
  • 5个GitHub热点开源项目!!
  • 【初阶数据结构】链表的柔光之美
  • 主流 AI 芯片配置
  • STM32之时钟树
  • Doris、ClickHouse 和 Flink 这三个技术典型的应用场景
  • 关于Hadoop集群部署打不开webUI界面问题
  • 软件安全性测试类型分享,第三方软件测试机构如何进行安全性测试?
  • 小智聊天机器人应用层头文件application.h解析
  • Django+Vue+数据可视化的网络考试与测评系统(程序+论文+讲解+安装+调试+售后)
  • DeepSeek系列 清华大学-AIGC发展研究3.0版 pdf完整版(附下载)
  • c# 代码规范
  • 【机器学习】K近邻#1基于Scikit-Learn的K近邻分类
  • AWS SDK for Java 1.x 403问题解决方法和原因
  • ngx_conf_file_t
  • 在PyCharm中集成AI编程助手并嵌入本地部署的DeepSeek-R1模型:打造智能开发新体验
  • 使用java jdk生成自定义SSL证书-CA免费证书
  • onlyoffice 服务搭建及配置 - 前端 office 文件预览解决方案
  • AIoT是什么?关键技术及应用
  • Python 数据结构 1.零基础复习