Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何修改表单存档数据?_Django_Modelform_Cleaned Data - Fatal编程技术网

Django 如何修改表单存档数据?

Django 如何修改表单存档数据?,django,modelform,cleaned-data,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 =

我有一个模型:

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分

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


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

clean
方法中,您将计算方法的结果分配到
self.cleaned\u数据中,
当您返回
已清理的\u数据时
自清理的\u数据

这是不同的变量

请尝试以下方法:

self.cleaned_data = super().clean()
grade_average = self.cleaned_data['grade_average']
self.cleaned_data['grade_average'] = grade_average/5
return self.cleaned_data

它不起作用了,我仍然得到和以前一样的结果。看起来干净的方法与这种情况无关。我在文档中发现了这一点:Form.clean()在必须为相互依赖的字段添加自定义验证时,在表单上实现clean()方法。请参阅清理和验证相互依赖的字段,例如用法。如果您在响应中返回
过去的研究表
,然后在模板中写入
过去的研究表。成绩平均值
,会发生什么情况?相同的结果?我没有request.POST的模板。我将它作为HttpResponse返回。请坚持这种情况,告诉您在测试的HttpResponse中要写什么,并让您知道结果会是什么