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

作者:WilsonOnIsland 时间:2021-12-25 11:31:29 

背景

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 admin实现动态多选框表单的示例代码

django表单样式

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

来源:https://blog.csdn.net/u013323965/article/details/116708017

标签:django,admin,多选框,表单
0
投稿

猜你喜欢

  • PHP:微信小程序 微信支付服务端集成实例详解及源码下载

    2023-11-14 13:37:55
  • Python面向对象编程之类的继承

    2021-10-27 23:46:39
  • 关于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
  • 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
  • python自动安装pip

    2021-04-06 09:30:00
  • MySQL与PHP的基础与应用专题之创建数据库表

    2023-11-21 04:12:28
  • MySQL重定位数据库目录的内容

    2009-02-26 16:03:00
  • 如何绝对获知浏览器类型?

    2009-12-16 18:58:00
  • 一文带你搞懂Python中的pyc文件

    2022-01-25 20:01:03
  • asp之家 网络编程 m.aspxhome.com