欢迎访问宙启技术站
智能推送

Django.contrib.admin.sites的列表页定制教程

发布时间:2024-01-11 16:10:36

django.contrib.admin.sites 模块提供了 Django 后台管理站点的功能。它允许你自定义管理站点的外观和行为,包括列表页的定制。本教程主要介绍如何定制 Django 管理站点的列表页,并提供使用例子。

## 简介

Django 管理站点的列表页用于显示模型的记录列表,提供了搜索、过滤、排序和分页等功能。你可以根据自己的需求对列表页进行定制,如添加自定义的字段、过滤选项或动作。

## 步骤

要定制 Django 管理站点的列表页,你需要进行以下步骤:

1. 创建一个继承自 admin.ModelAdmin 的自定义模型管理类。

2. 指定要显示的字段列表。

3. 注册自定义模型管理类。

下面是一个示例模型和管理类,用于演示如何定制列表页:

from django.contrib import admin
from .models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    list_display = ['field1', 'field2', 'field3']
    list_filter = ['field1']
    search_fields = ['field1', 'field2', 'field3']

admin.site.register(MyModel, MyModelAdmin)

这个示例中定义了一个名为 MyModel 的模型,并创建了一个名为 MyModelAdmin 的自定义模型管理类。list_display 属性指定了要在列表页显示的字段列表,list_filter 属性指定了要在列表页显示的过滤选项,search_fields 属性指定了要在列表页启用搜索的字段列表。

## 使用例子

下面是一个更具体的例子,展示如何在列表页上添加一个自定义的字段和一个自定义的动作。

首先,我们定义一个名为 CustomModel 的模型,它有两个字段:namedescription

from django.db import models

class CustomModel(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

    def __str__(self):
        return self.name

接下来,我们创建一个名为 CustomModelAdmin 的自定义模型管理类,并通过重写 get_queryset 方法来添加一个自定义字段。

from django.contrib import admin
from .models import CustomModel

class CustomModelAdmin(admin.ModelAdmin):
    list_display = ['name', 'description', 'custom_field']
    search_fields = ['name']

    def custom_field(self, obj):
        return obj.description[:50] + '...' if len(obj.description) > 50 else obj.description
    custom_field.short_description = 'Custom Field'

admin.site.register(CustomModel, CustomModelAdmin)

CustomModelAdmin 中,我们添加了 list_display 属性来指定要在列表页显示的字段列表,包括之前定义的自定义字段 custom_field。我们还通过重写 custom_field 方法来定义自定义字段的内容,该字段将显示模型的描述字段的前 50 个字符。short_description 属性用于指定自定义字段在列表页上的显示名称。

除此之外,我们还可以通过在 CustomModelAdmin 类中定义一个自定义的动作来增加一个自定义的操作。

from django.contrib import admin
from .models import CustomModel

class CustomModelAdmin(admin.ModelAdmin):
    list_display = ['name', 'description', 'custom_field']
    search_fields = ['name']
    actions = ['custom_action']

    def custom_field(self, obj):
        return obj.description[:50] + '...' if len(obj.description) > 50 else obj.description
    custom_field.short_description = 'Custom Field'

    def custom_action(self, request, queryset):
        # 实际执行的自定义操作
        for obj in queryset:
            # 对每个选中的对象执行操作
            pass
    custom_action.short_description = 'Custom Action'

admin.site.register(CustomModel, CustomModelAdmin)

custom_action 方法中,我们可以执行一些自定义的操作,例如修改选中对象的某些属性值、执行一些计算操作等。

至此,我们已经完成了列表页的定制。在 Django 管理站点中,你将看到定制后的列表页,并且可以使用自定义的字段和自定义的动作。

总结:

本教程介绍了如何使用 django.contrib.admin.sites 模块定制 Django 管理站点的列表页,并提供了一个使用例子。希望通过这个教程,你能够了解如何使用列表页的定制功能来满足你的需求。