django admin 给字段设置 widget
2023-03-07 09:46:21 时间
* 本文代码同步更新至 https://github.com/yinzhuoqun/django2 *
django admin 后台里有些输入框长度、宽度、提示语等,可能不满足我们的需求,这个时候,我们就需要对 admin 的样式进行更改。
还是先从 django 官网 找文档,发现 widget 是可以再 admin.py 里面重写的,只需要用到 django.contrib.admin.ModelAdmin.formfield_overrides(这个属性通过一种临时的方案来覆盖现有的模型中 Field (字段)类型在admin site中的显示类型。formfield_overrides 在类初始化的时候通过一个字典类型的变量来对应模型字段类型与实际重载类型的关系。)
方法一: 只改 admin.py ,缺点是 只能针对某种字段类型,不能指定字段。
# admin.py
from django.contrib import admin
from django.forms import widgets
from apps.blog.models import *
class ArticleAdmin(admin.ModelAdmin):
list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user']
list_display_links = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'user']
search_fields = ['title_short', 'user', 'content']
list_editable = ["show_status", ]
# style_fields = {"content": "ueditor"}
readonly_fields = ('slug',)
show_detail_fields = ['show_status', ]
# 重写 字段类型 的 widget, attrs 属性可以设置前端样式
formfield_overrides = {
models.IntegerField: {'widget': widgets.NumberInput(attrs={"style": "width:50em;", })},
models.CharField: {'widget': widgets.TextInput(attrs={"style": "width:50%;", "placeholder": "请输入内容"})},
}
admin.site.register(Article, ArticleAdmin)
方法二:此方法可以指定字段,而不是字段类型。
来源:https://timonweb.com/posts/override-field-widget-in-django-admin-form/
1. 首先 在 forms.py 新建一个 表单 ArticleAdminFrom
# forms.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@author: yinzhuoqun
@site: http://zhuoqun.info/
@email: yin@zhuoqun.info
@time: 2019/9/5 15:26
"""
from django import forms
from django.forms.widgets import TextInput
from apps.blog.models import Article
class ArticleAdminForm(forms.ModelForm):
class Meta:
model = Article
fields = '__all__'
widgets = {
"title": TextInput(attrs={"style": "width:50%;", "placeholder": "请输入标题"}),
}
2. 然后在 admin.py 里面启用自定义的 ArticleAdminForm
# admin.py
from django.contrib import admin
from django.forms import widgets
from apps.blog.models import *
from apps.blog.forms import ArticleAdminForm
class ArticleAdmin(admin.ModelAdmin):
form = ArticleAdminForm # 指定了表单,就不要再用 formfield_overrides 了
list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user']
list_display_links = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'user']
search_fields = ['title_short', 'user', 'content']
list_editable = ["show_status", ]
# style_fields = {"content": "ueditor"}
readonly_fields = ('slug',)
show_detail_fields = ['show_status', ]
# 重写 字段类型 的 widget, attrs 属性可以设置前端样式
# formfield_overrides = {
# models.IntegerField: {'widget': widgets.NumberInput(attrs={"style": "width:50em;", })},
# models.CharField: {'widget': widgets.TextInput(attrs={"style": "width:50%;", "placeholder": "请输入内容"})},
# }
admin.site.register(Article, ArticleAdmin)
# 本文使用的 Article Model
https://github.com/yinzhuoqun/django2/blob/master/apps/blog/models.py
# 效果
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的