Django的forms.ModelForm自定义特殊条件认证。

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = '__all__'

    def clean_max_distance(self):          # 方法的名字必须clean开头
        cleaned = super().clean()
        if cleaned['max_distance'] < cleaned['min_distance']:
            raise forms.ValidationError(u'max_distance必须要大于min_distance') # raise输出错误
        else:
            return cleaned['max_distance']

    def clean_max_dating_age(self):
        cleaned = super().clean()
        if cleaned['max_dating_age'] < cleaned['min_dating_age']:
            raise forms.ValidationError(u'max_dating_age必须要大于min_dating_age')
        else:
            return cleaned['max_dating_age']    # 必须把比较过的值返回

 api里面的函数如下,同过调用forms对象的errs输出相关不符合条件的信息,输出形式为dict形式

def set_profile(request):
    '''修改个人资料,及交友资料'''
    user = request.user
    user_form = UserForm(request.POST)
    if user_form.is_valid():
        user.__dict__.update(user_form.cleaned_data) # 跟新对象数据
        user.save()
    else:
        return render_json(data=user_form.errors, code=stat.UserDataErr)

    profile_form = ProfileForm(request.POST)
    if profile_form.is_valid():
        '''通过本地保存,减少数据库的一次查询,user_form应该也可以用这种方法。'''
        profile = profile_form.save(commit=False)  # 先本地缓存过滤后的正确数据
        profile.id = user.id                   # 通过ID修改确保数据一直
        profile.save()              # 保存数据到数据库
    else:
        return render_json(data=profile_form.errors,code=stat.ProfileDataErr)

 

转载于:https://www.cnblogs.com/sidianok/p/11575056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值