Джанго вложенные формы - PullRequest
2 голосов
/ 05 июня 2010

У меня есть вид редактирования объекта, который содержит набор форм (один или несколько, если это имеет значение), теперь я хочу создать страницу, которая может отображать несколько форм редактирования объектов и отправить ее в одной форме.

Как правильно решить эту задачу?

1 Ответ

4 голосов
/ 06 июня 2010

Я нашел решение.

Я могу перечислять свои объекты на странице редактирования и использовать разные префиксы для наборов форм на основе этих индексов. Вот пример:

Во-первых, вам нужно перечисление, я добился его, используя то же имя ввода (флажок) с инкрементными значениями:

<input type="checkbox" name="counter" value="0">
...
<input type="checkbox" name="counter" value="1">
...

Счетчик номеров - это набор форм и другие данные серийных номеров:

<!--Ordinary inputs-->
<input type="text" name="data0" value="value0">
<input type="text" name="data1" value="value1">
<!--Formsets-->
<input type="text" id="test0-0-data" name="test0-0-data" value="something">
<input type="text" id="test0-1-data" name="test0-1-data" value="something">
<input type="hidden" name="test0-TOTAL_FORMS" id="id_test0-TOTAL_FORMS" value="2">
<input type="hidden" name="test0-INITIAL_FORMS" id="id_test0-INITIAL_FORMS" value="0">

<input type="text" id="test1-0-data" name="test1-0-data" value="something">
<input type="hidden" name="test1-TOTAL_FORMS" id="id_test1-TOTAL_FORMS" value="1">
<input type="hidden" name="test1-INITIAL_FORMS" id="id_test1-INITIAL_FORMS" value="0">

Тогда, если в коде вы заполняете наборы форм следующим образом:

counter = request.POST.getlist('counter')
for i in counter:
    TestFormset = modelformset_factory(Test, form=TestForm)
    test_formset = TestFormset(request.POST, prefix='test'+i, queryset=Test.objects.none())

Я достиг структуры HTML выше с помощью JavaScript.

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