Django之model.form创建select标签
2016-09-20 17:04
561 查看
前言
之前我们学习了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--form生成select标签
- Django--form生成select标签
- Django学习笔记3 用ModelForm创建基于表单的页面
- input、select等Form标签对其问题
- django forms.modelform
- django创建model
- django使用model创建数据库表使用的字段
- rails中使用form.select创建动态的下拉菜单 推荐
- django modeladmin override ModelForm
- python学习之--Django--连接数据库mysql创建model
- Django学习笔记(二)App创建之Model
- Django 基础(二),Model连表、Form自定义错误信息、Ajax操作
- 关于django中ModelForm的instance
- django表单使用forms.ModelForm
- Django ModelForm的使用
- Django学习系列之ModelForm
- JS创建select的optgroup和fieldset标签
- 关于django内置的ModelForm小记
- django学习之三:model模型创建
- django model form