Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的推荐用途仅限于组织的内部管理工具。它不是用于构建整个前端。

管理员有许多用于自定义的钩子,但要注意尝试专门使用这些钩子。如果您需要提供一个更加以流程为中心的接口来抽象出数据库表和字段的实现细节,那么可能是时候编写自己的视图了。

1 创建Django项目

django-admin startproject crm_v1

2 创建并注册app

python manage.py  startapp  bms

修改settings.py

INSTALLED_APPS = [
'django.contrib.admin',
......
'bms.apps.BmsConfig',
]

3  创建模型 modles.py

在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。

设计哲学

模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。

来介绍一下迁移 - 举个例子,不像 Ruby On Rails,Django 的迁移代码是由你的模型文件自动生成的,它本质上只是个历史记录,Django 可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。

from django.db import models

class Publish(models.Model):
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()
def __str__(self):
return self.name class Author(models.Model):
name = models.CharField(max_length=16)
age = models.IntegerField()
def __str__(self):
return self.name class Book(models.Model):
title = models.CharField(max_length=32)
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE)
pub_date = models.DateField()
price = models.DecimalField(max_digits=6, decimal_places=2)
author = models.ManyToManyField(to="Author")
state = models.IntegerField(choices=[(1, "已出版"), (2, "未出版")], default=1)
def __str__(self):
return self.title

4 数据库操作

为模型的改变生成迁移文件

python manage.py makemigrations 

应用用数据库迁移

python manage.py migrate 

数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。

5 激活管理工具

通常我们在生成项目时会在 urls.py 中自动设置好,

from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),]

6 创建超级用户

python manage.py createsuperuser

7 使用管理工具

启动Django项目

输入url:http://127.0.0.1:8000/admin

即可看到登录页面,输入刚才创建的用户名和密码进行登录

登录成功后可以看到如下页面

admin的定制

1 注册类

在admin.py中只需要将Mode中的某个类注册,即可在Admin中实现增删改查的功能

from django.contrib import admin
from django.contrib import adminfrom bms.models import Book,Publish,Author,AuthorDetail
admin.site.register(Book)
admin.site.register(Publish)
admin.site.register(Author)

以上是注册Book,Publilsh, Author类,在admin中即可看到

2 添加数据

通过点击add分别给author,book ,publish 添加数据

再创建书籍是可以看到一件有了出版社和作者的选择

3 查看book表数据

可以看到只要书籍名称,没有作者、价格、出版社等信息

4 定制列,显示更多的字段信息

需要利用ModelAdmin进行操作

class BookInfo(admin.ModelAdmin):
list_display = ['title', 'price', 'publish']
   # list_displey 中的字段必须是和数据库中有的
admin.site.register(Book, BookInfo)

可以看到已经多了两列信息

5  显示多对多字段----author(作者姓名)

class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
    list_display = ['title', "show_author", 'price', 'publish', 'state']
admin.site.register(Book, BookInfo)

6 list_filter,列表时,定制右侧快速筛选。

class BookInfo(admin.ModelAdmin):

    def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()]) list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author'] # 列表中写筛选的字段 admin.site.register(Book, BookInfo)

7 search_fields 列表,模糊搜索的功能

class BookInfo(admin.ModelAdmin):

    def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()]) list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author']
search_fields = ['author__name', 'price', 'title', 'publish__name']
   # 由于 author是多对的字段,publish是外键,故不能直接写字段名,必须跨表查看
admin.site.register(Book, BookInfo)

8 自定义active

class BookInfo(admin.ModelAdmin):

    def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()]) list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author']
search_fields = ['author__name', 'price', 'title', 'publish__name'] def func(self, request, queryset):
print(self, request, queryset)
print(request.POST.getlist("_selected_action")) def price_to_zero(self, request, queryset):
queryset.update(price=0) # 把选择的价格都设置为0 func.short_description = "自定义action动作"
price_to_zero.short_description = "价格初始化"
# 设置在action下拉菜单中显示的信息
actions = [func, price_to_zero] # 把自定义的两个方法添加到actions中
    # Action选项都是在页面上方显示
actions_on_top = True
# Action选项都是在页面下方显示
actions_on_bottom = False
admin.site.register(Book, BookInfo)

(1)选择刚才定义的action动作

可以看到后台的输出

(2)执行价格初始化动作

结果如下,可以看到价格已经设置为0

9 ordering 列表时,数据排序规则

设置根据id,价格排序,也可反向排序 return ['-title', 'price']

class BookInfo(admin.ModelAdmin):
......
def get_ordering(self, request):
return ['title', 'price']

点击title列或者price列即可进行排序

10 设置admin后台为中文显示

修改settings.py文件

将LANGUAGE_CODE = 'en-us'改为
LANGUAGE_CODE = 'zh-hans'

也可设置表的字段为中文,加上 verbose_name选项即可。

class Book(models.Model):
title = models.CharField(max_length=32,verbose_name="书名")
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE,verbose_name="出版社")
pub_date = models.DateField(verbose_name="出版日期")
price = models.DecimalField(max_digits=6, decimal_places=2,verbose_name="价格")
author = models.ManyToManyField(to="Author",verbose_name="作者")
state = models.IntegerField(choices=[(1, "已出版"), (2, "未出版")], default=1,verbose_name="状态") def __str__(self):
return self.title

效果如下:

SHOW AUTHOR还是英语的,现在来改一下

class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
show_author.short_description = "作者"

short_description 设置字段的描述信息

最终结果如图

其他设置可参考 : https://www.cnblogs.com/yuanchenqi/articles/8323452.html

Django Admin管理入门的更多相关文章

  1. Django admin 管理工具

    admin 组件的使用 Django 提供了基于 web 的管理工具.Django 自动管理工具是 django.contrib 的一部分. INSTALLED_APPS = [ 'django.co ...

  2. Django admin管理

    admin的配置 admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功 ...

  3. Django——admin管理工具

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  4. 吴裕雄--天生自然Django框架开发笔记:Django Admin 管理工具

    Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED_APPS 看到它: ...

  5. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...

  6. django admin管理后台中文添加问题

    django版本号 1.7.8 #create database mydb character set utf8;#django-admin.py startproject mysite#设置sett ...

  7. 10.5Djang admin 管理工具

    2018-10-5 17:30:57 Django admin 管理工具  参考连接: https://www.cnblogs.com/yuanchenqi/articles/8323452.html ...

  8. 01: 重写Django admin

    目录: 1.1 重写Django admin项目各文件作用# 1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册 ...

  9. 你应该使用 Django admin 的 9 个理由(转)

    你应该使用 Django admin 的 9 个理由 “问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制.”—来自 Reddit 的 andybak 我 ...

随机推荐

  1. Java工具类 通过ResultSet对象返回对应的实体List集合

    自从学了JDBC用多了像一下这种代码: List<xxx> list = new Array<xxx>(); if(rs.next()){ xxx x = new xxx(); ...

  2. 【Android学习笔记】Android Studio简单断点调试

    首先点击断点调试按钮运行App 启动之后,会弹出如下图的提示框,不要管,几秒之后这个弹框会自动消失,然后App会成功运行. 下面介绍一下断点调试的相关操作按钮对应的功能: 按钮1的功能:从当前断点跳到 ...

  3. iOS xcode9 framework静态库的创建以及xib和图片的使用记录

    来到了新公司,要开发的第一个项目据说可能要封成framework,可是我从来没自己做过framework呀!顿时开始发愤图强,赶紧恶补了起来.但是还是遇到了一些乱七八糟的情况,所以写个随笔记下来. 1 ...

  4. 微软project文件mpp解析

    最近在做一个项目管理的项目,主要是将用户在project文件中写的一些东西,读出来,并将其写入到数据库中. 也是借鉴了好多大佬的思想和代码,感觉自己需要整理一遍,所以,接下来就是表演的时候了. 第一步 ...

  5. ubuntukylin18.04Lts和deepin15.5与win10 1803双系统安装

    我首先安装的是ubuntu kylin(中文名优麒麟) 1.计算机右键选择管理磁盘,压缩卷设置空闲空间(第7步分区用) 2.重启时fn+f1进入bios设置界面. 3.关闭安全模式和快速启动,将boo ...

  6. 阅读GIC-500 Technical Reference Manual笔记

    GIC-500是ARM GICv3的一个实现,它只支持ARMv8核和实现了GIC Stream协议的GIC CPU Interface,比如Cortex-A53. 关于GIC有四份相关文档:<C ...

  7. Spring Security 源码分析(四):Spring Social实现微信社交登录

    社交登录又称作社会化登录(Social Login),是指网站的用户可以使用腾讯QQ.人人网.开心网.新浪微博.搜狐微博.腾讯微博.淘宝.豆瓣.MSN.Google等社会化媒体账号登录该网站. 前言 ...

  8. javascript知识详解之8张思维导图

    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将po出8张javascript相关的思维导图. 思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又 ...

  9. RabbitMQ (三) 发布/订阅

    转发请标明出处:http://blog.csdn.net/lmj623565791/article/details/37657225 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与 ...

  10. python3 os模块的常用功能及方法总结

    1.os.getcwd()     #显示当前工作路径 2.os.listdir('dirname')    #返回指定目录下的所有文件和目录名 3.os.remove('filename')     ...