Django-admin后台管理

#准备工作

创建用户名与密码

python manage.py createsuperuser

为APP注册到后台

#admin.py
from django.contrib import admin
from book import models #导入ORM模型
# Register your models here.

admin.site.register(models.Book)

搜索admin文件

INSTALLED_APPS设置中添加了django.contrib.admin后,Django将自动在每个应用中搜索admin模块并导入它。也就是说,通常我们在每个app下都有一个admin.py文件,将当前app和admin有关的内容写到内部的admin.py文件中就可以了,Django会自动搜索并应用它们


#Admin自定义

from django.contrib import admin
from .models import Book


# 创建一个BookAdmin的子类
class BookAdmin(admin.ModelAdmin):
    list_display = ('name',) #添加展示字段
    list_filter = ('name',) #添加过滤器列表
# 注册的时候,将原模型和BookAdmin耦合起来
admin.site.register(Book,BookAdmin)

ModelAdmin.actions_selection_counter

是否在actions下拉框右侧显示选中的对象的数量,默认为True,可改为False

ModelAdmin.date_hierarchy

根据指定的日期相关的字段,为页面创建一个时间导航栏,可通过日期过滤对象

ModelAdmin.exclude

不显示指定的某些字段

#models.py
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    title = models.CharField(max_length=3)
    birth_date = models.DateField(blank=True, null=True)

#admin.py
from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
#注意了,值是个元组!一个元素的时候,最后的逗号不能省略
    fields = ('name', 'title') #等同于  exclude = ('birth_date',)

ModelAdmin.fields

顺序,显示指定的字段。与exclude相对

小技巧,你可以通过组合元组的方式,让某些字段在同一行内显示,例如下面的做法“url”和“title”将在一行内,而“content”则在下一行

class FlatPageAdmin(admin.ModelAdmin):
    fields = (('url', 'title'), 'content')

ModelAdmin.fieldsets

根据字段对页面进行分组显示或布局了。fieldsets是一个二元元组的列表。每个二元元组代表一个<fieldset>,是整个form的一部分

  • classes一个包含额外的CSS类的元组
    • collaspe 将fieldsets折叠起来
    • wide 让它具备更宽的水平空间
from django.contrib import admin
from .models import Book


# 创建一个BookAdmin的子类
class BookAdmin(admin.ModelAdmin):
    list_display = ('name',)
    list_filter = ('name',)
    # date_hierarchy = 'pub_date'
    fieldsets = (
        ('文章内容',{'fields':['author']}
         ),
        ('高级板块',{'fields':['name'],'classes':('collapse',)})
    )
# 注册的时候,将原模型和BookAdmin耦合起来
admin.site.register(Book,BookAdmin)

ModelAdmin.list_filter

设置list_filter属性后,可以激活修改列表页面的右侧边栏,用于对列表元素进行过滤

# 创建一个BookAdmin的子类
class BookAdmin(admin.ModelAdmin):
    list_filter = ('name',)

ModelAdmin.search_fields

设置这个属性,可以为admin的修改列表页面添加一个搜索框.

被搜索的字段可以是CharField或者TextField文本类型,也可以通过双下划线进行ForeignKey或者ManyToManyField的查询

search_fields = ['name']

ModelAdmin.filter_horizontal

水平扩展多对多字段。默认情况下,ManyTOManyField在admin的页面中会显示为一个select框。在需要选择大量对象时,这会有点困难。将ManyTOManyField添加到这个属性列表里后,页面就会对字段进行扩展,并提供过滤功能

filter_horizontal = ('tags',)

####

list_per_page

每页展示多少数据

autocomplete_fields =[‘字段’]

自动补全。只能放外键

radio_fields = {‘字段’,admin.VERTICAL}

下拉框变Radio 水平排列

#list_display

指定显示在修改页面上的字段。这是一个很常用也是最重要的技巧

class BookAdmin(admin.ModelAdmin):
    list_display = ('name','author','id')

如果你不设置这个属性,admin站点将只显示一列,内容是每个对象的__str__()

list_display中,你可以设置四种值

  • 模型的 字段名
  • 一个 函数,接受一个模型实例作为参数
  • 一个表示ModelAdmin的某个属性的字符串
  • 一个表示模型的某个属性的字符串

如何引用CSS样式

#Models.py
from django.db import models
from django.utils.html import format_html

class Book(models.Model):、
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, null=False)
    author = models.CharField(max_length=255, null=False)

    def showStr(self):
        return format_html('<span style="color:blue">Good</>')

#Admin.py
class BookAdmin(admin.ModelAdmin):
    list_display = ('name','author','id','showStr')

自定义表的名称

class Book(models.Model):
    ...
    class Meta:
        verbose_name_plural='书籍'

  转载请注明: linis Django-admin后台管理

 上一篇
Django-邮件系统 Django-邮件系统
准备工作 host user pass smtp.qq.com 3335215292@qq.com 授权码 syw....vthtk.... smtplib库发送邮件 import smtplib from email.mime
2019-04-18
下一篇 
Django-数据库 Django-数据库
数据库驱动常见MySQL驱动介绍: MySQL-python:也就是MySQLdb。是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2。但是只支持Python2,目前还不支持Python3 mysqlcl
2019-04-16
  目录