![5ca3f8ecdc057d77fa16964ac3d56afd.png](https://img-blog.csdnimg.cn/img_convert/5ca3f8ecdc057d77fa16964ac3d56afd.png)
Django Admin是Django开箱即用的CRUD界面。只要简单的几句代码就可以生成标准的带分页,添加,删除,列表功能页。
![3e14fee702dd3aa5d90736d304376070.png](https://img-blog.csdnimg.cn/img_convert/3e14fee702dd3aa5d90736d304376070.png)
但真正做过项目的同学肯定知道,在真实的项目, 肯定是有很多功能按钮或者菜单去调用具体的业务逻辑的。这样的脚手架功在被Ruby On Rails普及后,太多框架都加上了类似功能,很多时候还是比较鸡肋的。比如页面风格不一致,自定义方法难实现等。
作为脚手架的鼻祖,Django Admin的实现还是比较优雅的。稍加改动就能实现自定义方法。 首先我们创建个简单的Django 项目
![7b236bd50c0a6ac01a9f4439e26b3c8a.png](https://img-blog.csdnimg.cn/img_convert/7b236bd50c0a6ac01a9f4439e26b3c8a.png)
然后在article目录里的models.py里定义Article类, 加上标题, 内容,发布时间,状态字段
![84dd365fd76edb438efedc101fc0f0e2.png](https://img-blog.csdnimg.cn/img_convert/84dd365fd76edb438efedc101fc0f0e2.png)
然后在admin.py里创建ArticleAdmin类, 这个是Django Admin 用来生成页面的,所以我们需要给出列表字段 (list_display) 和详细页面的字段(fields)
![5e0d1e0b73ac89c67601d9d25b4b2d31.png](https://img-blog.csdnimg.cn/img_convert/5e0d1e0b73ac89c67601d9d25b4b2d31.png)
创建migration, Django 就会根据Article类生成数据库
![e0e91c428b7b7b2d178ff497e0bcb93e.png](https://img-blog.csdnimg.cn/img_convert/e0e91c428b7b7b2d178ff497e0bcb93e.png)
然后创建超级用户,这个是用来登录Admin页面的
![7f4a4498bdf6bb4bd66f7919c4e577ce.png](https://img-blog.csdnimg.cn/img_convert/7f4a4498bdf6bb4bd66f7919c4e577ce.png)
启动程序
![26aa043bce0a8dc25ab19fea2105e205.png](https://img-blog.csdnimg.cn/img_convert/26aa043bce0a8dc25ab19fea2105e205.png)
打开浏览器,访问127.0.0.1:8000/admin,
![1f11879496e60eabb8f4c130332060e2.png](https://img-blog.csdnimg.cn/img_convert/1f11879496e60eabb8f4c130332060e2.png)
用刚才创建的superuser登录后就可以看到Article表格了
![231c518ea3770afb9f3249e2cb97c6c9.png](https://img-blog.csdnimg.cn/img_convert/231c518ea3770afb9f3249e2cb97c6c9.png)
然后我们修改ArticleAdmin类,加上自定义方法publish, queryset就是列表中被选中的articles, 我们可以修改它们的status字段为'published', 然后在action数组里加上publish方法。
![969c53148cfe5da7156df2b2711ec66f.png](https://img-blog.csdnimg.cn/img_convert/969c53148cfe5da7156df2b2711ec66f.png)
刷新页面,就可以看到publish方法在下拉列表里了
![813a36714f6914058f119a2c58478c67.png](https://img-blog.csdnimg.cn/img_convert/813a36714f6914058f119a2c58478c67.png)