Django Admin站点管理(七)

一、管理界面本地化

1.1在settings.py中设置语言和时区

#(3)配置时区和语言 ,修改成中文
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

 1.2 创建超级管理员

  创建管理员的命令如下,按提示输入用户名、邮箱、密码。

  在终端输入: python manage.py createsuperuser

Django Admin站点管理(七)_第1张图片

用户名与密码:admin/123456

1.3 打开浏览器:http://127.0.0.1:8000/admin/   输入用户名和密码

Django Admin站点管理(七)_第2张图片

Django Admin站点管理(七)_第3张图片

二、注册模型类

     登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。

2.1 打开books/admin.py文件,编写如下代码:

from django.contrib import admin

from .models import BookInfo, CustomerInfo

# Register your models here.
'''
1.导入模型类
2.注册模型类
'''

admin.site.register(BookInfo)

admin.site.register(CustomerInfo)

Django Admin站点管理(七)_第4张图片

2.2 访问:http://127.0.0.1:8000/admin/

Django Admin站点管理(七)_第5张图片

Django Admin站点管理(七)_第6张图片

Django Admin站点管理(七)_第7张图片

2.3 调整站点信息

打开books/admin.py文件,编写如下代码:


#网页列标题
admin.site.site_header='我的书城'
#网页标题
admin.site.site_title='我的书城MIS'
#首页标语
admin.site.index_title='欢迎使用我的书城'

Django Admin站点管理(七)_第8张图片

2.4 定义与使用Admin管理类 

打开books/admin.py文件,编写如下代码:

from django.contrib import admin

from .models import BookInfo, CustomerInfo
'''
  使用两种管理方式:
'''
#(2) 装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
   pass

#(1)自定义模型类
class BookInfoAdmin(admin.ModelAdmin):
     pass

# (1)注册参数 
admin.site.register(BookInfo, BookInfoAdmin)

# 必须注释掉,使用上面的装饰器
# admin.site.register(CustomerInfo)

三、自定义Admin管理类

3.1  页大小

打开books/admin.py文件,编写如下代码:

# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
    list_per_page = 2  #前2页
    pass
#使用注册自定义的模型类
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(CustomerInfo)

访问http://127.0.0.1:8000/admin/,简单的分页

Django Admin站点管理(七)_第9张图片

3.2 "操作选项"的位置

底部有个动作:

# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
    list_per_page = 2  #前2页
    actions_on_top = True  #顶部显示
    actions_on_bottom = True  #底部显示
    pass

Django Admin站点管理(七)_第10张图片

3.3 列表中的列

# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
    #显示模型类中的字段
    list_display = ['name','pub_date','read_count','comment_count','is_del']

Django Admin站点管理(七)_第11张图片

3.4 将方法作为列

在books/model.py下图书写代码

#1.图书表
class BookInfo(models.Model):
 ####计算总数量################
    def sum_count(self):
        return self.read_count+self.comment_count
    sum_count.short_description='总量'  #设置方法中的字段在admin
    ################################

注意:sum_count的名字必须与上面的方法名相同哦!

Django Admin站点管理(七)_第12张图片

3.5关联对象

 无法直接访问关联对象的属性或方法,可以在模型类中封装方法,访问关联对象的成员。

#装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
    #显示模型类中的字段
    list_display = ['name','gender','detail','book','is_del']
    pass

Django Admin站点管理(七)_第13张图片

在books/model.py下人物写代码:

#2.人物表
class CustomerInfo(models.Model):
   #显示人物的图书阅读量###
    def read(self):
       #self.外键.主表字段
       return self.book.read_count
    read.short_description='图书阅读量'
   #######################

 在books/admin.py下人物写代码:Django Admin站点管理(七)_第14张图片

Django Admin站点管理(七)_第15张图片

3.6 右侧栏过滤器

打开books/admin.py文件,修改CustomerInfoAdmin类如下:

#装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
    #显示模型类中的字段
    list_display = ['name','gender','detail','book','read','is_del']
    #过滤书,名称
    list_filter = ['book','name']
    pass

Django Admin站点管理(七)_第16张图片

3.7 搜索框

用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。

# 装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
    # 搜索名称
    search_fields = ['name']

Django Admin站点管理(七)_第17张图片

Django Admin站点管理(七)_第18张图片 

3.8调整编辑页展示-显示部分字段

打开books/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):

    # 指定显示字段
    # fields = ['name','pub_date']

Django Admin站点管理(七)_第19张图片

3.9 分组显示

```

fieldset=(

    ('组1标题',{'fields':['字段1','字段2']}),

    ('组2标题',['fields':('字段3','字段4'],

    'classes': ('collapse',)  # 是否折叠显示}),

)

```

打开books/admin.py文件,修改BookInfoAdmin类如下:

class BookInfoAdmin(admin.ModelAdmin):

    # 指定显示字段
    # fields = ['name','pub_date']

    # 分组显示
    fieldset = (
        ('基本', {'fields': ['name', 'pub_date']}),  
        ('高级', {'fields': ['read_count', 'comment_count'],
                'classes': ('collapse',)  # 是否折叠显示

                }),
    )

Django Admin站点管理(七)_第20张图片

3.10 关联对象

在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。

- 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。

- 子类TabularInline:以表格的形式嵌入。

- 子类StackedInline:以块的形式嵌入。

   1) 以块的形式嵌入

     1.打开books/admin.py文件,创建CustomerInfoStackInline类。

# 子类-块的形式
class CustomerInfoStackInLine(admin.StackedInline):
    model = CustomerInfo  # 编辑的对象
    extra = 1  # 附加编辑的数量

      2.打开books/admin.py文件,修改BookInfoAdmin类如下:  

# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
    # 添加子类 (必须在之前写哦!)
    inlines = [CustomerInfoStackInLine]

Django Admin站点管理(七)_第21张图片

2.表格的形式嵌入。

打开books/admin.py文件,创建CustomerInfoTabularInline类。

# 子类-表格的形式
class CustomerInfoTabularInline(admin.TabularInline):
    model = CustomerInfo  # 编辑的对象
    extra = 1  # 附加编辑的数量

 打开books/admin.py文件,修改BookInfoAdmin类如下:

# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
    # 添加子类 (必须在之前写哦!)
    inlines = [CustomerInfoTabularInline]

Django Admin站点管理(七)_第22张图片

3.11 上传图片

Django有提供文件系统支持,在Admin站点中可以轻松上传图片。

使用Admin站点保存图片,需要安装Python的图片操作包 pip install Pillow

默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径。

(1)  我们可以将上传的文件保存在静态文件目录中,如我们之前设置的static目录中在settings.py 文件中添加如下上传保存目录信息,会自己新建static/ ​


MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")

Django Admin站点管理(七)_第23张图片

 (2) 为模型类添加ImageField字段

我们为之前的BookInfo模型类添加一个ImageFiled

```python

class BookInfo(models.Model):

    image=models.ImageField(verbose_name='图片',upload_to='book',null=True)

```

- upload_to 选项指明该字段的图片保存在MEDIA_ROOT目录中的哪个子目录

 (3) 进行数据库迁移操作

```python

python manage.py makemigrations

python manage.py migrate

```

Django Admin站点管理(七)_第24张图片

(4) 添加image字段进行显示

```python

class BookInfoAdmin(admin.ModelAdmin):

    ....

    fieldsets = (

        ('基本', {'fields': ['name', 'pub_date', "image"]}),  #添加image

        ('高级', {

            'fields': ['read_count', 'comment_count'],

            'classes': ('collapse',)  # 是否折叠显示

        })

    )

  inlines = [CustomerInfoTabularInline]

    ....

Django Admin站点管理(七)_第25张图片

使用Admin站点上传图片

    进入Admin站点的图书管理页面,选择一个图书,能发现多出来一个上传图片的字段

选择一张图片并保存后,图片会被保存在**static/media/子应用名/**目录下。

Django Admin站点管理(七)_第26张图片

在数据库中,我们能看到image字段被设置为图片的路径

Django Admin站点管理(七)_第27张图片

Django Admin站点管理(七)_第28张图片

你可能感兴趣的:(Django)