##1、后端1(从mysql里读取用户类型):
from django import forms
from django.forms import widgets
from django.forms import fields
from app01 import models
from django.forms import ModelChoiceField,ModelMultipleChoiceField
from django.shortcuts import render,redirect,HttpResponse
from django.views.decorators.csrf import csrf_exempt,csrf_protect
class UserForm(forms.Form):
##这里的数据不是数据库里的,但可以让后台处理并写入数据库
user = fields.CharField(required=False,widget=widgets.Textarea(attrs={'class':'c1'}))
pwd = fields.CharField(max_length=12,widget=widgets.PasswordInput(attrs={'class':'c1'}))
# user_type = fields.ChoiceField(choices=[(1,'普通用户'),(2,'超级用户1')])
user_type = fields.ChoiceField(choices=[],widget=widgets.Select)
user_type2 = fields.CharField(widget=widgets.Select(choices=[]))
##以上仅是定义了数据的格式和html样式,需要在以下的def __init__里定义后才能读取mysql里的数据
user_type3 = ModelChoiceField(empty_label='请选择用户类型',queryset=models.UserType.objects.all(),to_field_name='id')
#以上的type3可直接读取数据库里的数据,但只有在models的UserType里添加了以下代码才行:
# def __str__(self):
# return self.name
def __init__(self,*args,**kwargs):
super(UserForm,self).__init__(*args,**kwargs)
self.fields['user_type'].choices=models.UserType.objects.values_list('id','name')
##以上这一行可以直接从数据库里读出user_type的数据出来。
self.fields['user_type2'].widget.choices=models.UserType.objects.values_list('id','name')
##2、后端2(views.py里配):
def UserInfoForm(request):
from app01.forms import UserForm
obj = UserForm()
#函数会从静态对象obj里封装到obj.fields里,里面有user,pwd,user_type
# obj.fields['user_type'].choices = models.UserType.objects.values_list('id','name')
#上面这一句也可以放在UserForm里来更新,所以这里注掉了。
return render(request,'userinfoform.html',{'obj':obj})
##3、前端:
Title{% csrf_token %}
{{obj.user}}
{{obj.pwd}}
{{obj.user_type}}
{{obj.user_type2}}
{{obj.user_type3}}
##4、urls:
url(r'^userinfoform/', views.UserInfoForm),