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多选框表单的资料请关注我们其它相关文章!

(0)

相关推荐

  • 在django admin详情表单显示中添加自定义控件的实现

    在开发中有需求在详情显示里外键字段内容,并且添加按钮弹窗内容,以及按钮跳转内容. 以前并没有做过相似的开发,我们的后台是xadmin,当时正在研究xadmin的插件,于是想着能不能用插件去做,后来发现太麻烦,而且实现起来我也没研究通,主要是添加按钮之类的没搞懂,于是就换了一种简单的方法. 首先先讲解下思路,admin中有几个界面,一个是展示的list界面,一个是详情的model界面,model中其实就是详情detail,里面记录了此条数据的全部内容,精简来说就是一个form表单的内容展示. 那么

  • 自定义django admin model表单提交的例子

    如下所示: 希望可以从对admin提交的密码加密,并验证电话号码均为数字. 查看admin.py from django.contrib import admin class courseAdmin(admin.ModelAdmin) 我们自定义的管理类,继承与admin.ModelAdmin 查看对应admin模块对应源码 __init__.py from django.contrib.admin.options import ( HORIZONTAL, VERTICAL, ModelAdmi

  • Django admin.py 在修改/添加表单界面显示额外字段的方法

    问题描述: 我有个blogextra表继承自blog,现在我想在blog的admin管理change界面显示对应的blogextra字段 解决方法: 可以使用admin.py的inline内联方法 代码: models.py from django.db import models # Create your models here. class Blog(models.Model): Name = models.CharField(max_length=350) def __unicode__

  • django-xadmin根据当前登录用户动态设置表单字段默认值方式

    相信你一定会设置一个普通字段的默认值: class Offer(models.Model): salary = models.CharField(max_length=64, blank=True, default='6000', verbose_name='薪资待遇') 相信你还能动态设置外键字段的默认值: class Interview(models.Model): department = models.ForeignKey('departments.Department', relate

  • 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.CharF

  • React实现登录表单的示例代码

    作为一个Vue用户,是时候扩展一下React了,从引入antd.配置less.router,终于实现了一个简单的登录表单. 代码如下: import React from 'react'; import { Input, Button, message } from "antd"; import { UserOutlined, LockOutlined, EyeInvisibleOutlined, EyeTwoTone } from '@ant-design/icons'; impor

  • js 判断文件类型并控制表单提交示例代码

    下面的代码 实现的控制表单提交 复制代码 代码如下: function shangchuan(){ var filepath = document.getElementById("file").value; alert(filepath); if(filepath==""){ alert("请选择上传的文件!"); document.getElementById("file").disabled=true; } var ext

  • JavaScript限定复选框的选择个数示例代码

    有10个复选框,用户最多只能勾选3个,否则就灰掉所有复选框. (用户再次勾掉复选框时,仍然可以再次选择.) 将可变的部分设置为JS的参数,以实现代码复用. JS代码 第一个参数为复选框的name,第二个参数为最多允许的勾选值. 复制代码 代码如下: function choicetest(name,num){ var choicearr = document.getElementsByName(name); var a=0; for(var i=0;i<choicearr.length;i++)

  • ajax jquery 异步表单验证示例代码

    文件目录:  html代码: 复制代码 代码如下: <html> <head> <title>异步表单验证</title> <script type='text/javascript' src='jquery.js' ></script> <script> function checkname(){ //$("input[name='name']").val() $.ajax({ type:"

  • JavaScript使用表单元素验证表单的示例代码

    JavaScript的主要作用:验证表单 1最简单的表单验证-禁止空白的必填项目 1.1最简单的HTML结构 网站最基础的就是注册,它是一个系统的交互基础. 例子: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>简单列表的html结构</title> </head> <body> <form method=&qu

  • vue实现可视化可拖放的自定义表单的示例代码

    实现如例子所示的可视化可拖放表单功能.整个页面,分为左中右三栏布局,左栏的部件库的部件(组件)作为key,拖放到中间区域时,往vuex存放数组数据,拖一个就push一个.点击某个组件时,在右栏显示其属性,其实也就是在vuex存放的数据中查找数据迭代属性. 左中右三栏 左右固定 中间自适应布局 首先,布局上来看,左右都是可以拉伸的,中间是自适应的布局. 左右分别float left和float right, 中间栏使用margin撑开布局,即可完成布局 动态缩放浏览器窗口来查看效果 动态显示tem

  • js禁止回车提交表单的示例代码

    如下所示; 复制代码 代码如下: function ifenter(){   if(event.keyCode==13){  return   false;  }else if(event.srcElement.type=="submit"){   form1.submit();   }  }   document.onkeydown=ifenter;

  • PHP中CheckBox多选框上传失败的代码写法

    用惯Java和其他语言的时候,表单上传只需要checkbox的name相同的时候就可以上传了 <input type="checkbox" name="checkbox" value="1"> 选项 <input type="checkbox" name="checkbox" value="2"> 选项 <input type="checkbox&

  • jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证

    jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> &l

随机推荐