1.forms模塊
- 通過forms模塊獲取表單數據
- 通過forms.Formde子類的構造器來接收post數據
- form = RemarkForm(request.POST)
2.必須使form通過驗證,才能取值
- form.is_valid()
- 返回True:通過驗證
- 返回False:爲通過驗證
3.獲取表單數據
- 通過 form.cleaned_data 來接收表單數據
4.forms模塊的高級處理
- 將 models 和 Forms 結合到一起使用
- 在forms.py中創建class繼承自 forms.ModelForm
5.創建內部類 Meta,關聯Model
- model : 指定要關聯的實體類
- fields : 指定從Model中取哪些字段生成控件取值爲 “_ _ all _ _"
6.labels : 指定每個屬性對應的label值
取值爲字典
labels = {
‘uname’:‘登錄名稱’,
… …
}
劃一劃form表單
from django import forms
from user.models import User
from user.models import Profile
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['nickname', 'gender', 'birthday', 'location']
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = '__all__'
#返回的是字典類型,進行清洗,變成PEP8標準格式
def clean_max_distance(self):
#super調用父類的方法
cleaned_data = super().clean()
max_distance = cleaned_data['max_distance']
min_distance = cleaned_data['min_distance']
#判斷輸入的最大值和最小值是否滿足要求
if max_distance < min_distance:
raise forms.ValidationError('max_distance 必須大於等於 min_distance')
else:
return max_distance
def clean_max_dating_age(self):
cleaned_data = super().clean()
max_dating_age = cleaned_data['max_dating_age']
min_dating_age = cleaned_data['min_dating_age']
if max_dating_age < min_dating_age:
raise forms.ValidationError('max_dating_age 必須大於等於 min_dating_age')
else:
return max_dating_age
def modify_profile(request):
'''修改個人資料、交友資料'''
#定義兩個Form表單
user_form = forms.UserForm(request.POST)
profile_form = forms.ProfileForm(request.POST)
#檢查user_form和profile——form
if not user_form.is_valid() or not profile_form.is_valid():
errors = {}
errors.update(user_form.errors)
errors.update(profile_form.errors)
return render_json(errors, err.PROFILE_ERR)
#更新user
# update user set nickname='xxx', gender='male' where id=1;
User.objects.filter(id=request.uid).update(**user_form.cleaned_data)
#更新或創建profile
Profile.objects.update_or_create(id=request.uid,defaults=profile_form.cleaned_data)
return render_json()