26 自定义 Django 管理界面

26 自定义 Django 管理界面

在 Django 中,admin 界面是非常重要的一个部分,它使得数据管理变得非常简单。然而,Django 的默认管理界面可能并不能完全满足我们的需求。因此,本文将介绍如何自定义 Django 管理界面,以适应不同的项目需求。

创建自定义管理类

首先,我们需要为我们的模型创建一个自定义管理类。假设我们有一个 Book 模型,结构如下:

1
2
3
4
5
6
7
8
9
from django.db import models

class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):
return self.title

接下来,我们为 Book 模型创建一个自定义管理类:

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from .models import Book

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at') # 显示的字段
search_fields = ('title', 'author') # 搜索功能
list_filter = ('author',) # 过滤器

admin.site.register(Book, BookAdmin)

解释代码

  • list_display 用于指定在列表页中显示的字段,titleauthorcreated_at 将在管理界面中显示。
  • search_fields 让管理界面中的搜索框支持通过书名和作者进行搜索。
  • list_filter 提供了一个过滤器,用户可以按作者进行过滤。

自定义表单

在某些情况下,我们可能需要自定义管理界面中的表单。可以使用 ModelForm 进行自定义。例如,我们要在 Book 的创建/edit 页面中添加一个自定义的字段。

1
2
3
4
5
6
7
8
9
10
11
12
from django import forms

class BookForm(forms.ModelForm):
class Meta:
model = Book
fields = ['title', 'author']

def clean_title(self):
title = self.cleaned_data.get('title')
if not title:
raise forms.ValidationError("这本书的标题不能为空!")
return title

然后在 BookAdmin 中使用这个表单:

1
2
3
4
5
6
7
class BookAdmin(admin.ModelAdmin):
form = BookForm
list_display = ('title', 'author', 'created_at')
search_fields = ('title', 'author')
list_filter = ('author',)

admin.site.register(Book, BookAdmin)

自定义管理界面模板

如果需要对 Django admin 的界面进行进一步的自定义,可以重写模板。比如我们想在 Book 模型的管理页中加入一些自定义信息,首先在 app 的 templates/admin 目录中创建一个文件:

1
2
3
4
5
6
myapp/
templates/
admin/
myapp/
book/
change_form.html

change_form.html 中,我们可以添加一些自定义 HTML 代码,比如:

1
2
3
4
5
6
{% extends "admin/change_form.html" %}

{% block content %}
<h1>欢迎来到书籍管理页面</h1>
{{ block.super }} {# 保留默认内容 #}
{% endblock %}

这个自定义模板将展示一个欢迎消息。

自定义动作

Django admin 还支持自定义批量操作。我们可以定义一些动作,让用户在管理界面上对选中的条目执行特定操作。下面是如何实现一个简单的删除动作的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'created_at')
search_fields = ('title', 'author')
list_filter = ('author',)

actions = ['mark_as_deleted']

def mark_as_deleted(self, request, queryset):
queryset.update(status='deleted') # 假设 Book 模型有一个状态字段
self.message_user(request, "选中的书籍已标记为删除!")

mark_as_deleted.short_description = "标记为已删除"

admin.site.register(Book, BookAdmin)

解释代码

  • actions 列表定义了我们可以在管理界面上执行的操作。
  • mark_as_deleted 是自定义的操作,用于将选中的书籍状态更新为删除,并显示信息。
  • short_description 用于设置在管理操作下拉框中显示的文本。

结论

通过以上方法,我们可以轻松自定义 Django 的管理界面,以满足不同的需求。在实际开发中,灵活运用这些技巧将大大提高管理效率。希望本教程能帮助你更好地掌控 Django 的 admin 界面!

26 自定义 Django 管理界面

https://zglg.work/django/26/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议