На моей странице в приложении django есть несколько форм, так что основная форма имеет подформы. При отправке я проверяю, чтобы все формы были действительными, и если какая-либо из форм недействительна, она возвращает функцию form_invalid, содержащую основную форму.
Но проблема в том, что если какая-либо из подчиненных форм недопустима, она не отображает никаких ошибок и поля также сбрасываются.
Вот код, когда форма отправляется.
if player_form.is_valid() and stats_form.is_valid() and contacts_form.is_valid() and extra_stats_form.is_valid():
player = player_form.save(commit=False)
stats_form = PlayerStatsForm(request.POST, instance=player.stats)
stats = stats_form.save()
contacts_form = PlayerContactsForm(request.POST, instance=player.contacts)
contacts = contacts_form.save()
extra_stats_form = PlayerExtraStatsForm(request.POST, instance=player.extra_stats)
extra_stats = extra_stats_form.save()
return redirect(self.get_success_url())
else:
return self.form_invalid(player_form)`
Функция get_context_data, которая добавляет sub_forms в основную форму игрока.
context.update({
'object_title_plural': 'Players',
'list_headings': self.list_headings,
'form_panel_title': 'Add Player',
'save_button_text': 'Add Player',
'search_form': self.form_defaults(PlayerSearchForm()),
'sub_forms': (self.form_defaults(self.get_form(PlayerStatsForm)),
self.form_defaults(self.get_form(PlayerContactsForm)),
self.form_defaults(self.get_form(PlayerExtraStatsForm)))
})
Вот шаблон, в котором визуализируются подформы.
{% block display_subforms %}
{% if sub_forms %}
{% include "dashboard/includes/sub_form.html" %}
{% endif %}
{% endblock %}