Django--form生成select标签
需求
Django--form表单中的select生成方法,如果select中的选项不固定,需要怎么操作。
速查
1、固定select选项
forms
|
1
2
3
|
class 表单类名称(forms.Form): host_type=forms.IntegerField( widget=forms.Select(choices=列表或元组) |
2、动态select选项
forms
|
1
2
3
4
5
6
7
|
admin = forms.IntegerField( widget=forms.Select() )def __init__(self,*args,**kwargs): #执行父类的构造方法 super(ImportForm,self).__init__(*args,**kwargs) self.fields['admin'].widget.choices = models.SimpleModel.objects.all().values_list('id','username') #每次都会去数据库中获取这个列表 |
知识点
select的form格式是元组括元组,提交的是value(数字),字段类型是forms.IntegerField,插件widget=forms.Select(),属性choices=元组列表
面向对象中静态字段只要加载到内存就不会改变了,私有字段每次提交都刷新,原理是实例化对象的时候把静态字段进行了deepcopy到对象里,修改的时候就私有字段修改,静态字段不变。
详细
1、生成最基本的select标签
templates/home/index.html
1
2
3
4
5
6
7
8
9
<body>
<h1>录入数据</h1>
<form action="/index/">
<p>{{ obj.host_type }}</p>
<p>{{ obj.hostname }}</p>
</form>
<h1>数据列表</h1>
...
</body>
app01/urls.py
1
2
3
4
from app01.views import account,home
urlpatterns = [
url(r'^index/$',home.index ),
]
app01/views/home.py
1
2
3
4
from app01.forms import home as HomeForm
def index(request):
obj = HomeForm.ImportForm(request.POST)
return render(request,'home/index.html',{'obj':obj})
app01/forms/home.py
1
2
3
4
5
6
7
8
9
10
from django import forms
class ImportForm(forms.Form):
HOST_TYPE_LIST = (
(1,'物理机'),
(2,'虚拟机')
)
host_type=forms.IntegerField(
widget=forms.Select(choices=HOST_TYPE_LIST)
)
hostname = forms.CharField()
browser
select的form格式是元组括元组,提交的是value(数字),字段类型是forms.IntegerField,插件widget=forms.Select(),属性choices=元组列表
面向对象中静态字段只要加载到内存就不会改变了,私有字段每次提交都刷新,原理是实例化对象的时候把静态字段进行了deepcopy到对象里,修改的时候就私有字段修改,静态字段不变。
1、生成最基本的select标签
templates/home/index.html
|
1
2
3
4
5
6
7
8
9
|
<body> <h1>录入数据</h1> <form action="/index/"> <p>{{ obj.host_type }}</p> <p>{{ obj.hostname }}</p> </form> <h1>数据列表</h1> ...</body> |
app01/urls.py
|
1
2
3
4
|
from app01.views import account,homeurlpatterns = [ url(r'^index/$',home.index ),] |
app01/views/home.py
|
1
2
3
4
|
from app01.forms import home as HomeFormdef index(request): obj = HomeForm.ImportForm(request.POST) return render(request,'home/index.html',{'obj':obj}) |
app01/forms/home.py
|
1
2
3
4
5
6
7
8
9
10
|
from django import formsclass ImportForm(forms.Form): HOST_TYPE_LIST = ( (1,'物理机'), (2,'虚拟机') ) host_type=forms.IntegerField( widget=forms.Select(choices=HOST_TYPE_LIST) ) hostname = forms.CharField() |
browser

2、可变的select标签
app01/models.py
|
1
2
3
|
class SimpleModel(models.Model): username = models.CharField(max_length=64) password = models.CharField(max_length=64) |
初始化数据库
Django-Path > python manage.py makemigrations
Django-Path > python manage.py migrate
数据库app01_simplemodel表,随便造两条数据

app01/forms/home.py中添加:
|
1
2
3
4
5
6
7
8
9
|
from app01 import modelsadmin = forms.IntegerField( widget=forms.Select() )def __init__(self,*args,**kwargs): #执行父类的构造方法 super(ImportForm,self).__init__(*args,**kwargs) self.fields['admin'].widget.choices = models.SimpleModel.objects.all().values_list('id','username') #每次都会去数据库中获取这个列表 |
index.html加入admin选项
|
1
|
<p>{{ obj.admin }}</p> |
browser

当往数据库表中添加一个管理员时,看select标签选项


Django--form生成select标签的更多相关文章
- Django之model.form创建select标签
前言 之前我们学习了form表单验证用户输入格式和自动创建HTML,那么如果用户创建select标签时怎么办呢,先来看下这个东西: models.py 数据格式: class UserInfo(mod ...
- [oldboy-django][2深入django]后台生成form标签并设置标签的属性
# Form生成html标签 a. 通过Form生成Input输入框,Form标签,以及submit标签还是要在前端写的, 但是Form标签内的Input标签可以在后台实现:只需要按以下步骤 - vi ...
- [oldboy-django][2深入django]学生管理(Form)-- 添加(美化Form表单:通过form给前端标签添加属性)
1 在student_list添加一个a标签, <p><a href="/app01/add_student" class="btn btn-prima ...
- [oldboy-django][2深入django]Form总结
1 form总结 # Form数据格式验证 - 原理: - 流程 a.写类LoginForm(Form): 字段名 = fields.xxFields() # 验证规则,本质是正则表达式(fields ...
- django form组件 cookies,session
django form组件 渲染标签 就是组件里面的字段在前端展示叫做渲染标签 校验数据 用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...
- Django—Form两种保留用户提交数据的方法
用户在网页上进行表单填写时,有可能出现某项填写错误.一般情况下,用户在未发觉错误的情况下点击提交,则此表单的内容会清空,用户不得不再重新填写,这样的用户体验是及其糟糕的. 在此,我们有2种方法将用户的 ...
- [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- select标签 禁止选择但又能通过序列化form表单传值到后台
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁止选择但又能通过序列化form表单传值到后台,但是当我们使用disabled="disabled"时发现,无法序列化 ...
- 前端 HTML form表单标签 select标签 option 下拉框
<select></select> select里面通常跟option配合使用 <!DOCTYPE html> <html lang="en&quo ...
随机推荐
- hadoop1.x和2.x的一些主要区别
当我们安装完毕hadoop2的时候,我们看到为啥没有jobtracker,这是因为hadoop2中已经没有jobtracer了,而是产生了yarn,yarn是什么那,可以看yarn详解,我们为什么已经 ...
- Java Platform SE binary已停止运行 Can't load AMD 64-bit.dll on a IA 32-bit platform错误
这个我是在junit测试web项目时候遇到的问题,然后今天遇到一位网友也遇到了,报问题的是A卡了,所以今天做个记载,方便遇到问题的人,因为,之前我个人遇到这个问题,在网上找了很久都没有找到. 上面这个 ...
- 理解SQL【转http://blog.jobbole.com/55086/】
很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...
- ACM学习历程—51NOD 1685 第K大区间2(二分 && 树状数组 && 中位数)
http://www.51nod.com/contest/problem.html#!problemId=1685 这是这次BSG白山极客挑战赛的E题. 这题可以二分答案t. 关键在于,对于一个t,如 ...
- Nginx 反向代理与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在Nginx 配置详解中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Ngin ...
- 第21篇 ubuntu安装ftp服务器(转载)
ubuntu安装ftp服务器 1: 安装vsftpd ~$ sudo apt-get install vsftpd ubuntu10.10自己装了,这步省略. 2: 配置vsftpd 2.1 修改vs ...
- nginx config的多个config配置
在我们的一台服务器上,一个nginx服务器下面可能跑着许多许多的项目; 那么就需要配置多个对应的配置 端口号 已经文件入库目录等等 那么项目多了以后,把这些项目都写到一个文件里 到后期难以查看与管理 ...
- DM8127 更改调试串口为UART2
1.uboot修改 1)修改宏定义 /*include/config/ti8148_evm.h*/ #define CONFIG_SYS_NS16550_COM2 0x48024000 #define ...
- python3+ros api
官方文档:https://wiki.mikrotik.com/wiki/Manual:API_Python3 # !/usr/bin/env python# -*- coding:utf-8 -*-# ...
- 内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别
kmalloc vmalloc kzalloc get_free_page()是内核空间申请内存空间函数 malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree() ...