详解Django admin高级用法

yizhihongxing

详解Django admin高级用法

Django admin是Django自带的管理员后台管理系统,可以方便地进行数据库管理,数据展示,数据处理等功能。本文将详细讲解如何使用Django admin的高级用法。

1. 自定义管理器

在Django admin中,如果希望对某个Model进行管理时,需要先创建一个管理器类,例如:

from django.contrib import admin
from .models import Author

class AuthorAdmin(admin.ModelAdmin):
    pass

admin.site.register(Author, AuthorAdmin)

这里创建了一个AuthorAdmin类,继承了admin.ModelAdmin类,并将Author和AuthorAdmin进行了注册,这样我们就可以在Django admin中管理Author的数据了。

但是,有时候我们可能需要对数据进行一些特殊处理,比如只让管理员看到某个字段,只有某些用户才有权限对某个Model进行管理等操作。这时候就需要自定义管理器了。

1.1 隐藏字段

有时候某个Model中有敏感数据,不希望普通管理员看到,可以通过自定义管理器隐藏掉该字段:

class AuthorAdmin(admin.ModelAdmin):
    exclude = ('email',)

这样管理员在Django admin中就看不到email字段了。

1.2 只读字段

有时候某个Model中有重要数据,只允许查看,不允许修改,可以通过自定义管理器将该字段设置为只读:

class AuthorAdmin(admin.ModelAdmin):
    readonly_fields = ('name',)

这样管理员在Django admin中可以看到name字段,但是不能修改。

1.3 重写默认查询方法

如果默认的查询方法无法满足我们的需求,可以通过自定义管理器重写查询方法。例如,我们希望只显示未删除的数据:

class AuthorAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(AuthorAdmin, self).get_queryset(request)
        qs = qs.filter(is_deleted=False)
        return qs

这样在Django admin中就只会显示is_deleted为False的数据了。

2. 自定义Django admin页面

Django admin默认使用Bootstrap样式,但是有时候我们可能需要自定义页面样式,比如加入自己的CSS或JS文件。这时候就需要自定义Django admin页面了。

2.1 添加静态文件

首先我们需要在Django的静态文件目录中创建一个文件夹,用来存放我们需要的CSS或JS文件, 例如新建一个名为'admin_custom'的文件夹。然后我们需要在Django项目中找到settings.py文件,并且离线添加以下代码:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'admin_custom')
]

这里我们将新建的'admin_custom'文件夹添加到静态文件目录中。

2.2 自定义页面模板

接下来我们需要自定义页面模板,在'appname/templates/admin'目录下,新建一个名为'appname/change_form.html'的文件,这个文件可以作为管理员对某个Model记录进行更改时的模板。在这个模板中,我们可以引入之前添加的CSS或JS文件:

{% extends "admin/change_form.html" %}
{% block extrahead %}
    {{ block.super }}
    <link rel="stylesheet" type="text/css" href="{% static 'admin_custom/admin.css' %}">
{% endblock %}

这里的'admin_custom/admin.css'是我们在admin_custom文件夹中新建的CSS文件,可以使用该文件自定义Django admin中的样式。

2.3 自定义页面元素

最后,我们可以通过自定义页面元素来替换Django admin默认的元素,例如隐藏Django admin中默认的某些按钮:

{% extends "admin/change_form.html" %}
{% block submit_buttons_bottom %}
{% endblock %}

这里通过重写submit_buttons_bottom块,将Django admin中的提交按钮隐藏了。

示例说明

示例1:在Django admin中添加自定义页面

假设我们需要在Django admin中添加一个自定义的页面,用于展示系统的性能状况,包括CPU使用率、内存使用率等数据。

首先,我们需要创建一个Model,用于存储这些数据。然后创建一个自定义的管理器,重写默认的查询方法,使其只显示最近一笔数据。最后我们创建一个自定义的页面模板,在其中引用自己编写的CSS文件和JS文件,用于展示数据。

示例2:自定义Django admin的页面元素

假设我们需要自定义Django admin中的Model表单页面,去掉一些权限不足的用户不需要的字段。我们可以通过自定义管理器,使用exclude来隐藏某些字段;使用readonly_fields来设置只读字段;或者重写默认的查询方法,只查询该用户有权限查看的数据。

然后我们可以自定义页面元素,例如隐藏某些按钮,以实现更好的用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django admin高级用法 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django框架学习:二十五.django xadmin管理后台

    前面学习了django自带的admin后台管理感觉页面不美观,网上的大神优化了一版后台管理xadmin,并且开源了,在github开源下载到源码。 django 2.1.2 xadmin 2.0 python 3.6 xadmin安装 xadmin在github的源码地址https://github.com/sshwsfc/xadmin,可以用pip安装也可…

    2023年4月10日
    00
  • 浅谈Python之Django(三)

    首先需要阐述的是,“浅谈Python之Django(三)”是一篇介绍Django框架的文章,偏重于对Django的基础概念和应用的讲解。这篇文章主要分为以下几个部分: 1. Django介绍 这部分主要是对Django框架进行简单介绍,涵盖了Django的功能特点、适用场景、优势和缺点等信息。 2. Django入门 这部分主要是讲解如何在本地环境下搭建Dj…

    Django 2023年5月16日
    00
  • Django Blog开发v1.0

    版本:1.0 版本说明: 1) 大部分来源于http://www.cnblogs.com/cacique/archive/2012/09/29/2707976.html 2) 自己测试用,使用svn比较方便   以下详细步骤 1. create foldermysite2 2. cmd to  mysite2django-admin.py startproj…

    Django 2023年4月13日
    00
  • django中实现websocket

        随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。  我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进…

    Django 2023年4月10日
    00
  • django 静态资源配置

    最近在学习一个项目,django框架,但当 render 模板时,模板里有引入的图片就访问不到, 这是因为 django部署方式比较特别,采用静态文件路径:STATICFILES_DIRS的部署方式,之前你写的相对路径,绝对路径因为缺少静态文件路径而全部失效 解决办法: 步骤1:在settings.py文件的最后加上以下内容: STATIC_URL = ‘/…

    Django 2023年4月11日
    00
  • Django Rest framework FilterSet 设置 help_text

    问题描述: 在model中设置了help_text后,但并没有在drf的doc中显示 解决方法: 重载filter_for_field方法然后将help_text加到extra中 例: class UserFilter(rest_framework.FilterSet): class Meta: model = User fields = ‘__all__’…

    Django 2023年4月13日
    00
  • Django使用celery异步发邮件

    Celery是Python开发的分布式任务调度模块,包含以下组件: Celery Beat: 任务调度器,自带的 Celery Worker: 执行任务的消费者,通常设置多个 Broker: 消息代理,就是任务队列,我们使用redis Producer: 任务生产者,要执行的函数加上@app.task Result Backend: 结果保存,还是redis…

    Django 2023年4月11日
    00
  • Django的用户模块与权限系统的示例代码

    下面是Django的用户模块与权限系统的示例代码的完整攻略。 一、用户模块示例代码 用户模块是Django中的一个常用组件,它可以轻松实现用户的注册、登录、密码找回等功能。下面是一个简单的用户模块示例代码: 1. 创建用户模型 首先,在项目的models.py文件中创建一个用户模型: from django.db import models from dja…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部