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 %}

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

相关推荐
点云SLAM1 小时前
PyTorch 中.backward() 详解使用
人工智能·pytorch·python·深度学习·算法·机器学习·机器人
B1118521Y461 小时前
flask的使用
后端·python·flask
Learn Beyond Limits2 小时前
Transfer Learning|迁移学习
人工智能·python·深度学习·神经网络·机器学习·ai·吴恩达
xuxie132 小时前
SpringBoot文件下载(多文件以zip形式,单文件格式不变)
java·spring boot·后端
重生成为编程大王3 小时前
Java中的多态有什么用?
java·后端
love530love4 小时前
【保姆级教程】阿里 Wan2.1-T2V-14B 模型本地部署全流程:从环境配置到视频生成(附避坑指南)
人工智能·windows·python·开源·大模型·github·音视频
Funcy4 小时前
XxlJob 源码分析03:执行器启动流程
后端
He1955014 小时前
Go初级之十:错误处理与程序健壮性
开发语言·python·golang
和鲸社区5 小时前
《斯坦福CS336》作业1开源,从0手搓大模型|代码复现+免环境配置
人工智能·python·深度学习·计算机视觉·语言模型·自然语言处理·nlp
豌豆花下猫5 小时前
Python 潮流周刊#118:Python 异步为何不够流行?(摘要)
后端·python·ai