需求

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

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 models
 
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')  
        #每次都会去数据库中获取这个列表
index.html加入admin选项
1
<p>{{ obj.admin }}</p>
browser

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

Django--form生成select标签的更多相关文章

  1. Django之model.form创建select标签

    前言 之前我们学习了form表单验证用户输入格式和自动创建HTML,那么如果用户创建select标签时怎么办呢,先来看下这个东西: models.py 数据格式: class UserInfo(mod ...

  2. [oldboy-django][2深入django]后台生成form标签并设置标签的属性

    # Form生成html标签 a. 通过Form生成Input输入框,Form标签,以及submit标签还是要在前端写的, 但是Form标签内的Input标签可以在后台实现:只需要按以下步骤 - vi ...

  3. [oldboy-django][2深入django]学生管理(Form)-- 添加(美化Form表单:通过form给前端标签添加属性)

    1 在student_list添加一个a标签, <p><a href="/app01/add_student" class="btn btn-prima ...

  4. [oldboy-django][2深入django]Form总结

    1 form总结 # Form数据格式验证 - 原理: - 流程 a.写类LoginForm(Form): 字段名 = fields.xxFields() # 验证规则,本质是正则表达式(fields ...

  5. django form组件 cookies,session

    django form组件 渲染标签  就是组件里面的字段在前端展示叫做渲染标签 校验数据  用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...

  6. Django—Form两种保留用户提交数据的方法

    用户在网页上进行表单填写时,有可能出现某项填写错误.一般情况下,用户在未发觉错误的情况下点击提交,则此表单的内容会清空,用户不得不再重新填写,这样的用户体验是及其糟糕的. 在此,我们有2种方法将用户的 ...

  7. [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. select标签 禁止选择但又能通过序列化form表单传值到后台

    前言 项目开发中,我们可能会碰到这样的需求:select标签,禁止选择但又能通过序列化form表单传值到后台,但是当我们使用disabled="disabled"时发现,无法序列化 ...

  9. 前端 HTML form表单标签 select标签 option 下拉框

    <select></select> select里面通常跟option配合使用 <!DOCTYPE html> <html lang="en&quo ...

随机推荐

  1. Python Requests快速入门

    迫不及待了吗?本页内容为如何入门Requests提供了很好的指引.其假设你已经安装了Requests.如果还没有, 去 安装 一节看看吧. 首先,确认一下: Requests 已安装 Requests ...

  2. Swift-ScrollView轮播图的简易封装和使用

    不多说,轮播图是开发中必要一项技能,直接上代码: 先说我的思路:首次继承于UIScrollView类自定义MyScrollView,在MyScrollView里自定制方法,func creatMySc ...

  3. (转)App工程结构搭建:几种常见Android代码架构分析

    关于Android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角度,看到整齐的代码,优美的分层总是一种舒服的享受的. 从艺术的角度看,其实我们是在追求一种美. 本文先分析几个当 ...

  4. 机器人操作系统(ROS)教程22:ROS的3D可视化工具—rviz

    rviz是ROS中的一个3D可视化工具,有了它就可以把你用代码建的机器人模型转化为可视的3D模型. 首先需要安装: rosdep install rviz 然后编译rviz: rosmake rviz ...

  5. VM 修改 virtualHW.version

    1.修改BT5R3-GNOME-VM-32.vmdk文件 将encoding="windows-1252"修改为encoding="GBK" 将ddb.virt ...

  6. contiki学习心路历程【转】xukai871105 大神

    https://blog.csdn.net/xukai871105/article/details/9072993

  7. java中绘图-----那个鼠标等的监听我还是不太会,,好苦恼啊。不知道这些监听事件是怎么区分的

    总结::监听到底该怎么用 事件的区分是靠判断还是 package com.a.b; //我想实现,当我点击一个按钮时,这个frame里可以画出实心的矩形 import java.awt.Color; ...

  8. jsp数据显示分页

    从数据库获得数据就不写了,直接写如何进行分页,为了方便,把方法和实体类都写到一个java文件里面了 这只是一种简单的分页方法,肯能会有比较多的bug 这是java里的构造实体类和方法, public ...

  9. MyBatis 工具 pndao - 自动写 SQL

    pndao的原理并不复杂,是基于MyBatis的方法命名约定来生成SQL,并且写入MyBatis需要的XML. 写之前会判断是否已经存在XML或者注解,如果已经存在则略过此方法,所以无论是注解还是XM ...

  10. Oracle 10g RAC 如何配置 VIP IPMP

    metalink note 283107.1介绍了如何设置VIP的IPMP,此处记录一下设置过程. o Existing 10g RAC installation ^^^^^^^^^^^^^^^^^^ ...