django admin实现动态多选框表单的示例代码

 更新时间:2021年05月13日 11:06:34   作者:WilsonOnIsland  
借助django-admin,可以快速得到CRUD界面,但若需要创建多选标签字段时,需要对表单进行调整,本文通过示例代码给大家介绍django admin多选框表单的实现方法,感兴趣的朋友跟随小编一起看看吧

背景

借助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表单样式

以上就是django admin实现动态多选框表单的示例代码的详细内容,更多关于django admin多选框表单的资料请关注脚本之家其它相关文章!

相关文章

  • 正确理解python中的关键字“with”与上下文管理器

    正确理解python中的关键字“with”与上下文管理器

    这篇文章主要介绍了关于python中关键字"with"和上下文管理器的相关资料,文中介绍的非常详细,相信对大家学习或者使用python具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • Apache部署Django项目图文详解

    Apache部署Django项目图文详解

    这篇文章主要介绍了Apache部署Django项目图文详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python制作钉钉加密/解密工具

    Python制作钉钉加密/解密工具

    本文给大家介绍的是使用Python实现钉钉的加密解密工具的核心代码,非常的实用,对于大家学习Python加密解密非常有帮助,希望大家能够喜欢
    2016-12-12
  • OpenCV图像轮廓的绘制方法

    OpenCV图像轮廓的绘制方法

    这篇文章主要为大家详细介绍了OpenCV图像轮廓的绘制方法,以及测试几何图形、花朵图形轮廓,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python使用pyppeteer模块实现无头浏览器自动化

    Python使用pyppeteer模块实现无头浏览器自动化

    pyppeteer是一个基于Python的模块,它提供了一个高级的API,可以通过控制无头浏览器来实现自动化网页操作,下面我们就来看看Python如何使用pyppeteer模块实现无头浏览器自动化吧
    2024-02-02
  • pandas.DataFrame中提取特定类型dtype的列

    pandas.DataFrame中提取特定类型dtype的列

    本文主要介绍了pandas.DataFrame中提取特定类型dtype的列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python生成MD5值的两种方法实例分析

    Python生成MD5值的两种方法实例分析

    这篇文章主要介绍了Python生成MD5值的两种方法,结合实例形式较为详细的分析了Python实现MD5加密的常见操作技巧,需要的朋友可以参考下
    2019-04-04
  • python的链表基础知识点

    python的链表基础知识点

    在本篇文章里小编给大家整理的是一篇关于python的链表基础知识点内容,有兴趣的朋友们可以参考学习下。
    2020-09-09
  • Python实现导出数据生成excel报表的方法示例

    Python实现导出数据生成excel报表的方法示例

    这篇文章主要介绍了Python实现导出数据生成excel报表的方法,结合完整实例形式分析了Python连接、查询mysql数据库并导出Excel报表的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • python爬虫开发之PyQuery模块详细使用方法与实例全解

    python爬虫开发之PyQuery模块详细使用方法与实例全解

    这篇文章主要介绍了python爬虫开发之PyQuery模块详细使用方法与实例全解,需要的朋友可以参考下
    2020-03-03

最新评论