[英]Foreign Key in Django - second Form
我有第二份表格,必須在第一份表格之后提交。 但是我無法保存這兩個模型之間的關系,除非我為提交表單的人提供選擇,選擇了第一個表單的電子郵件。我的想法是直接在后端提供此信息,但是我無法做到這一點。
我的模型太大了,無法在此處發布所有內容,因此,如果有什么可以幫助我提出一個通用想法的,我將感到高興。
我在Django中都使用兩種形式的ModelForm。
我的模型:用戶人員志願者-客戶-員工
我有3種類型的志願者:管理員; 程序; 委員會; 填寫“志願者-用戶-用戶”模型后,我需要進入“志願者管理”或“志願者計划”或“志願者委員會”的下一個表格;
因為用戶也將電子郵件用作主鍵,所以這就是我從管理程序創建外鍵時的值,而modelform給了我選擇電子郵件的權限。 但在數據庫上,僅保留ID供參考。
我的第一個視圖正在處理第一種形式:
def volunteer_form(request):
if request.method == 'POST':
form = VolunteerForm(request.POST)
if form.is_valid():
saving = form.save(commit=False)
saving.password = make_password(form.cleaned_data['password'])
saving.save()
item = saving.id
if saving.person_volunteer_type == 'Program':
return HttpResponse('<script language="JavaScript"> location.href="http://127.0.0.1:8000/login/volunteer_program?id=' + str(item) + '" </script>')
elif saving.person_volunteer_type == 'Admin"]':
return HttpResponse('<script language="JavaScript"> alert("You have sucessful created a new Volunteer"); location.href="http://127.0.0.1:8000/login/clock_in/" </script>')
elif saving.person_volunteer_type == 'Committee':
return HttpResponse('<script language="JavaScript"> alert("You have sucessful created a new Volunteer"); location.href="http://127.0.0.1:8000/login/clock_in/" </script>')
else:
form = VolunteerForm()
return render(request, 'loginPortal/volunteer_form.html', {'form' : form})
在處理第二種形式時:
def volunteer_program(request):
if request.method == 'POST':
form = VolunteerProgramForm(request.POST)
if form.is_valid():
saving = form.save(commit=False)
saving.pvolunteer_personid_id = form.cleaned_data.get('id_pvolunteer_personid_id')
saving.save()
return HttpResponse('<script language="JavaScript"> alert("You have sucessful created a new Volunteer"); location.href="http://127.0.0.1:8000/login/clock_in/" </script>')
elif request.method =='GET':
item = request.GET['id']
form = VolunteerProgramForm()
return render(request, 'loginPortal/volunteer_program.html', {'form' : form , 'item' : item })
else:
form = VolunteerProgramForm()
return render(request, 'loginPortal/volunteer_program.html', {'form' : form })
通用答案,假設您的第二個模型具有第一個模型的ForeignKey。 在您的視圖中執行此操作:
1)驗證第一個表格,如果不通過驗證,則返回錯誤。
2)驗證第二種形式,如果無法通過驗證,則返回錯誤。
3)如果兩個都驗證,請從第一種形式保存實例:
first_instance = first_form.save()
4)保存第二種形式的實例,而無需提交對數據庫的更改:
second_instance = second_form.save(commit=False)
5)在第二個模型實例上更新外鍵:
second_instance.fk_to_first_model = first_instance
6)將第二個實例保存到數據庫
second_instance.save()
7)成功返回!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.