如何用初始数据填充 FormView?

How to populate FormView with initial data?

边看Django的文档边练习。今天我在读 Formsets; https://docs.djangoproject.com/en/4.0/topics/forms/formsets/

现在我正在尝试用初始数据填充通用 FormView。这是代码:

class ArticleFormView(FormView):
# same here, use FormSet instance, not standard Form
form_class = ArticleFormSet
template_name = 'article_form_view.html'
success_url = "/"

def get_initial(self):
    init_data = {'value1': 'foo', 'value2': 'bar'}
    return init_data

这导致“在 _construct_form 默认值 ['initial'] = self.initial[i]
键错误:0"

所以问题是如何使用初始数据填充 FormView 中的表单集?

您需要将初始数据作为列表传递,其中第 i 个元素是第 i 个表单的初始数据.因此,如果您只想传递第一个表单的初始数据,则将其传递为:

class ArticleFormView(FormView):
    form_class = ArticleFormSet
    template_name = 'article_form_view.html'
    success_url = "/"

    def get_initial(self):
        return <strong>[</strong>{'value1': 'foo', 'value2': 'bar'}<strong>]</strong>  # 🖘 list of dictionaries

如果要将其作为 所有 表单的初始数据传递,可以使用 form_kwargs 参数:

class ArticleFormView(FormView):
    form_class = ArticleFormSet
    template_name = 'article_form_view.html'
    success_url = "/"

    def <b>get_form_kwargs</b>(self):
        data = super().get_form_kwargs()
        data['form_kwargs'] = {'initial': {'value1': 'foo', 'value2': 'bar'}}  # 🖘 initial for all forms
        return data