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

Django项目怎么自定义admin站点

发布时间:2023-05-18 00:08:58

Django框架自带的admin站点是一个很方便的管理后台,但是有时候我们需要自定义一些功能或者调整一些界面效果。本文将介绍如何自定义Django admin站点。

1. 修改显示字段

首先,我们可以通过重写model的__str__方法来修改对象在admin中被展示的样式。

from django.contrib.auth.models import User
from django.contrib import admin

class UserAdmin(admin.ModelAdmin):
    list_display = ['email', 'first_name', 'last_name', 'is_staff',]
    list_filter = ['is_staff']
    search_fields = ['email', 'first_name', 'last_name']
    
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

上述代码将User模型中的email、first_name、last_name和is_staff这4个字段在admin站点中显示。list_filter选项的作用是在右边导航栏添加过滤器,当有大量数据需要过滤时非常实用。search_fields选项的作用是在上方添加搜索框。

2. 自定义表单

我们可以调整表单组件的大小、颜色、显示顺序等。下面是一个例子:

class MyModelAdmin(admin.ModelAdmin):
    fieldsets = (
        ('个人信息', {
            'fields': ('name', 'age', 'sex')
        }),
        ('更多信息', {
            'classes': ('collapse',),
            'fields': ('email', 'mobile',)
        })
    )
    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'size': '30'})},
    }
    list_display = ['name', 'email', 'age', 'sex', 'mobile']
    list_filter = ['sex']
    search_fields = ['name', 'email', 'mobile']

admin.site.register(MyModel, MyModelAdmin)

上述代码的fieldsets选项用于更改表单的布局。collapse选项将“更多信息”分组隐藏,并在用户点击后展示。formfield_overrides选项用于更改表单组件的样式。这里我们使用了TextInput来调整CharField组件的大小。

3. 自定义actions

在admin站点中,我们可以为model添加actions来批量编辑、删除等操作。Django框架提供了很多自带的actions,但我们也可以自定义我们想要的操作。例如:

class MyModelAdmin(admin.ModelAdmin):
    actions = ['mark_as_done']
    def mark_as_done(self, request, queryset):
        queryset.update(status='done')
    mark_as_done.short_description = "标记为完成"

admin.site.register(MyModel, MyModelAdmin)

上述代码将我们自定义的mark_as_done操作添加到了MyModelAdmin的actions中。该操作会把对象的status字段更新为“done”。

4. 自定义模板

在admin站点中,我们可以自定义模板来更改界面的外观。例如:

├── myapp
│   ├── admin
│   │   └── mymodel
│   │       └── change_form.html

上述代码将会创建mymodel模块的自定义模板。我们可以在change_form.html中更改模板的HTML、CSS及JavaScript等内容来达到我们想要的效果。

综上所述,Django框架的admin站点提供了很多自定义选项,我们可以根据需求选择适当的方式进行调整。