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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

͝͝͝͝͝͝͝͝͝͝L Y H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值