我有一个模型:
class PastStudy(Model):
grade_average = FloatField(null=True)
我有一个以下模型:
class PastStudyForm(ModelForm):
class Meta:
model = PastStudy
fields = ('grade_average', )
我所看到的:
...
if request.POST:
past_study_form = PastStudyForm(request.POST)
if past_study_form.is_valid():
return HttpResponse(past_study_form.cleaned_data['grade_average'])
else:
profile_filter_past_study_form = ProfileFilterPastStudyForm()
...
我需要的是,我想为pastStudyform编写一种干净的方法,以防万一我以90的平均成绩输入,httpresponse将其转换为两个0-20的渐变方案并返回18。我尝试了这个,但我仍然得到90不是18
class PastStudyForm(ModelForm):
class Meta:
model = PastStudy
fields = ('grade_average', )
def clean(self):
cleaned_data = super().clean()
grade_average = self.cleaned_data['grade_average']
self.cleaned_data['grade_average'] = grade_average/5
return cleaned_data
和此:
class PastStudyForm(ModelForm):
class Meta:
model = PastStudy
fields = ('grade_average', )
def clean_grade_average(self):
grade_average = self.cleaned_data['grade_average']
data = grade_average/5
return data
但是,我仍然得到90。
也许使用干净的方法是错误的,我应该做其他事情!
真正的代码很大,我在这里总结了它,此处没有解释问题的其他方面。这就是为什么我更喜欢并期望得到我在表单定义中建议如何响应的原因,而不是在视图中进行转换的其他方法。
在您的clean
方法中,您将计算方法的结果分配给self.cleaned_data
,
当您返回cleaned_data
而不是self.cleaned_data
时。
它是不同的变量。
而是尝试一下:
self.cleaned_data = super().clean()
grade_average = self.cleaned_data['grade_average']
self.cleaned_data['grade_average'] = grade_average/5
return self.cleaned_data