如何修改表格归档数据?

时间:2019-08-05 06:12:37

标签: django modelform cleaned-data

我有一个模特:

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。

也许使用清洁方法是错误的,我应该做些其他事情!

真正的代码非常庞大,我在这里已对其进行了总结,而此处未解释该问题的其他方面。这就是为什么我希望并希望得到一个响应,在该响应中建议在表单定义中进行操作,而不是在视图中进行转换之类的其他方法。

1 个答案:

答案 0 :(得分:1)

在您的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