Django-admin

admin管理系统介绍:Django自带的

  • 后台管理系统是管理人员使用,不是给客户使用
  • 此应用默认是开启的

INSTALLED_APPS = ['django.contrib.admin']

urlpatterns = [

path('admin/', admin.site.urls),

]

需要有下面几个步骤:同步数据库,建立用户,输入用户名,输入邮箱,输入密码

在django同步数据库的时候会自动创建相关的一些数据库用来储存admin账户,浏览器访问/admin/即可进入后台管理系统

python manager.py makegirations
python manager.py migrate

python manager.py createsuperuser


Username: admin

Email address: admin@example.com

Password: **********
Password (again): *********
Superuser created successfully.

基本使用

默认管理后台,是不会加载应用的APP模型,需要手动配置,步骤如下:

  • 建立模型

  • 增加模型到管理后台

  • 测试使用

    • 浏览器查看效果
python 复制代码
# 创建自己的模型
class Student(models.Model):
  name = models.CharField(max_length=20)
  age = models.IntegerField()


  class Meta:
    db_table='t_student'
python 复制代码
# 在子应用.admin.py文件中注册模型
from django.contrib import admin
from .models import Student


admin.site.register(Student)

之后就可以修改了


修改后台管理的前端显示方式

在字段上设置verbose_name属性标明即可

在模型Meta内部类中设置verbose_name属性即可

重新模型类的__str__方法即可

python 复制代码
class Student(models.Model):
  # 增加 verbose_name
  name = models.CharField(max_length=20, verbose_name='姓名')
  # 增加 help_text
  age = models.IntegerField(help_text='大于18', verbose_name='年龄')

  def __str__(self):
    return f'{self.name}({self.age})'

  # 增加 Meta 类
  class Meta:
      # verbose_name_plural : 复数形式
    verbose_name_plural = verbose_name = '学生'

设置应用名

在子应用下的 apps.py中设置verbose_name属性即可

python 复制代码
class TestAppConfig(AppConfig):
  verbose_name = '子应用名'

关联关系的使用

后台管理系统对于有关联关系的模型,也有着友好的支持

添加方式也很简单,会简单电脑操作即可


自定义管理类admin

python 复制代码
class StudentAdmin(admin.ModelAdmin):
  # 显示的属性列表, 值是 属性名
  list_display = ['name', 'age']
  # 排序的 属性 列表 , 默认是升序,如果需要降序:['-age']
  ordering = ['age']
admin.site.register(Student, StudentAdmin)

装饰器注册类

该装饰器使用的是 admin.register , 不是 admin.site.register

python 复制代码
@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
    
  list_display = ['name', 'age']
  ordering = ['age']

自定义管理类的属性

  • empty_value_display

    • 属性为空时,在网页上显示的内容,默认是: -
  • fields

    • 管理的字段
  • exclude

    • 不管理的字段
  • filter_horizontal

    • 多对多关系,默认是 select多选框,一般使用 filter_horizontal 或者 filter_vertical
python 复制代码
@admin.register(Food)
class FoodAdmin(admin.ModelAdmin):
    list_display = ['name', 'is_main']
    filter_horizontal = ['restaurant']

官方文档查找即可


自定义批量操作

python 复制代码
@admin.register(Waiter)
class WaiterAdmin(admin.ModelAdmin):
    list_display = ['name','induction','restaurant']
    actions = ['add_Waiter']
    # 参数固定不要修改了,可以改,但是必须有三个
    def add_Waiter(modeladmin, request, queryset):
        list = ['小林','大山','小川','小田']
        for name in list:
            queryset.create(name=name)
    add_Waiter.short_description = "批量添加(固定的)"


# 其他写法
'''
# 定义动作函数
def age_add_one(modeladmin, request, queryset):
  queryset.update(age=F('age')+1)
# 给动作函数添加描述
age_add_one.short_description = "年龄增加一岁"


class StudentAdmin(admin.ModelAdmin):
  # 在当前自定义管理类中,添加新的动作:age_add_one
  actions = [age_add_one]


admin.site.register(Student, StudentAdmin)

'''

覆盖原模板

如果我们要在admin管理页面中,增加自己的功能,那么我们需要覆盖admin的默认模板

官网地址:Django 管理站点 | Django 文档 | Django

admin管理模板目录

django库下的 contrib/admin/templates/admin 目录,可以查看django自带的所有模板

可以覆盖的模板

contrib/admin/templates/admin 中的模板并非每个应用程序或每个模型都可以被覆盖。以下情况可以:

  • actions.html
  • app_index.html
  • change_form.html
  • change_form_object_tools.html
  • change_list.html
  • change_list_object_tools.html
  • change_list_results.html
  • date_hierarchy.html
  • delete_confirmation.html
  • object_history.html
  • pagination.html
  • popup_response.html
  • prepopulated_fields_js.html
  • search_form.html
  • submit_line.html

自定义模板

需要修改admin的哪个内置模板,则继承哪个模板,并且在其基础上进行修改,我们以app_index.html为例:

原始模板

html 复制代码
{% extends "admin/index.html" %}
{% load i18n %}


{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %}


{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo;
{% for app in app_list %}
{{ app.name }}
{% endfor %}
</div>
{% endblock %}
{% endif %}


{% block sidebar %}{% endblock %}

自定义编写模板

html 复制代码
{% extends "admin/app_index.html" %}


{% block sidebar %}
  <a href="{% url 'children:customize' %}">自定义功能页面</a>
{% endblock %}

个人感觉没有太大的必要狂看,如果真的需要在重回博客寻找写法,常用点应该是自己写父模板自己继承

相关推荐
景天科技苑2 分钟前
【Golang】Go语言中如何进行包管理
开发语言·后端·golang·go mod·go语言包管理·go包管理·go sum
秦朝胖子得加钱18 分钟前
Flask
后端·python·flask
uzong21 分钟前
JDK高性能套路: 自旋(for(;;)) + CAS
java·后端
幽兰的天空22 分钟前
Python实现的简单时钟
开发语言·python
程序员yt1 小时前
2025秋招八股文--服务器篇
linux·运维·服务器·c++·后端·面试
NCU_AI1 小时前
Python 网络爬虫快速入门
python·网络爬虫
幽兰的天空1 小时前
简单的Python爬虫实例
开发语言·爬虫·python
程序员苏桑1 小时前
从实际项目说代码重构
后端
DeviceArtist1 小时前
我穿越回2013年,拿到一台旧电脑,只为给Android2.3设备写一个时钟程序
后端
机器之心1 小时前
Runway CEO:AI公司的时代已经结束了
人工智能·后端