Как заполнить FormView начальными данными?

Читая документацию Django, я пытаюсь одновременно практиковаться. Сегодня я читаю Formsets; https://docs.djangoproject.com/en/4.0/topics/forms/formsets/

Теперь я пытаюсь заполнить generic 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

В результате возникает ошибка "in _construct_form defaults['initial'] = self.initial[i]
". KeyError: 0"

Вопрос в том, как мне заполнить набор форм в FormView начальными данными?

Вам нужно передать начальные данные в виде списка, где i-ый элемент является начальными данными для i-ой формы. Таким образом, если вы хотите передать только начальные данные для первой формы, вы передадите это как:

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

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

Если вы хотите передать его в качестве начальных данных для всех форм, вы можете использовать параметр form_kwargs:

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

    def get_form_kwargs(self):
        data = super().get_form_kwargs()
        data['form_kwargs'] = {'initial': {'value1': 'foo', 'value2': 'bar'}}  # 🖘 initial for all forms
        return data
Вернуться на верх