【问题标题】:How to modify the form filed data?如何修改表单提交的数据?
【发布时间】:2019-12-12 15:34:51
【问题描述】:

我有一个模型:

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

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

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

【问题讨论】:

  • 如果您在回复中返回past_study_form,然后在模板中写入past_study_form.grade_average,会发生什么情况?结果一样吗?
  • 我没有 request.POST 的模板。我将它作为 HttpResponse 返回。请坚持这种情况,并告诉你在 HttpResponse 中写什么来测试,让你知道结果会是什么

标签: django modelform cleaned-data


【解决方案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

【讨论】:

  • 它不起作用,我仍然得到与以前相同的结果
  • 看来 clean 方法与这种情况无关。我在文档中找到了这一点: Form.clean() 当您必须为相互依赖的字段添加自定义验证时,在您的表单上实现一个 clean() 方法。有关示例用法,请参阅清理和验证相互依赖的字段。
猜你喜欢
  • 2010-09-25
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多