Django Admin管理入门

摘要:
Django最强大的部分之一是自动管理界面。1创建Django项目Django-adminstartprojectcrm_V12创建并注册apppythonmanage.pystartappbms修改设置。pyINSTALLED_APPS=['django.contrib.admin',…'bms.APPS.Bmsconfig',]3在django中创建数据库驱动的Web应用程序的第一步是定义模型,即数据库结构设计和其他元数据。让我们介绍一下迁移——例如,与RubyOnRails不同,Django的迁移代码是由模型文件自动生成的。它本质上只是一个历史记录。

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

Django Admin管理入门第1张

7 使用管理工具

启动Django项目

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

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

Django Admin管理入门第2张

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

Django Admin管理入门第3张

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中即可看到

Django Admin管理入门第4张

2 添加数据

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

Django Admin管理入门第5张

Django Admin管理入门第6张

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

Django Admin管理入门第7张

3 查看book表数据

Django Admin管理入门第8张

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

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

需要利用ModelAdmin进行操作

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

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

Django Admin管理入门第9张

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)

Django Admin管理入门第10张

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)

Django Admin管理入门第11张

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)

Django Admin管理入门第12张

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动作

Django Admin管理入门第13张

可以看到后台的输出

Django Admin管理入门第14张

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

Django Admin管理入门第15张

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

Django Admin管理入门第16张

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

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

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

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

Django Admin管理入门第17张

10 设置admin后台为中文显示

 修改settings.py文件

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

Django Admin管理入门第18张

也可设置表的字段为中文,加上 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

效果如下:

Django Admin管理入门第19张

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 设置字段的描述信息

最终结果如图

Django Admin管理入门第20张

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

免责声明:文章转载自《Django Admin管理入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Node.js timer的优化故事hdfs command下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

R连接mysql数据库(ODBC)

Warning messages: 1: In odbcDriverConnect("DSN=Rdata;UID=root") : [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 当R语言从数据库取出数据时,出现以上错误,...

SQL server数据库创建代码,filegroup文件组修改,

以下示例在 SQL Server 实例上创建了一个数据库。该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件。ALTER DATABASE 语句将用户定义文件组指定为默认文件组。然后通过指定用户定义文件组来创建表。 USE master; GO -- Create the data...

sqlite入门基础(一):sqlite3_open,sqlite3_exec,slite3_close

打开数据库链接sqlite3_open用法 原型: int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 用这个函数开始数据库操作。需要传入两个参...

Oracle11g备份与恢复

第一部分:手工备份与恢复   备份的意义:保证数据安全,避免因为各种故障而丢失数据     两个时间:平均故障间隔时间(MTBF)平均恢复时间(MTTR) 一、备份恢复概述   数据库故障类型     1.用户进程故障 user process failure  :pmon自动处理     2.实例故障 instance failure : smon自动处...

mongodb启动

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。MongoDB是一款分布式文档数据库,支持类似关型数据库的主从结构,文档以二进制Json形式存储,无锁,无事务,有索引。1. MongoDB的启动与停止 MongoDB的启动之前已经谈过,但是需要注意的MongoDB在启动时有很多可配置的启...

【转】SQL Server用GUID值来完成数据表行标识

    以下的文章主要描述的是SQL Server数据表中使用GUID值来作为行标识,GUID(Global unique identifier)全局唯一标识符,GUID(Global unique identifier)是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。          GU...