小编给大家分享一下如何使用django2.0来开发ModelAdmin模型管理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联公司服务项目包括扎兰屯网站建设、扎兰屯网站制作、扎兰屯网页制作以及扎兰屯网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,扎兰屯网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到扎兰屯省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!> cd cms > python manager.py runserver
打开浏览器http://127.0.0.1:8000/admin
就可以看到后台的登录窗口
因为我们还没有后台的超级管理员, 先用命令行创建一个
> cd cms > python manager.py createsuperuser
按照提示输入Username, Password即可, 在浏览器中输入账号密码就可以登录到后台了
登录成功后发现没有我们的Account模块, 现在我们就来把Account模块注册到后台中
# account/admin.py from django.contrib import admin from .models import Account admin.site.register(Account)
然后再刷新浏览器, 就会发现出现了Account模块, 但是显示的界面全都是英文的
另外还有一种装饰器的注册方式
# account/admin.py from django.contrib import admin from .models import Account @admin.register(Account) class AccountAdmin(admin.ModelAdmin): pass
也会实现同样的效果
django当然替我们想到了这一点
# cms/settings.py # 指定语言为中文 LANGUAGE_CODE = 'zh-Hans' # 指定时区 TIME_ZONE = 'PRC' # 改为False, 存入数据库的时间才正常, 否则会比正常时间少八个小时 USE_TZ = False
# account/admin.py from django.contrib import admin from .models import Account @admin.register(Account) class AccountAdmin(admin.ModelAdmin): # 控制列表页按钮显示位置 actions_on_top = False actions_on_bottom = True # 是否显示列表页数据数量([选中了n个中的m个]) actions_selection_counter = True
ModelAdmin是后台指定模块的一个控制类, 包括后台的列表页面样式、数据、以及编辑/新增, 操作方法等都由这个类控制, 当继承这个类, 我们就可以通过覆盖这个类的方法, 来完成我们的一些操作
actions
指定自定义的操作列表
如果是定义的function, 则
actions = [函数名]
如果是class的function, 则
actions = ['类中的方法名']
actions_on_top
指定列表页按钮的是否在上边, 设置为True则在上面
actions_on_bottom
同actions_on_top, 只不过是是否在下方
date_hierarchy
只可作用在DateField和DateTimeField上, 设置后, 可以根据时间段, 去过滤数据
class AccountAdmin(models.ModelAdmin): ...忽略其他代码 date_hierarchy = 'create_time'
exclude
排除新增/编辑页面需要显示的字段
fields
指定新增、编辑页面要显示的字段
fields = ('account', 'nickname', 'password', 'email', 'phone', 'status')
list_display
控制列表页要显示的字段
list_display = ('account', 'nickname', 'email', 'phone', 'status', 'create_time')
list_display_links
指定哪些在列表页显示的字段上加链接
list_display_links = ('account', )
list_editable
指定哪些字段可以直接在列表页编辑
list_editable = ('status', )
list_filter
列表页过滤条件
list_filter = ('status', )
ordering
排序, 影响order_by
ordering = ['id]
list_per_page
控制每页显示的数据数量
每个会员的状态有启用和禁用两种, 现在我们想要增加一个操作来批量启用和禁用
先定义一个操作的方法
class AccountAdmin(models.ModelAdmin): def disable_account(self, request, queryset): queryset.update(status=0) disable_account.short_description='启用'
disable_account包含两个参数request
是HttpRequest对象, 包含请求的所有清晰queryset
是数据库操作的QuerySet对象, 也就是当我们点击了操作按钮后, 就会执行queryset.filter(id__in=选中的id).update(status=0), django已经提前帮我们写好了queryset.filter()这部分写好了。
disable_account.short_description是指定这个操作在后台显示的名称
定义好方法后, 需要将操作的方法写入到actions属性中才会生效
class AccountAdmin(models.ModelAdmin): actions = ['disable_ccount'] def disable_account(self, request, queryset): queryset.update(status=0) disable_account.short_description='启用'
同样的, 我们可以再定义一个enable_accoun方法。
然后在列表页的动作中, 就可以看到我们定义的操作了
这种方法可以用在一般通用方法中, 比如我们的account模型有一个is_deleted字段, 这个字段的意思是在数据删除后, 设置is_deleted为1, 默认正常时是0, 而django默认的删除操作是直接物理删除数据, 所以我们需要重写删除的方法
# account/admin.py from django.contrib import admin # 禁用默认的删除操作 admin.site.disable_action('delete_selected')
这样就会禁用掉默认的删除操作
# 重新定义一个删除操作 def deleted_select(self, request, queryset): queryset.update(is_deleted=1)
原理和之前我们增加操作方法一样
将这个操作注册到admin站点中
admin.site.add_action(deleted_select, '删除数据')
add_action第一个参数是操作的函数名, 第二个是显示的按钮
在我们修改了删除操作后, 发现即使我们删除了数据, 列表中还是会出现, 这个是不符合我们预期的
所以我们要重写ModelAdmin的查询数据方法, 过滤掉is_deleted=1的数据
class AccountAdmin(admin.ModelAdmin): ...省略代码 def get_queryset(self, request): queryset = super().get_queryset(request) return queryset.filter(is_deleted=0)
第一步queryset = super().get_queryset(request)
, 就是获取到ModelAdmin的查询对象QuerySet, 然后增加过滤条件filter, 然后ModelAdmin会继续操作查询的方法。
以上是“如何使用django2.0来开发ModelAdmin模型管理”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。