前言

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

models.py 数据格式:

class UserInfo(models.Model):
caption=models.CharField(max_length=16) class UserType(models.Model):
username=models.CharField(max_length=32)
pwd=models.IntegerField
user_type=models.ForeignKey('UserInfo')

views.py:

from django.shortcuts import render, HttpResponse
from s19 import models
from django import forms # Create your views here. class IndexForm(forms.Form): c = [
(1,'ceo'),
(2,'coo'),
]
user_info_id = forms.IntegerField(widget=forms.Select(choices=c)) def index(request):
#创建模拟用户
# for i in range(10):
# models.UserInfo.objects.create(caption='CE'+str(i))
form = IndexForm()
return render(request,'index.html',{'form':form})

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>index</h1>
{{ form.user_info_id }}
</body>
</html>

如果这么写,我们可以看到页面上有select标签实现,但这种方式是在内存里,如果在数据库中我们怎么来实现呢?

数据库提取,通过form实现HTML页面

首先要直到value_list,models中使用会将对象提取为元组模式,我们可以将对象中的id,caption 提取出来.

from django.shortcuts import render, HttpResponse
from s19 import models
from django import forms # Create your views here. class IndexForm(forms.Form): def __init__(self,*args,**kwargs):
super(IndexForm,self).__init__(*args,**kwargs)
self.fields['user_info_id'].widget.choices = models.UserInfo.objects.all().values_list('id','caption')
c = models.UserInfo.objects.all().values_list('id','caption')
user_info_id = forms.IntegerField(widget=forms.Select(choices=c)) def index(request):
# for i in range(10):
# models.UserInfo.objects.create(caption='CE'+str(i))
form = IndexForm()
return render(request,'index.html',{'form':form})

需要注意一点:在上述代码中我们在类中添加了一条构造方法,使用父类的构造方法,将静态字段重新赋值,为什么呢?因为在在IndexForm的类中,我们取值是通过静态字段取值的,django运行一次以后,将静态字段的值保存在了内存中,而不是保存在数据库中,为了能实时提取数据,我们要使用构造方法在每次创建对象时对静态字段重新赋值!

Django之model.form创建select标签的更多相关文章

  1. Django 的 model form 组件

    Django 的 model form 组件 Model Form 组件的由来 之前介绍过 Django 的 Form 组件(Django的Form表单)使用方法,Form 组件能够帮我们做三件事: ...

  2. Django的model form组件

    前言 首先对于form组件通过全面的博客介绍,对于form我们应该知道了它的大致用法,这里我们需要明确的一点是,我们定义的form与model其实没有什么关系,只是在逻辑上定义form的时候字段名期的 ...

  3. Django之model模块创建表完整过程

    Django中,与数据库相关的模块是model模块,它提供了一种简单易操作的API方式与数据库交互,它是通过ORM映射的方式来操作数据库,一个类对应数据库一张表,一个类属性,对应该表的一个字段,一个实 ...

  4. Django的model中创建表

    类中的class Meta字段的作用: 第一个作用可以给这个类起名字 在后台的admin中显示这个类名字 class CourseCategory(models.Model): "" ...

  5. js中创建html标签、加入select下默认的option的value和text、删除select元素节点下全部的OPTION节点

    <pre name="code" class="java"> jsp 中的下拉框标签: <s:select name="sjx&qu ...

  6. python3-开发进阶Django-form组件中model form组件

    Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...

  7. 自定义django model form、admin action

    https://www.cnblogs.com/0zcl/archive/2017/03/22/6580279.html 先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin ...

  8. 14 Django之Form和Model Form组件

    一.什么是Form 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...

  9. Django之Model、Form、ModelForm区别

    本节内容: 1:Model               https://www.cnblogs.com/shuai1991/p/10844662.html 2:Form                 ...

随机推荐

  1. Docker那些事儿之编排工具docker-compose

    前面已经讲解过docker的一些基础使用,镜像创建的操作过程,如果大量容器需要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上我们需要找到更好更便捷的使用方式,今天要讲解的容器编排工具d ...

  2. Java:JVM的内存模型

    JVM内存模型 JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的.   1. 堆(Heap) 堆内存是所有线程共有的,可以分为两 ...

  3. 在vscode中进行nodejs服务端代码调试(代码修改自动重启服务端)

    使用到的是nodemon,具体在package.json文件中配置如下: "scripts": { "start": "node ./bin/www& ...

  4. Django --- 与数据库进行交互

    目录 1.静态文件配置 1.什么是静态文件 2.为什么用户在浏览器中输入的网址能够访问到响应的资源?有时候不能访问? 3.如果想要访问静态资源怎么做? 4.手动开设静态文件访问资源 5.关于两个sta ...

  5. 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem——哈希表&&二进制枚举

    题意 有长度为 $n$($1\leq n\leq 36$)的数列,给出 $s$,求和为 $s$ 的子集,保证子集存在且唯一. 分析 答案肯定是来自左右半边两部分组成的. 如果我们用哈希表存一半,计算另 ...

  6. 微信小程序之小技能篇(一)

    1,三目运算改变class值: <view class="{{flag ? 'change' : 'change_after'}}">改变字体颜色</view&g ...

  7. jQuery相关方法8-----解绑事件

    一.解绑事件方法unbind() 用什么方式绑定的事件,最好用对应的方式解绑事件 unbind("事件名字")括号里写上事件名字,就会解除这个事件 unbind()括号里没有参数就 ...

  8. 模拟I2C协议学习点滴之原理框架

    I2C是一种串行总线协议. 目前几种常用的串行总线有UART.SPI和I2C协议.UART协议的总线只有两条,发送(Transmit:TX)和接收(Receive:RX),没有时钟信号,这就要求两位数 ...

  9. [HNOI2004]L语言 字典树 记忆化搜索

    [HNOI2004]L语言 字典树 记忆化搜索 给出\(n\)个字符串作为字典,询问\(m\)个字符串,求每个字符串最远能匹配(字典中的字符串)到的位置 容易想到使用字典树维护字典,然后又发现不能每步 ...

  10. avalon里面倒计时功能2

    // 转格式 timeStamp: function (second_time) { var time = parseInt(second_time) + "秒"; ) { ; ) ...