Как вы используете несколько наборов форм в одном представлении? - PullRequest
1 голос
/ 05 февраля 2010

Мне нужно использовать несколько наборов форм, используя собственные формы для одного представления. Я понимаю, что вам нужно добавить префиксы форм, чтобы они не конфликтовали друг с другом. Однако, когда я пытаюсь добавить префикс форм, возникает ошибка ValidationError.

Способ создания наборов форм заключается в передаче списка форм в представление, а затем создании списка наборов форм с помощью formset_factory. Затем я создаю список инициализированных наборов форм.

Вот мой код:

def edit_stuff2(request, business_id, template_name="business/edit_info.html",
                *args, **kwargs):
    business = BusinessDoc.get(business_id)
    FormSets=[]
    formsets=[]
    info_forms = [(EmailDocForm,'emails'), (URLDocForm,'urls')]
    for form in info_forms:
        FormSets.append(formset_factory(form[0], max_num =0,
                                        can_delete=True, extra=1))
    if request.user:
        if request.method == "POST":
            for FormSet,tup in zip(FormSets,info_forms):
                FormSet.form = staticmethod(curry(tup[0], business))
                formsets.append(FormSet(request.POST,prefix=tup[1],
                                        initial = business[tup[1]]))
                if formsets[-1].is_valid():
                    for form in formsets[-1].forms:
                        form.save()
                        #request.user.message_set.create(message=u"Check it")
            formsets = []
            for FormSet, tup in zip(FormSets, info_forms):
                FormSet.form = staticmethod(curry(tup[0], business))
                formsets.append(FormSet(prefix=tup[1], initial=business[tup[1]]))
        return direct_to_template(request, template=template_name,
                       extra_context={'business': business,
                                      'formsets': formsets,
                                      'info_type': info_type})
    else:
        return HttpResponseRedirect(reverse('home'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...