簡體   English   中英

Django外鍵-第二種形式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM