Django中forms模塊用法

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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章