一:
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為元組第一個信息,文本內容為元祖第二個信息