博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django forms 关于select和checkbox设置初始选中值
阅读量:4477 次
发布时间:2019-06-08

本文共 2206 字,大约阅读时间需要 7 分钟。

Django的forms和models一样很牛逼。他有两种功能,一是生成form表单,还有就是form表单的验证。

这里主要说一下生成form表单时经常用到的需要设置 初始值 / 默认值 的情况。

1. 前端在展示checkbox时,希望设置一个默认选中的选项。如下图:

先来看一下form是如何定义的:

也就是说我们要在前端生成页面的时候,让他把2那一项选中,要怎么做呢?

方法一:

先来看一个东西,在django/forms/widgets.py文件中,有一个字段如下图

这里有个_empty_value字段就是设置默认值的。

在定义form时,在构造方法中利用该字段为其配置默认选项:

(这里可能有疑问为啥该字段的值要是个列表?因为定义的这个form类型是一个多选。。。)

看到PEP8提示的波浪线就知道这玩意儿不是个好方法,很显然还有别的方法。

方法二:

利用initial,在定义form的时候设置初始值。

方法三:

利用initial,在生成form示例的时候设置初始值。

2. 前端在展示select时,希望设置一个默认选中的选项。如下图:(我们这里定义了一个单选的select)

 

还是先来看一下form的定义:

我们希望在前端显示时,能够默认选中2那一项,如下图:

 这个时候基本上跟上例中都是一样的方法。

方法一:

还是在定义form的时候为city字段设置一个初始值

方法二:

生成form实例的时候为city字段设置一个初始值

#! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi"# Email: master@liwenzhou.comfrom django import formsclass SelectTestForm(forms.Form):    city = forms.IntegerField(        widget=forms.Select(            choices=(                (1, "BeiJing"),                (2, "WeiHai"),                (3, "RuShan"),            ),            attrs={                "class": "form-control",            }        ),        required=True    )    modes = forms.TypedChoiceField(        coerce=lambda x: x == "1",        choices=(            (1, "负载均衡"),            (2, "极致性能"),            (3, "超级无敌"),        ),        widget=forms.CheckboxSelectMultiple(        ),    )    def __init__(self, *args, **kwargs):        super(SelectTestForm, self).__init__(*args, **kwargs)        # self.fields["modes"].widget._empty_value = [2, ]  # 方法1        self.initial["modes"] = [2, ]  # 方法2        self.initial["city"] = 2
form代码
from django.shortcuts import render, HttpResponsefrom testapp.forms import select_test# Create your views here.def test(request):    f = select_test.SelectTestForm(initial={
"city": 2, "modes": [2, ]}) # 方法2 if request.method == "POST": print(request.POST) return HttpResponse("OK") else: return render(request, "test/select_test.html", {
"f": f})
views代码

3. 从数据库里查询数据返回前端展示时,如何在前端的标签中选中的指定的选项。

将数据库中查询出来的选中的authors的id作为参数传入BookForm类生成一个对象将该form对象传到前端就可以准确展示出那些选中的值

这里如果写成f = change_book.BookForm()的话,前端只会展示出空的表单(当然select标签会默认选中第一个),不会显示出数据库中保存的对应的值。

 搜集和整理资料不易,转载请注明出处。

转载于:https://www.cnblogs.com/liwenzhou/p/5520837.html

你可能感兴趣的文章
顺序栈用C语言实现
查看>>
Python批量获取京东商品列表信息
查看>>
2017.7.10 C组总结
查看>>
SourceTree下载 及使用
查看>>
MyEclipse下安装FatJar打包工具
查看>>
什么是域名-视频讲解?
查看>>
大道至简第六章-从编程到工程
查看>>
单元测试——隔离神器:mockito
查看>>
【leetcode】Binary Tree Zigzag Level Order Traversal
查看>>
Python网络数据采集pdf
查看>>
《CSS3.0(飘零雾雨版)》
查看>>
Microsoft Dynamics CRM 里的account 左侧导航栏连接报表
查看>>
一次域渗透尝试
查看>>
个人工作总结03(冲刺二)
查看>>
BLE 5协议栈-通用属性规范层(GATT)
查看>>
第3周学习进度
查看>>
【★】EIGRP终极解析!
查看>>
5.2 dubbo-compiler源码解析
查看>>
第十二章 ThreadPoolExecutor使用 + 工作机理 + 生命周期
查看>>
介绍 ASP.NET Web 编程使用 Razor 语法 (C#)
查看>>