Django несколько форм и формы с CreateView - form_valid () - PullRequest
0 голосов
/ 14 апреля 2020

Я 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...