一:
from django.shortcuts import render from django import forms from app01 import models from django.forms.models import ModelChoiceField class UserModelForm(forms.Form): name=forms.ChoiceField(models.UserInfo.objects.values_list('id','name')) def index(request): form=UserModelForm() return render(request,'userinfo.html',{'form':form})
二:
from django.shortcuts import render from django import forms from app01 import models from django.forms.models import ModelChoiceField class UserModelForm(forms.Form): name=forms.ChoiceField() def __init__(self,*args,**kwargs): super(UserModelForm, self).__init__(*args,**kwargs) self.fields['name'].choices=models.UserInfo.objects.values_list('id','name') def index(request): form=UserModelForm() return render(request,'userinfo.html',{'form':form})
三:
from django.shortcuts import render from django import forms from app01 import models from django.forms.models import ModelChoiceField # Create your views here. class UserModelForm(forms.Form): name=ModelChoiceField(queryset=models.UserInfo.objects.all()) def index(request): form=UserModelForm() return render(request,'userinfo.html',{'form':form})
一中在程序启动后会将数据库信息放入缓存,因此提供给用户的信息不会随着数据库信息的更新而更新
二和三提供给用户的信息会随着数据库信息的更新而更新,因为二中用户每次访问都会创建新的form对象
choicefield接受的数据类型为[()] 或(())
ModelChoiceField接受的数据类型为queryset
生成标签的name属性为form的字段名,id为id_+字段名,value为元组第一个信息,文本内容为元祖第二个信息