来源:http://xieboke.net/article/100/

django admin 后台里有些输入框长度、宽度、提示语等,可能不满足我们的需求,这个时候,我们就需要对 admin 的样式进行更改。 还是先从 django 官网 找文档,发现 widget 是可以再 admin.py 里面重写的,只需要用到 django.contrib.admin.ModelAdmin.formfield_overrides(这个属性通过一种临时的方案来覆盖现有的模型中 Field (字段)类型在admin site中的显示类型。formfield_overrides 在类初始化的时候通过一个字典类型的变量来对应模型字段类型与实际重载类型的关系。)

方法一: 只改 admin.py ,缺点是 只能针对某种字段类型,不能指定字段。

# admin.py

 1 from django.contrib import admin
2 from django.forms import widgets
3 from apps.blog.models import *
4
5
6 class ArticleAdmin(admin.ModelAdmin):
7 list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user']
8 list_display_links = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'user']
9 search_fields = ['title_short', 'user', 'content']
10 list_editable = ["show_status", ]
11 # style_fields = {"content": "ueditor"}
12 readonly_fields = ('slug',)
13 show_detail_fields = ['show_status', ]
14
15 # 重写 字段类型 的 widget, attrs 属性可以设置前端样式
16 formfield_overrides = {
17 models.IntegerField: {'widget': widgets.NumberInput(attrs={"style": "width:50em;", })},
18 models.CharField: {'widget': widgets.TextInput(attrs={"style": "width:50%;", "placeholder": "请输入内容"})},
19 }
20
21
22 admin.site.register(Article, ArticleAdmin)

方法二:此方法可以指定字段,而不是字段类型。 来源:https://timonweb.com/posts/override-field-widget-in-django-admin-form/

1. 首先 在 forms.py 新建一个 表单 ArticleAdminFrom # forms.py

 1 from django import forms
2 from django.forms.widgets import TextInput
3 from apps.blog.models import Article
4
5
6 class ArticleAdminForm(forms.ModelForm):
7 class Meta:
8 model = Article
9 fields = '__all__'
10 widgets = {
11 "title": TextInput(attrs={"style": "width:50%;", "placeholder": "请输入标题"}),
12 }

2. 然后在 admin.py 里面启用自定义的 ArticleAdminForm # admin.py

 1 from django.contrib import admin
2 from django.forms import widgets
3 from apps.blog.models import *
4 from apps.blog.forms import ArticleAdminForm
5
6
7 class ArticleAdmin(admin.ModelAdmin):
8 form = ArticleAdminForm # 指定了表单,就不要再用 formfield_overrides 了
9
10 list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user']
11 list_display_links = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'user']
12 search_fields = ['title_short', 'user', 'content']
13 list_editable = ["show_status", ]
14 # style_fields = {"content": "ueditor"}
15 readonly_fields = ('slug',)
16 show_detail_fields = ['show_status', ]
17
18 # 重写 字段类型 的 widget, attrs 属性可以设置前端样式
19 # formfield_overrides = {
20 # models.IntegerField: {'widget': widgets.NumberInput(attrs={"style": "width:50em;", })},
21 # models.CharField: {'widget': widgets.TextInput(attrs={"style": "width:50%;", "placeholder": "请输入内容"})},
22 # }
23
24
25 admin.site.register(Article, ArticleAdmin)

最新文章

  1. Android启动icon切图大小
  2. IOS开发基础知识--碎片12
  3. PHP判断访问者手机移动端还是PC端的函数,亲测好用
  4. c++11的初始化
  5. .Net 一些好工具
  6. HTML5之Canvas绘图实例——饼状图
  7. 编码中常用的SQL语法
  8. ASP.NET MVC- Controllers and Routing- Controller Overview
  9. 树莓派连接GPS模块
  10. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. (关于jdbc)
  11. HTML5 CANVAS制图 基础总结
  12. 【Ubuntu Desktop】安装主流桌面
  13. hdu1203 I NEED A OFFER!---概率DP(01背包)
  14. pip install PIL The _imagingft C module is not installed
  15. kubernetes容器删除时快速释放ip的方案
  16. 第十节 集合类Collection和Map
  17. python 将文件描述符包装成文件对象
  18. 使用getCurrentPosition方法实时获取当前Geolocation信息(附源码文件)--html5、JavaScript
  19. 条件随机场(CRF)理论及应用
  20. Elasticsearch学习之相关度评分TF&IDF

热门文章

  1. 基于电商直播SDK快速实现一个淘宝直播APP【内附源码】
  2. vue浏览器全屏 非全屏切换 按esc退出全屏
  3. XShell 连接 VMware Linux
  4. ChatGPT强势爆红,背后的技术原理是?一文轻松搞懂!
  5. LeetCode-1765 地图中的最高点
  6. web实践4
  7. 在IIS上同站点部署多个程序操作步骤
  8. TensorFlow中的Placeholder
  9. LinuxK8S集群搭建三(部署dashboard)
  10. Bugku-不可破译的密码[wp]