需求

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库之threading

    This module constructs higher-level threading interfaces on top of the lower level python库之_threadmo ...

  2. 【1】基于quartz框架和Zookeeper实现集群化定时任务系统

    (1)quartz本身可以支持集群化,是基于数据库做协调,现在构想基于zookeeper做协调实现集群化定时系统 流程图如下:

  3. noip积木大赛

    先要覆盖一号位置的高度,(现在你的目的只是想要覆盖一号位置). 每次你可以选区间[l,r]高度+1,这个作为一个操作. 为什么不选的范围大一点,让更多的区间增加高度呢. 所以红色的地方是,在我的目的是 ...

  4. 类数组对象:arguments

    在js中调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的东西里面,那它到底是什么呢? 一.描述 arguments 是一个对应于传 ...

  5. fn project 生产环境使用

    此为官方的参考说明   Running Fn in Production The QuickStart guide is intended to quickly get started and kic ...

  6. Maven无法上传到到私服

    在pom.xml中插入如下代码: <distributionManagement> <repository> <id>nexus</id> <ur ...

  7. JAVA反射调用方法

    1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotation.SetTable ...

  8. [转]HTTP 协议中的 Transfer-Encoding

    本文作为我的博客「HTTP 相关」专题新的一篇,主要讨论 HTTP 协议中的 Transfer-Encoding.这个专题我会根据自己的理解,以尽量通俗的讲述,结合代码示例和实际场景来说明问题,欢迎大 ...

  9. 用Toast来增加调试效率的小技巧

    import android.content.Context; import android.widget.Toast; /** * Created by apple on 10/7/15. */ p ...

  10. H5浏览器播放RTMP直播流

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...