2016-04-19 3 views
1

в моем шаблоне пользователь может добавить (с кнопкой добавления :)) еще один экземпляр той же формы (пустой один из cc), но когда я нажимаю «Отправить» (save), то последний, который был введен, сохраняется. views.py:Сохранение нескольких экземпляров одной и той же формы в django

def form_valid(self, form): 
     self.object = form.save() 
     return HttpResponseRedirect(self.get_success_url()) 

шаблона:

<form action="{{ action }}" class="form-horizontal form-inline" method="post" enctype="multipart/form-data"> 

    {% csrf_token %} 

{% if object.id %} 
    <legend>Edit Object2</legend> 
{% else %} 
    <legend>Add Object2</legend> 
{% endif %} 

    {{ form }} 

    <div class="objects2"> 
     {% for objects2_form in form %} 
     <div id="objects2-{{ forloop.counter0 }}"> 


     </div> 
     {% endfor %} 
    </div> 

<div class="form-actions"> 
    <a href="#" id="add-object2" class="btn btn-info add-object2" >Add object2</a> 
    <button type="submit" class="btn btn-primary">Submit</button> 
</div> 
</form> 

EDIT: Я решил, что легче размещать один объект в то время и при сохранении визуализации той же странице. Проблема в том, что только 1 (последняя) форма показана на странице вместо всех. (Все сохранены в db). И как показать пустую форму как последнюю?

EDIT2: мне удалось показать все:

object2 = object2Model.objects.all() 
     return render_to_response('xxx.html', 
          {'form': form, 'object2': object2}, context_instance = RequestContext(self.request)) 

Таким образом, только одна вещь остается .. Как показать пустую форму ?? (без использования набора форм)

ответ

0

Атрибуты данных ваших форм формы будут повторяться name. Так, например, последний <input type="text" name="firstname"> перезапишет все предыдущие поля тем же именем name="firstname".

Существует не какой-либо встроенный способ иметь одинаковые формы полей рендеринга дважды внутри того же элемента <form/> DOM.

Я бы оказать forms.Form экземпляров в различные <form/> элементов и имею один присоединились представить <button onclick="submitAllForms()">, который вызывает Javascript, чтобы представить все существующие <forms/> объектов.

Это был бы самый чистый способ, особенно для ваших серверных моделей.

Итак, вы можете просто выбрать пустой элемент DOM формы и скопировать его. Затем, когда пользователь выбирает добавить другой экземпляр формы, вы можете использовать эту копию в качестве шаблона для добавления на страницу другой формы. У вас может быть любое количество одинаковой формы таким образом, без дополнительной работы.

Затем, когда пользователь отправляет форму, просто выберите все элементы DOM <form> и вызовите .sumbit() для каждого. И ваш сервер будет видеть только обычные forms.Form экземпляров.