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.com from django import forms class 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 == "",
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, HttpResponse
from 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标签会默认选中第一个),不会显示出数据库中保存的对应的值。

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

Django forms 关于select和checkbox设置初始选中值的更多相关文章

  1. Django forms 关于select和checkbox设置初始选中值及让前端选中指定值

    Django的forms和models一样很牛逼.他有两种功能,一是生成form表单,还有就是form表单的验证. 这里主要说一下生成form表单时经常用到的需要设置 初始值 / 默认值 的情况. 1 ...

  2. jquery设置checkbox状态,设置dropdownlist选中值,隐藏某控件,给某控件追加东西

    jquery设置checkbox状态 $("[ID$=chkType]").attr("checked", true); jquery设置dropdownlis ...

  3. HTML中的<select>标签如何设置默认选中的选项

    方法有两种. 第一种通过<select>的属性来设置选中项,此方法可以在动态语言如php在后台根据需要控制输出结果. 1 2 3 4 5 < select  id =  " ...

  4. jquery获取复选框(checkbox)的选中值(一组和单个)

    使用jquery获取一组或者单个checkbox的选中状态的值.下面通过一个示例进行说明,假设现有一页面有一组checkbox的name的值为id,那么获取这组name=id的checkbox的值的方 ...

  5. 单选框radio总结(获取值、设置默认选中值、样式)

    单选框 radio <div class="radio-inline"> <input type="radio" name="kil ...

  6. js获取checkbox中所有选中值及input后面所跟的文本

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. jquery遍历获取带checkbox表格的选中值以及遍历json数组

    今天整理了一下jquery遍历的两个用法,分享给大家. 1.$().each 主要用来遍历DOM元素,获取DOM的值或样式等. 2.$.each() 主要用来遍历后台ajax返回的json数组,循环将 ...

  8. Django forms表单 select下拉框的传值

    今儿继续做项目,学习了Django的forms生成前端的代码. forms.py class SignupForm(forms.Form): username = forms.CharField(va ...

  9. 《jQuery判断radio、checkbox、select 是否选中和设置选中问题以及获取选中值》总结

    <form> <input type="radio" name="gender" id="man" value=" ...

随机推荐

  1. js_jquery_创建cookie有效期问题_时区问题

    用jquery设置Cookie过期的两种方式: $.cookie('名', '值', { expires: 过期时间(DateTime), path: "/", domain: w ...

  2. HTML+CSS基础(2)-HTML标签的简单介绍和网页注释

    标签的语法和基本规则 1.语法"<xxx></xxx>",英文的"<>"将标签括起来,如例1. <!--例1--> ...

  3. 从零开始学安全(三)●黑客常用的windows端口

    端口可选1-65536 1-1024 预保留端口 留给windows系统服务的 下面是常见的端口对应的服务 1 TCP Port Service Multiplexer 传输控制协议端口服务多路开关选 ...

  4. .Net Core 使用 System.Drawing.Common 部署到CentOS上遇到的问题

    一开始报这个错误:Unable to load shared library 'libdl' 找到libdl安装位置是/usr/lib64: #locate libdl /usr/lib64/libd ...

  5. [android] 自定义广播事件

    上一节的短信拦截在4.0以上系统中无效,可以使用这种办法实现,定义一个activity,清单文件中指定主题为透明,在onCreate()方法里面直接调用finsh()方法,关掉,这样可以就可以实现了 ...

  6. 【Java每日一题】20170309

    20170308问题解析请点击今日问题下方的“[Java每日一题]20170309”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...

  7. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)

    有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...

  8. 大家好,又是新的一天。今天给大家带来一些新的知识:选择器的种类和css的三种样式

    今天我们为大家 选择了 六种 选择器: 1. 标签选择器 2.id选择器 3.class选择器 4.后代选择器 5.子代选择器 6.交集选择器 我们就举三个典型的例子:后代选择器,子代选择器和交集选择 ...

  9. JavaAndroid项目配置文件笔记

    配置文件AndroidManifest.xml如下: <?xml version="1.0" encoding="utf-8"?> <!-- ...

  10. WPF实现主题更换的简单DEMO

    WPF实现主题更换的简单DEMO 实现主题更换功能主要是三个知识点: 动态资源 ( DynamicResource ) INotifyPropertyChanged 接口 界面元素与数据模型的绑定 ( ...