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 类的各项配置项,以及怎样定制表单、显示、内联和命令等功能。把握这些技巧,可以大大提升后台管理系统的灵活性和可维护性。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |