zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    腾讯// 反转字符串
    腾讯//Multiply Strings 字符串相乘
    腾讯//盛最多水的容器
    腾讯//删除排序数组中的重复项
    腾讯//删除排序数组中的重复项
    C语言中的预处理命令
    Python十大应用领域与就业方向
    Python的主要应用领域及应用场景
    Git命令_git status
    Git命令_git add快速添加文件到暂存区
  • 原文地址:https://www.cnblogs.com/sidianok/p/11575056.html
Copyright © 2011-2022 走看看