Django: Представление двух форм на одной странице и использование данных из первой формы во второй форме

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

HTML:

<form method="GET">
    {% csrf_token %}


<label for="stat1">Most Important Stat:</label>
<select name="stat1" id="stat1">
  <option value="Stat 1">Stat 1</option>
  <option value="Stat 2">Stat 2</option>
  <option value="Stat 3">Stat 3</option>
  <option value="Stat 4">Stat 4</option>
  <option value="Stat 5">stat 5</option>
</select>

<label for="stat2">Second Most Important Stat:</label>
<select name="stat2" id="stat2">
   <option value="Stat 1">Stat 1</option>
   <option value="Stat 2">Stat 2</option>
   <option value="Stat 3">Stat 3</option>
   <option value="Stat 4">Stat 4</option>
   <option value="Stat 5">stat 5</option>
</select>

<label for="stat3">Third Most Important Stat:</label>
<select name="stat3" id="stat3">
   <option value="Stat 1">Stat 1</option>
   <option value="Stat 2">Stat 2</option>
   <option value="Stat 3">Stat 3</option>
   <option value="Stat 4">Stat 4</option>
   <option value="Stat 5">stat 5</option>
</select>

 <label for="stat4">Fourth Most Important Stat:</label>
 <select name="stat4" id="stat4">
   <option value="Stat 1">Stat 1</option>
   <option value="Stat 2">Stat 2</option>
   <option value="Stat 3">Stat 3</option>
   <option value="Stat 4">Stat 4</option>
   <option value="Stat 5">stat 5</option>
 </select>

 <label for="stat5">Fifth Most Important Stat:</label>
 <select name="stat5" id="stat5">
    <option value="Stat 1">Stat 1</option>
    <option value="Stat 2">Stat 2</option>
    <option value="Stat 3">Stat 3</option>
    <option value="Stat 4">Stat 4</option>
    <option value="Stat 5">stat 5</option>
 </select>

 <button onclick="createBracket(request)" >Submit</button>
 </form>

 <form method="post">
  {% csrf_token %}
  <div class="txt_field">
    <input id="name" type="text" name="name" required>
    <label>Bracket Name</label>
  </div>

  <input type="Submit" value="Save Bracket">
 </form>

views.py:

def createBracket(request, user_id):
   user = get_object_or_404(User, pk=user_id)


   # choosing the stats
   if request.method == 'GET' and 'stat1' in request.GET:
      stat1 = request.GET.get('stat1')
      stat2 = request.GET.get('stat2')
      stat3 = request.GET.get('stat3')
      stat4 = request.GET.get('stat4')
      stat5 = request.GET.get('stat5')

      ordered_stats = [stat1, stat2, stat3, stat4, stat5]
      print(ordered_stats)

      bracket = ["Virginia-Tech", "Colgate", "Arkansas", "Florida", "Drexel",         "Illinois", "Utah St", "Texas Tech"]
      context = {'user': user, 'user_id': user_id, 'bracket': bracket}
   else:
      context = {'user': user, 'user_id': user_id, 'bracket': bracket}

   print(stat1)
   # naming and saving the bracket
   if request.method == 'POST' and 'name' in request.POST:
       save_form = SaveForm(request.POST)
       print("saved the form")
       if save_form.is_valid():
  
           database = Bracket.objects.create(
               bracket_name=save_form.cleaned_data['name'],
               user=user,
               bracket=bracket,
               stat1=stat1, # this won't work bc stat1 isn't assigned
               stat2=stat2,
               stat3=stat3,
               stat4=stat4,
               stat5=stat5,
           )
           database.save()
           context = {'user': user, 'user_id': user_id, 'bracket': bracket,
                       'save_form': save_form}

    else:
       save_form = SaveForm()
       context = {'user': user, 'user_id': user_id, 'bracket': bracket, 'save_form': save_form}

    return render(request, 'project/createBracket.html', context)

Итак, когда createBracket вызывается без ничего, вы показываете абсолютно пустую форму. Пользователь заполняет свою статистику, нажимает submit на верхней форме, получает ту же страницу, на которой снова отображается только что введенная статистика, плюс ваша скобка. Она выбирает скобку и название для нее, а затем отправляет нижнюю форму? Зачем вам нужно, чтобы первая форма показывала ей именно те значения, которые она только что ввела? Не можете ли вы просто отобразить одну пустую форму с заполненной скобкой и сделать все это в одной форме? То есть, я полагаю, вы можете использовать JavaScript для предотвращения дефолта нижней формы и получить значения верхней формы перед отправкой, что решило бы вашу проблему, но я не совсем понимаю необходимость двух отправок. Вы ничего не делаете с данными при первом сабмите.

Edit: на самом деле при GET submit что вы делаете со статистикой? Вы не возвращаете их обратно в контекст и не используете их как начальные значения полей формы, так что они просто теряются?

Вернуться на верх