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

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

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

本章将具体介绍怎样定制和扩展 Django5 的后台管理系统,包罗怎样配置模型管理、定制后台界面、使用内联表单和自界说管理命令等。

8.1 底子的后台管理配置

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

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

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

  1. # models.py
  2. from django.db import models
  3. class Book(models.Model):
  4.     title = models.CharField(max_length=200)
  5.     author = models.CharField(max_length=100)
  6.     publish_date = models.DateField()
  7.     price = models.DecimalField(max_digits=5, decimal_places=2)
  8.     def __str__(self):
  9.         return self.title
复制代码
然后,在 admin.py 文件中注册该模型,使其出如今后台管理界面:

  1. # admin.py
  2. from django.contrib import admin
  3. from .models import Book
  4. @admin.register(Book)
  5. class BookAdmin(admin.ModelAdmin):
  6.     list_display = ('title', 'author', 'publish_date', 'price')
复制代码


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

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

  1. @admin.register(Book)
  2. class BookAdmin(admin.ModelAdmin):
  3.     list_display = ('title', 'author', 'publish_date', 'price')
  4.     search_fields = ('title', 'author')  # 搜索字段
  5.     list_filter = ('publish_date',)  # 过滤器
  6.     ordering = ('publish_date',)  # 默认排序
复制代码


  • search_fields:界说后台管理系统可以搜刮的字段。
  • list_filter:在后台界面中添加过滤器。
  • ordering:设置后台显示数据的默认排序。
8.2 定制后台管理界面

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

8.2.1 修改模型表单

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

  1. # forms.py
  2. from django import forms
  3. from .models import Book
  4. class BookForm(forms.ModelForm):
  5.     class Meta:
  6.         model = Book
  7.         fields = ['title', 'author', 'publish_date', 'price']
  8.         widgets = {
  9.             'publish_date': forms.SelectDateWidget(years=range(1990, 2025)),
  10.         }
  11. # admin.py
  12. from django.contrib import admin
  13. from .models import Book
  14. from .forms import BookForm
  15. @admin.register(Book)
  16. class BookAdmin(admin.ModelAdmin):
  17.     form = BookForm  # 使用自定义表单
复制代码


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

我们可以通过重写 ModelAdmin 的 get_form 方法来自界说字段的显示次序和显示方式。

  1. @admin.register(Book)
  2. class BookAdmin(admin.ModelAdmin):
  3.     list_display = ('title', 'author', 'publish_date', 'price')
  4.     def get_form(self, request, obj=None, **kwargs):
  5.         form = super().get_form(request, obj, **kwargs)
  6.         # 自定义字段的顺序
  7.         form.base_fields['title'].widget.attrs.update({'class': 'custom-class'})
  8.         return form
复制代码
在 get_form 中,我们可以通过修改表单字段的 widget 属性来定制字段的显示。

8.3 使用内联表单

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

8.3.1 创建内联模型

首先,界说批评模型并创建关联:

  1. # models.py
  2. class Comment(models.Model):
  3.     book = models.ForeignKey(Book, related_name='comments', on_delete=models.CASCADE)
  4.     text = models.TextField()
  5.     created_at = models.DateTimeField(auto_now_add=True)
复制代码
然后,创建一个内联模型类,将批评嵌套在图书模型下:

  1. # admin.py
  2. from django.contrib import admin
  3. from .models import Book, Comment
  4. class CommentInline(admin.TabularInline):
  5.     model = Comment
  6.     extra = 1  # 默认显示一个空白表单
  7. @admin.register(Book)
  8. class BookAdmin(admin.ModelAdmin):
  9.     list_display = ('title', 'author', 'publish_date', 'price')
  10.     inlines = [CommentInline]  # 添加评论内联表单
复制代码


  • CommentInline:admin.TabularInline 表示我们盼望以表格情势显示内联表单,extra 表示默认显示的空表单数目。
8.3.2 配置内联表单

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

  1. class CommentInline(admin.TabularInline):
  2.     model = Comment
  3.     fields = ('text', 'created_at')
  4.     extra = 1
复制代码
8.4 自界说管理命令

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

8.4.1 创建自界说管理命令

  1. # management/commands/cleanup_books.py
  2. from django.core.management.base import BaseCommand
  3. from myapp.models import Book
  4. class Command(BaseCommand):
  5.     help = 'Cleanup old books'
  6.     def handle(self, *args, **kwargs):
  7.         books = Book.objects.filter(publish_date__lt='2000-01-01')
  8.         books.delete()
  9.         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 类的各项配置项,以及怎样定制表单、显示、内联和命令等功能。把握这些技巧,可以大大提升后台管理系统的灵活性和可维护性。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表