##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),