前言

之前我们学习了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运行一次以后,将静态字段的值保存在了内存中,而不是保存在数据库中,为了能实时提取数据,我们要使用构造方法在每次创建对象时对静态字段重新赋值!

最新文章

  1. avalonjs
  2. STL之容器(1)
  3. 【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...
  4. git分支管理和stash
  5. 邦定lua函数到C里做为回调
  6. stm32上的Lava虚拟机开发进度汇报(1)
  7. andriod系统裁剪心得
  8. 详解Objective-C中委托和协议
  9. NOIP2011-普及组复赛模拟试题-第二题-买票
  10. F# 之旅(上)
  11. javascript检测当前浏览器是否为微信浏览器
  12. JsDoc脚本注释文档生成
  13. Linux - ansible 安装
  14. [POI2005] SKA-Piggy Banks
  15. BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
  16. 封装PHP验证码方法
  17. android -------- java虚拟机和Dalvik虚拟机
  18. boost--BOOST_AUTO、typeof、result_of
  19. 浅谈C#中的深拷贝(DeepCopy)与浅拷贝(MemberwiseClone)
  20. pycharm在创建py文件时,自动添加文件头注释

热门文章

  1. 哈希表(python)
  2. Spring Data JPA 提供的各种Repository接口作用
  3. TDOA基站 之 时间同步
  4. 50、[源码]-Spring容器创建-Bean创建完成
  5. js原型模式和继承
  6. HTML 009 CSS
  7. Greenplum 查看表的分区键与分区类型
  8. html5文件夹上传源码
  9. C#中的线程(一)入门 转载
  10. Jenkins automate workflow