Django forms 关于select和checkbox设置初始选中值

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的更多相关文章

  1. Django使用forms来实现评论功能

    貌似Django从版本1.6开始就放弃了对自带的comments的使用,具体原因未查,但是现在使用Django的内部的模块也可以实现评论功能,那就是借助于forms模块,下面是我的一个小例子. 环境准 ...

  2. Django组件-Forms组件

    Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...

  3. Django组件--forms组件(注册用)

    一.forms组件--校验类的使用 二.form组件--校验类的参数 三.forms组件校验的局部钩子--自定义校验规则(要看源码理解) 四.forms组件校验的全局钩子--校验form表单两次密码输 ...

  4. web框架开发-Django的Forms组件

    校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...

  5. Django的forms表单组件批量设置字段样式

    from django import forms from . import models class UserInfoModelForms(forms.ModelForm): class Meta: ...

  6. django之forms组件

    在django中forms组件有其强大的功能,里面集合和众多的函数和方法:下面来看一下它的源码 """ Form classes """ f ...

  7. django的forms认证组件

    django的forms认证组件 每个网站的注册界面都需要有相应的"认证"功能,比如说认证注册页面的用户名是否已被注册,二次输入的密码是否一致以及认证用户输入的用户名.邮箱.手机号 ...

  8. django学习~forms

    一 简介 今天咱们来聊聊 django强大的表单功能二 Froms作用   1 自动生成HTML表单元素   2 检查表单数据的合法性   3 如果验证错误,重新显示表单(数据不会重置)   4 数据 ...

  9. python 全栈开发,Day78(Django组件-forms组件)

    一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...

随机推荐

  1. 对转换公式为LaTeX代码要注意什么

    mathtype是一款专业的数学公式编辑工具,理科生专用的工具.mathtype公式编辑器能够帮助用户在各种文档中插入复杂的数学公式和符号.可以轻松的将数学公式转换成LaTex代码,但是转换LaTeX ...

  2. mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?

    需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...

  3. Docker容器的生命周期管理

    https://blog.csdn.net/u010278923/article/details/78751306

  4. kendo-ui的MVVM模式

    摘要: MVVM(Model View ViewModel)是一种帮助开发者将数据从模型分离的设计模式.MVVM的ViewModel负责将数据对象从模型中分离出来,通过这种方式数据就很容易控制数据如何 ...

  5. [Unity3D] 01 - Try Unity3D

    01. Move and Rotate 标准全局坐标系 Keyboard using UnityEngine; using System.Collections; public class NewBe ...

  6. struts开发<struts中的參数传递.三>

    不说废话,直接上干货 1.通过set和get传递參数 添加username 和password两个属性并添加set和get方法 package fzl.user.struts.demo; import ...

  7. 九度 1552 座位问题(递推DP)

    题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻 ...

  8. win10禁止更新的方法

    Windows10强制更新苦恼了很多人,下面提供三种禁止Windows10更新的方法. 禁止Windows update服务 启动任务管理器->选择服务->打开服务. 找到Windows ...

  9. iOS 解决UIScrollView布局问题(布局受statusBar和NavigationBar影响)

    iOS APP中有一个非常好用的功能,那就是当我们在滚动一个UIScrollView滚动了很远很远的时候,假如我们想让UIScrollView回到顶部,我们绝大多数人的做法就是慢慢慢慢的滚动UIScr ...

  10. jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。

    jQuery  Easing 是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动.幻灯片切换等场景应用比较多.它非常小巧,且有多种动画方案供选择,使用简单,而且免费. 引入Eas ...