0

我有一个模型:

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。我也尝试了其他一些方法,但我仍然在 HttpResponse 中得到 90

也许使用干净的方法是错误的,我应该做点别的!

真正的代码是巨大的,我在这里总结了它,问题的其他方面在这里没有解释。这就是为什么我更喜欢并期望得到一个响应,在该响应中我被告知如何在表单定义中使用它,而不是其他方法,例如在视图中转换它。

4

1 回答 1

1

在您的clean方法中,您将计算方法的结果分配给self.cleaned_data
而您返回cleaned_datanot 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
于 2019-08-05T06:42:27.630 回答