前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django3.2边学边记—Adimn站点管理

Django3.2边学边记—Adimn站点管理

原创
作者头像
用户1503405
修改2021-09-27 10:29:59
1.3K0
修改2021-09-27 10:29:59
举报
文章被收录于专栏:棒棒小飞人

准备工作

创建管理员的用户名和密码: 

1

python manage.py createsuperuser

  根据提示创建用户名 密码

在admin.py中注册模型类

1234567

from django.contrib import adminfrom models import Test class TestAdmin(admin.ModleAdmin):    pass admin.site.register(Test,TestAdmin)

浏览器端登录页面:类似以下后缀

1

http://127.0.0.1:8000/admin/


管理页面显示

创建模型管理类来管理某个模型在后台显示的页面形式

ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式

上文中展示了TestAdmin类的一种注册方法,还有一种方法,就是使用装饰器注册,如下:

123

@admin.register(Test)class TestAdmin(admin.ModelAdmin):    pass

页大小

每页中显示多少条数据,默认为每页显示100条数据,设置为20

12

class TestAdmin(admin.ModelAdmin):    list_per_page = 20

操作选项的位置

  由action_on_bottom 和action_on_top两属性来控制 默认显示在顶部,默认值分别为:False 和 True,改为只显示在底部:

1234

class TestAdmin(admin.ModelAdmin):    list_per_page = 20    actions_on_bottom = True    actions_on_top = False

显示哪些列 

用   list_display=[模型字段1,模型字段2,模型方法1,...] 控制显示的列,Django 会尝试按照这个顺序解释 list_display 的每个元素:

  • 一个模型的字段。
  • 一个可调用对象。
  • 一个代表 ModelAdmin 属性的字符串。
  • 一个代表模型属性的字符串。

用模型属性显示 模型的id title pub_date 三个属性

123

class TestAdmin(admin.ModelAdmin):    ...    list_display = ['id','title','pub_date']

  或者模型方法,要求方法有返回值,如下在模型类中定义一个方法 

1234

class TestInfo(models.Model):    ...    def atitle(self):        return self.title

按以上方法显示的列是不能排序的,如果让这个方法显示的列也能排序,就给atitle方法的.admin_order_field属性,指定排序依据的模型属性,如下:

1234567

# from django.db import models# from django.contrib import adminclass TestInfo(models.Model):    ...    def atitle(self):        return self.title    atitle.admin_order_field = 'title' #注意有引号

列标题

默认为方法的名称,

  可以通过.short_description属性设置

123

class TestInfo(models.Model):    ...    atitle.short_description='标题'

  如果是更改模型字段显示的列标题,可以在定义模型字段时,设置verbose_name的值 ,或者封装成方法,再对方法使用上面那个属性,模型字段不能直接使用那个属性。  

12

class Test(models.Model):    title = models.CharField(max_length=20,verbose_name='标题')

如果一个字段的值是 None,一个空字符串,或者一个没有元素的可迭代字段,Django 将显示 - (破折号)。

  你可以用empty_value_display 属性更改

123

from django.contrib import admin  ...  atitle.empty_value_display = '(None)'

  或者管理类中设置属性

12

class PersonAdmin(admin.ModelAdmin):    empty_value_display = 'unknown'

以上通过指定方法属性来控制显示是新老版本通用的,在Django3.2可以通过给装饰器传参来解决:

  在model.py中:

1234567891011121314151617

from django.db import modelsfrom django.contrib import admin class Test(models.Model):    ....         """    empty_value:属性值为空时 处理    description:显示名    ordering:排序依据    boolean:返回值为bool型    其中:    empty_value 和 boolean 只能设置一个(互斥)    """    @admin.display(empty_value='空', description='父级地名', ordering='id',boolean=True)    def title2(self):        return self.title

  或者在admin.py中:

123456789101112

from XXX import Testfrom django.contrib import admin class TestAdmin(admin.ModelAdmin):    ....          @admin.display(empty_value='空', description='父级地名', ordering='id',boolean=True)    def title2(self,obj): #注意这里obj 随便一个变量名就行,与在模型中定义多了这个参数         return obj.title    admin.site.register(Test, TestAdmin)

过滤器

用 list_filter 来激活管理更改列表页面右侧侧栏的过滤器,如下截图所示:

list_filter 应是一个列表或元组,参数字段可以是模型字段,包括外键字段(注意list_display是不能直接接收外键字段的),会将对应字段的值列出来,一般用于快速过滤有重复值的字段。更多参数类型:ModelAdmin.list_filter

12

class TestAdmin(admin.ModelAdmin):    list_filter = ['is_delete']

搜索框

用 search_fields,在管理启用搜索框。 

12

class TestAdmin(admin.ModelAdmin):    search_fields = ['id','name']

在搜索框中进行搜索时,Django 会将搜索查询拆分成多个词,并返回所有包含这些词的对象,不区分大小写(即 icontains 查找:不区分大小写的包含匹配),其中每个词必须在 search_fields 中至少有一个。例如,如果 search_fields 设置为 ['first_name', 'last_name'],用户搜索 john lennon',Django 会做相当于这个 SQL WHERE 子句。

12

WHERE (first_name ILIKE '%john%' OR last_name ILIKE '%john%')AND (first_name ILIKE '%lennon%' OR last_name ILIKE '%lennon%')

搜索查询可以包含带空格的引号短语。我的理解就是分组整体匹配(Django3.2新增),例如,如果用户搜索 "john winston" 或 'john winston',Django 会做相当于这个 SQL 的 WHERE 子句:

1

WHERE (first_name ILIKE '%john winston%' OR last_name ILIKE '%john winston%')

如果你不想使用 icontains 查找方式,你可以使用 ModelAdmin.get_search_results() 来提供额外的或替代的搜索行为。 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 管理页面显示
    • 页大小
      • 操作选项的位置
        • 显示哪些列 
          • 列标题
            • 过滤器
              • 搜索框
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档