Сохранение нескольких форм с использованием одного уникального идентификатора

Я пытаюсь сохранить несколько форм для spe_form, используя уникальный ID для gen_form одновременно, используя шаблон ниже, нажав на кнопку save. Не могли бы вы помочь мне с этим?

Код работает только для одного сохранения для единственной формы spe_form, но не для многих

def preps(request, prep=None):
    
    if prep_General:
        info = Mprep.objects.get(id=prep)
    else:
        info = Mprep()
    
    # Handle form submissions
    if request.method == 'POST':
        # Instantiate the forms with submitted data
        gen_form = MGForm(request.POST, instance=info)
        spe_form = MSForm(request.POST, prefix='preps')

        if gen_form.is_valid() and spe_form.is_valid():
            gen_form.save()
            preps = spe_form.save(commit=False)
            preps.prep = info
            preps.save()
            messages.success(request, 'Information saved successfully')
            return redirect('preps_view', prep=info.id)
        else:
            messages.error(request, 'Error in saving information')
    else:

        gen_form = MGForm(instance=info)
        spe_form = MSForm(prefix='preps')

    context = {'gen_form': gen_form, 'spe_form': spe_form}
    return render(request, 'base.html', context)


<div class="container mt-5">

  <h1>Measurements Prep</h1>
  <form method="post">
    {% csrf_token %}
    <div class="form-row">
      <div class="form-group col-4">
        {{ gen_form.project|as_crispy_field }}
      </div>
      <div class="form-group col-4">
        {{ gen_form.cell|as_crispy_field }}
      </div>
      <div class="form-group col-4">
        {{ gen_form.sample|as_crispy_field }}
      </div>
    </div>
    <br>
    <table id="myTable" class="table" data-toggle="table" data-mobile-responsive="true" data-pagination="true"
      data-height="460">
      <tbody>
        <tr>
          <th>{{ spe_form_set.name|as_crispy_field }}</th>
          <th>{{ spe_form_set.value|as_crispy_field }}</th>
          <th>{{ spe_form_set.unit|as_crispy_field }}</th>
        </tr>
      </tbody>
      <button id="add-row-button" class="btn btn-primary mt-4">Add Row</button>
    </table>

    <input type="submit" class="btn btn-primary mt-4" value="Save">
  </form>

</div>

<script>
  document.getElementById("add-row-button").addEventListener("click", function () {
    var tableBody = document.getElementById("myTable");
    var newRow = document.createElement("tr");
    newRow.innerHTML = `
      <td>{{ spe_form_set.name|as_crispy_field }}</td>
      <td>{{ spe_form_set.value|as_crispy_field }}</td>
      <td>{{ spe_form_set.unit|as_crispy_field }}</td>
    `;
    tableBody.appendChild(newRow);
  });
</script>

Вы можете сделать id None для экземпляра prep, чтобы сохранить его как новую запись в базе данных:

def preps(request, prep=None):
   ...
   if request.method == 'POST':
        ...
        if gen_form.is_valid() and spe_form.is_valid():
            gen_form.save()
            preps = spe_form.save(commit=False)
            preps.prep = info
            prep.id = None # <-- here
            preps.save()
Вернуться на верх