добавление форм из набора форм на лету со стороны сервера - PullRequest
0 голосов
/ 16 марта 2011
{% for form in formset.forms %}
    <div class="elements">
           {{form.as_ul}}
     </div>
     <input type="image" value="ADD" id="add_more">
{% endfor %}

вот что у меня есть в js

$('#add_more').click(function(){
      if($('.app-form').valid()){
      cloneMore('div.ul:last','prefix');
    }
});

, а остальное такое же, как ссылка эта ссылка Я пытаюсь отобразить формы, когда пользователь нажимает «ДОБАВИТЬ». Когда нажата кнопка «Добавить», она переходит в представление, а также печатает еще одну форму используя jquery. в представлениях.

  def start(request):
        qd = request.POST
        ffact = formset_factory(ModelForm,extra=int(qd['prefix-TOTAL_FORMS']))
        fset = ffact(qd,prefix='prefix')
        if fset.is_valid():
           return render_to_response('test.html',{'formset':fset})
        else:
           return render_to_response('test.html',{'formset':fset})

Но jquery приводит к появлению дополнительной формы, даже если отправленная форма недействительна, а представление приводит к сообщениям об ошибках для всех недопустимых полей формы. Как я могу заставить ждать действия клика или как-то общаться с результатом проверки views.py и только потом выводить лишнюю форму? Цени это.

1 Ответ

0 голосов
/ 17 марта 2011

это можно сделать двумя способами: либо со стороны пользователя, либо из бэкэнда, но на мой вопрос НЕТ. Нет способа [я найду один] связать jquery / django для этой цели. Я пытаюсь сделать все это на стороне сервера: в views.py:

query_dict = request.POST
tot = int(querydict['prefix-TOTAL_FORMS'])
   ffact = formset_factory(ModelForm,extra=tot)
   fset = ffact(query_dict,prefix='prefix')
   if fset.is_valid():
      ffact = formset_factory(ModelForm,extra=1)
      fset = ffact(initial=fset.cleaned_data,prefix='prefix')
      return render_to_response('test.html',{'formset':fset,})

в test.html:

{% for form in fset.forms%}
    {{form.as_ul}} or anything that works for you
{% endfor %}

это сработало для меня, возможно, есть более эффективный способ. Я более чем счастлив узнать об этом.

...