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)