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()
原创文章 35 获赞 13 访问量 2354

猜你喜欢

转载自blog.csdn.net/Bankofli/article/details/104886551