Как заполнить 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