Python 如何在Django中使用来自同一表单的数据预填充表单

Python 如何在Django中使用来自同一表单的数据预填充表单,python,django,django-forms,django-views,Python,Django,Django Forms,Django Views,我有一个表单,它调用自身并在底部显示结果。我希望表单中填写来自同一表单的上一次POST请求的数据,这样我就不必在提交后再次键入相同的数据 我花了一些时间才弄明白,所以我会再次自我回答。其实很简单。诀窍是要知道把它放在哪种方法中。首先,我在\uuuu init\uuuu()方法和post()方法中尝试了它,但没有任何运气 get_initial()方法实现了其名称所暗示的功能。 在视图的self.request对象中有一个名为POST的字典。您只需从那里获取数据,并将其放入self.initial

我有一个表单,它调用自身并在底部显示结果。我希望表单中填写来自同一表单的上一次POST请求的数据,这样我就不必在提交后再次键入相同的数据


我花了一些时间才弄明白,所以我会再次自我回答。

其实很简单。诀窍是要知道把它放在哪种方法中。首先,我在
\uuuu init\uuuu()
方法和
post()
方法中尝试了它,但没有任何运气

get_initial()
方法实现了其名称所暗示的功能。 在视图的
self.request
对象中有一个名为
POST
的字典。您只需从那里获取数据,并将其放入
self.initial
字典中即可。在这个示例中,我使用了三个字段:文本、名称和发布

class MyFormView(FormView):
    template_name = 'form_template.jinja2'
    form_class = MyForm

    def get_initial(self):

        super().get_initial()

        if self.request.POST:
            self.initial["text"] = self.request.POST.get("text")
            self.initial["name"] = self.request.POST.get("name")
            self.initial["publication"] = self.request.POST.get("publication")

        return self.initial.copy()


s/from/FormView/-FormView不是表单。如果self.request.POST要替换为
如果self.request.method==“POST”
,在这种情况下不会有太大变化,但这是检查请求方法的正确方法(您可能有一个未提交数据的POST请求,在这种情况下,
request.POST
将为空,因此在布尔上下文中被视为false).@Brunodesshuilliers实际上他做的更好。这不是一个视图函数,它是一个基于类的视图方法,在这种方法中,如果提交了数据,他希望填充初始数据。@Melvyn我知道这不是一个视图函数,我确实读了问题并完全理解了上下文,谢谢。@Brunodesshuilliers然后不建议依赖e面有效条件。模式是“如果有数据,将其复制到初始值”。您建议将其更改为“如果方法是post,则很可能有数据,因此即使没有数据,也将其复制到初始值”。这只是一个错误的建议。@Melvyn“那么不要建议依赖副作用条件”=>由于
request.POST如果方法不是“POST”,则不应填充
request.POST,测试请求方法而不是
request.POST的非空性。POST
\u是“依赖于副作用条件”(
request.POST
被填充可能是产生POST请求的副作用)。