Django несколько форм и сохранить ввод данных поля после подачи - PullRequest
1 голос
/ 03 февраля 2011

Я новичок в Django, и у меня есть страница с несколькими формами и кнопками отправки. Как я могу хранить данные в полях других форм, если они отправлены? Обычно, когда я отправляю один, он перенаправляет на ту же страницу, но если что-то было напечатано в полях, теряется. Спасибо.

Это HTML

<head>
    <title>Hello</title>
    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}/static/tabs.css"  />
</head>
<body>
     <h1>Informacion</h1>
     <ol id="toc">
     <li><a href="#page-1"><span>Page 1</span></a></li>
     <li><a href="#page-2"><span>Page 2</span></a></li>
     <li><a href="#page-3"><span>Page 3</span></a></li>
 <li><a href="#page-4"><span>Page 4</span></a></li>
     </ol>
     <div class="content" id="page-1">
        <h2>Page 1</h2>
        <p>Text...</p>
    <form action="." method="POST">{% csrf_token %}
        <table>
    {{ form1.as_table }}
        </table>
        <p><input type="submit" value="Submit"></p>
        </form>
      </div>
      <div class="content" id="page-2">
         <h2>Page 2</h2>
         <p>Text...</p>
         <form action="." method="POST">{% csrf_token %}
     <table>
     </table>
     <p><input type="submit" value="Submit"></p>
         </form>
      </div>
      <div class="content" id="page-3">
         <h2>Page 3</h2>
         <p>Text...</p>
     <form action="." method="POST">{% csrf_token %}
     <table>
     {{ form2.as_table}}
     </table>
     <p><input type="submit" value="Submit"></p>
         </form>
     </div>
     <div class="content" id="page-4">
     <h2>Busqueda</h2>
     <form action="." method="POST">{% csrf_token %}
     <table>
     {{ form2.as_table}}
     </table>
     <p><input type="submit" value="S"></p>

     </div> 
     <script src="{{ MEDIA_URL}}/static/activatables.js" type="text/javascript"></script>
     <script type="text/javascript">
     activatables('page', ['page-1', 'page-2', 'page-3','page-4']);
     </script>

     </body>

Что ж, в java-скрипте есть несколько вкладок для каждой формы, поэтому я хочу сделать так, чтобы при отправке данных для одной формы остальные данные в полях остальных форм оставались, поэтому пользователь не должен набирать его снова или потерять. Заранее спасибо.

в представлении ...

if request.method == 'GET':
    form1 = HcGinecoForm()
    form2 = HolaForm()
else:
    form1 = HcGinecoForm(request.POST)
    form2 = HolaForm(request.POST)
    if form1.is_valid and form2.is_valid():
        form1.save()
        form2.save()
return render_to_response('polls/hola.html',{
                           'form2':form2,
                           'form1':form1
                           })

Пока работает ... спасибо.

Ответы [ 2 ]

4 голосов
/ 03 февраля 2011

Чтобы сохранить значения из нескольких форм из одного POST, вам нужно иметь все поля в одной форме (без использования JavaScript).

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

def my_page(request):
    if request.method == 'GET':
        form1 = Form1()
        form2 = Form2()
        form3 = Form3()
    else:
        form1 = Form1(request.POST)
        form2 = Form2(request.POST)
        form3 = Form3(request.POST)

        if form1.is_valid() and form2.is_valid() and form3.is_valid():
          form1.save()
          form2.save()
          form3.save()
    return render_to_response('my_page.html',
          {'form1' : form1, 'form2' : form2, 'form3' : form3})

При публикации этого действия значения, введенные в любую из этих форм, будут сохранены после публикации.Если вы хотите, чтобы значения не сохранялись, вам нужно будет создать новые экземпляры форм, которые не заполняются из коллекции request.POST.

0 голосов
/ 03 февраля 2011

Хайме, пожалуйста, отправьте несколько фрагментов кода.

Если у вас есть отдельные элементы <form></form>, вы буквально не передаете серверу никаких данных POST от других <form> с, поэтому нет способа сохранить это.

Рассмотрите возможность объединения ваших форм в один <form> блок.

Используя несколько форм django, вы можете убедиться в отсутствии конфликтов имен, используя аргумент prefix конструктора формы.

Префикс: http://docs.djangoproject.com/en/dev/ref/forms/api/#prefixes-for-forms

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