1、Form 组件的作用:
a.对用户提交的数据进行验证(form表单/ajax)
b.保留用户上次输入的信息
c.可以生成html标签(input表单类的标签)
2..由于form组件中每个字段都是类的数据属性(全局变量),在类每次实例化之后,数据属性不会发生改变,会保留上次的更新结果
导致无法动态显示数据库的内容:
from django.shortcuts import render from django import forms from django.forms import fields,widgets from app01.models import Userinfo from app01 import models class CForm(forms.Form): username=fields.CharField(max_length=10, min_length=6, required=True, error_messages={'max_length':'长度超过10位', 'min_length':'长度少于6位', 'required':'需要输入',},) user_id=fields.IntegerField(widget=widgets.Select(choices=models.Userinfo.objects.values_list('id','username')),)#数据库中提取id和username def index(request): obj=CForm() #对Form 进行实例化 return render(request,'index.html',locals())
该方法在类每次实例化之后,数据属性不会发生改变,会保留上次的更新结果导致无法动态显示数据库的内容:
对应的解决办法:
class CForm(forms.Form): username=fields.CharField(max_length=10, min_length=6, required=True, error_messages={'max_length':'长度超过10位', 'min_length':'长度少于6位', 'required':'需要输入',},) user_id=fields.IntegerField(widget=widgets.Select()) def __init__(self,*args,**kwargs): super(CForm,self).__init__(*args,**kwargs) self.fields['user_id'].widget.choices=models.Userinfo.objects.values_list('id','username')#数据库中提取id和username def index(request): obj=CForm() #对Form 进行实例化 return render(request,'index.html',locals())
其他关于form组件的相关资料链接:https://www.cnblogs.com/sss4/p/7112546.html