django admin实现动态多选框表单的示例代码
作者:WilsonOnIsland 时间:2021-12-25 11:31:29
背景
借助django-admin,可以快速得到CRUD界面,但若需要创建多选标签字段时,需要对表单进行调整
示例
model.py
一个tag(标签类),一个book(书本类)
book携带tag,这里不借助有性能问题的外键
class tag(models.Model):
name = models.CharField(max_length=20, verbose_name='标签')
class book(models.Model):
name = models.CharField(max_length=50, verbose_name='书名')
tags = models.TextField(null=True, verbose_name='标签')
admin.py
将对应的model到admin中注册,才能被django-admin发现并使用,所以主要步骤在此,有以 * 意点:
values_list返回:<QuerySet [('tag1', 'tag1'), ('tag2', 'tag2')]>
保证最新标签列表:在表单初始化才执行一次标签查询
表单修改显示标签:在表单初始化赋值列表对象
# 标签查询
def get_tag_list():
return tag.objects.values_list("name", "name")
# 表单类定义
class bookForm(forms.ModelForm):
tags = forms.MultipleChoiceField(label='标签', widget=widgets.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
super(cameraForm, self).__init__(*args, **kwargs)
# 保证每次初始化有最新的标签列表
self.fields['tags'].choices = get_tag_list()
# 由于会在数据库中存储为列表字符串,需在赋值时转回列表对象,才能在修改表单时识别原值
self.initial['tags'] = eval(self.initial['tags'])
class Meta:
model = book
exclude = []
# book扩展
class bookAdmin(admin.ModelAdmin):
search_fields = 'name', 'tags')
list_display = ( 'name', 'tags')
form = bookForm
# 注册到admin中
admin.site.register(book, bookAdmin)
处理结果
写入到数据库格式
数据库中以列表形式存储字符串
django表单样式
来源:https://blog.csdn.net/u013323965/article/details/116708017
标签:django,admin,多选框,表单
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
PHP:微信小程序 微信支付服务端集成实例详解及源码下载
2023-11-14 13:37:55
![](https://img.aspxhome.com/file/2023/3/90253_0s.png)
Python面向对象编程之类的继承
2021-10-27 23:46:39
![](https://img.aspxhome.com/file/2023/6/83896_0s.png)
关于INDEX SERVER+ASP建立查询引擎的一点心得
2008-03-02 15:56:00
用不着妄自菲薄对ASP和ASP程序员的一些话
2007-08-22 15:09:00
Python ChineseCalendar包主要类和方法详解
2021-10-12 10:40:40
Python基于socket实现TCP客户端和服务端
2023-09-29 15:30:05
在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据
2023-07-21 05:18:32
![](https://img.aspxhome.com/file/2023/5/76335_0s.gif)
Django权限设置及验证方式
2022-12-28 23:45:18
python os.listdir按文件存取时间顺序列出目录的实例
2021-03-21 23:02:52
Python 实现某个功能每隔一段时间被执行一次的功能方法
2021-11-14 09:57:25
一段重用很高的ajax代码
2009-02-09 13:27:00
mysql性能的检查和调优方法
2009-05-17 09:21:00
Python pandas如何向excel添加数据
2021-07-14 17:37:41
利用标准库fractions模块让Python支持分数类型的方法详解
2023-06-06 05:23:47
安装Python和pygame及相应的环境变量配置(图文教程)
2023-09-05 15:54:42
![](https://img.aspxhome.com/file/2023/9/97049_0s.png)
python自动安装pip
2021-04-06 09:30:00
MySQL与PHP的基础与应用专题之创建数据库表
2023-11-21 04:12:28
![](https://img.aspxhome.com/file/2023/2/110342_0s.png)
MySQL重定位数据库目录的内容
2009-02-26 16:03:00
如何绝对获知浏览器类型?
2009-12-16 18:58:00
一文带你搞懂Python中的pyc文件
2022-01-25 20:01:03
![](https://img.aspxhome.com/file/2023/0/77630_0s.png)