Django之model.form创建select标签
2024-10-19 09:51:41
前言
之前我们学习了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运行一次以后,将静态字段的值保存在了内存中,而不是保存在数据库中,为了能实时提取数据,我们要使用构造方法在每次创建对象时对静态字段重新赋值!
最新文章
- avalonjs
- STL之容器(1)
- 【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...
- git分支管理和stash
- 邦定lua函数到C里做为回调
- stm32上的Lava虚拟机开发进度汇报(1)
- andriod系统裁剪心得
- 详解Objective-C中委托和协议
- NOIP2011-普及组复赛模拟试题-第二题-买票
- F# 之旅(上)
- javascript检测当前浏览器是否为微信浏览器
- JsDoc脚本注释文档生成
- Linux - ansible 安装
- [POI2005] SKA-Piggy Banks
- BZOJ.1109.[POI2007]堆积木Klo(DP LIS)
- 封装PHP验证码方法
- android -------- java虚拟机和Dalvik虚拟机
- boost--BOOST_AUTO、typeof、result_of
- 浅谈C#中的深拷贝(DeepCopy)与浅拷贝(MemberwiseClone)
- pycharm在创建py文件时,自动添加文件头注释