Я Django новичок и пытаюсь изменить https://dev.to/zxenia/django-inline-formsets-with-class-based-views-and-crispy-forms-14o6 для поддержки нескольких наборов одного и того же типа с использованием префикса.
Форма отображается нормально, но нажимает "Сохранить" a POST инициируется, но ничего не происходит. POST больше, чем GET (который отражает мои добавленные данные), но ничего не сохраняется / создается.
class BudgetCreate(CreateView):
model = Budget
template_name = 'budget/budget_create.html'
form_class = BudgetForm
success_url = '/location'
def get_context_data(self, **kwargs):
data = super(BudgetCreate, self).get_context_data(**kwargs)
if self.request.POST:
data['cat1'] = LineItemFormSet(self.request.POST, prefix='cat1')
data['cat2'] = LineItemFormSet(self.request.POST, prefix='cat2')
data['cat3'] = LineItemFormSet(self.request.POST, prefix='cat3')
data['cat4'] = LineItemFormSet(self.request.POST, prefix='cat4')
data['cat5'] = LineItemFormSet(self.request.POST, prefix='cat5')
data['cat6'] = LineItemFormSet(self.request.POST, prefix='cat6')
data['cat7'] = LineItemFormSet(self.request.POST, prefix='cat7')
else:
data['cat1'] = LineItemFormSet(prefix='cat1')
data['cat2'] = LineItemFormSet(prefix='cat2')
data['cat3'] = LineItemFormSet(prefix='cat3')
data['cat4'] = LineItemFormSet(prefix='cat4')
data['cat5'] = LineItemFormSet(prefix='cat5')
data['cat6'] = LineItemFormSet(prefix='cat6')
data['cat7'] = LineItemFormSet(prefix='cat7')
return data
def form_valid(self, form):
context = self.get_context_data()
cat1 = context['cat1']
cat2 = context['cat2']
cat3 = context['cat3']
cat4 = context['cat4']
cat5 = context['cat5']
cat6 = context['cat6']
cat7 = context['cat6']
with transaction.atomic():
form.instance.created_by = self.request.user
self.object = form.save()
if cat1.is_valid() and cat2.is_valid() and cat3.is_valid() and cat4.is_valid() and \
cat5.is_valid() and cat6.is_valid() and cat7.is_valid():
cat1.instance = self.object
cat1.save()
cat2.instance = self.object
cat2.save()
cat3.instance = self.object
cat3.save()
cat4.instance = self.object
cat4.save()
cat5.instance = self.object
cat5.save()
cat6.instance = self.object
cat6.save()
cat7.instance = self.object
cat7.save()
return super(BudgetCreate, self).form_valid(form)
def get_success_url(self):
return reverse_lazy('budget:budget_detail', kwargs={'pk': self.object.pk})
Шаблон должен отражать любые ошибки:
{% extends "base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="container">
<div class="card">
<div class="card-header">
Create Budget
</div>
<div class="card-body">
{% crispy form %}
</div>
</div>
</div>
{% endblock content %}
, но ничего не отображается .
Может кто-нибудь подсказать мне реализацию form_valid () для нескольких форм и наборов форм?
Спасибо, -MN