![](/img/trans.png)
[英]Django, 2 forms on one page, one form uses data from the other
[英]Django: Submitting two forms on one page and using data from first form in second form
所以目前我有一個網頁,用戶可以在其中選擇他們想要的統計數據,然后生成一個 March madness 括號。 如果他們決定喜歡這個括號,他們可以命名並保存它。 我想保存括號以及選擇的統計數據。 我的問題是我在一個頁面上有兩個表單,所以當用戶按下保存按鈕時,統計變量都是空的,因為它們的值是在另一個表單的請求中分配的。 基本上第二個表單清除第一個表單中的所有數據,但我想在第二個表單中使用第一個表單中的數據。 這是我的代碼。
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>
視圖.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 被調用而沒有任何內容時,您將顯示一個完全空的表單。 用戶填寫她的統計數據,按下頂部表單上的提交,再次返回同一頁面,顯示她剛剛輸入的統計數據,以及您的括號。 她選擇括號,並為其命名,然后提交底部表格? 為什么您需要提交的第一個表單向她顯示她剛剛輸入的確切值? 你不能只顯示一個空的表格並填充你的括號並以一種形式完成整個事情嗎? 我的意思是我想你可以使用 JavaScript 來防止底部表單的默認值,並在發布之前獲取頂部表單值,這將解決你的問題,但我不太明白需要兩次提交。 你沒有對第一次提交的數據做任何事情。
編輯:實際上在 GET 上提交你對統計數據做了什么? 您沒有將它們放回上下文中,也沒有將它們用作初始表單字段值,所以它們只是丟失了?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.