簡體   English   中英

Django 在一個頁面上使用多個 forms 傳遞外鍵

[英]Django passing Foreign Keys with multiple forms on a page

我對 Django 還很陌生,並且在如何從多表單視圖的表單輸入中獲取主鍵方面有些掙扎。 我無法將密鑰放入數據庫。

我有 3 個模型:Human、Human_notes 和 Location。 我的表格由這些單獨的模型組成,例如 forms 在一個視圖中。 我想我應該在保存后從每個表單中收集主鍵,並將其作為外鍵應用於下一個表單數據......

        <form action="human-add" method="POST">
            {% csrf_token %}
            {{ human_form.as_p }}
            {{ location_form.as_p }}
            {{ human_notes_form.as_p }}
            <button type="submit" class="save btn btn-success">Save</button>
        </form>

人類有 FK 到位置...:

class Human(models.Model):
    intaker = models.ForeignKey(User, default=None, on_delete=models.SET_NULL, null=True)
    location = models.OneToOneField('Location', on_delete=models.SET_NULL, null=True,   related_name='humans')

Human_notes 對 Human 具有 FK...(也許這將成為 Human 中的 FK 但最初認為一個人有很多音符):

class HumanNotes(models.Model):
    human = models.ForeignKey(Human, on_delete=models.SET_NULL, null=True, related_name='humans_notes')

我的看法是:

def human_add(request):
    if request.method == 'POST':
        human_form = HumanForm(request.POST)
        location_form = LocationForm(request.POST)
        human_notes_form = HumanNotesForm(request.POST)

        if human_form.is_valid() and location_form.is_valid() and human_notes_form.is_valid():
            human_form.save(commit=False)
            location_form.save()
            locationKey = location_form.id  
            human_notes_form.save(commit=False)
            human_notes_form.intaker = request.user
            human_notes_form.save()
            noteKey = human_notes_form.id
            human_form.location = locationKey
            human_form.note = noteKey
            human_form.intaker = request.user 
            human_form.save()
            return redirect('/intake/success-form') 
        else:
            context = {
                'human_form': human_form,
                'location_form': location_form,
                'human_notes_form': human_notes_form,
            }
    else:
        context = {
            'human_form': HumanForm(),
            'location_form': LocationForm(),
            'human_notes_form': HumanNotesForm(),
        }
    return render(request, 'intake/human-add.html', context)

我得到的唯一錯誤是'LocationForm' object 沒有屬性'id' - 但我什至明確添加了它(認為我不應該也不想讓它可見):

class HumanNotesForm(forms.ModelForm):
    class Meta:
        model = HumanNotes
        fields = ['id','intaker','note'] 

class LocationForm(forms.ModelForm):
    class Meta:
        model = Location
        fields = ['id','st1','st2','cty','county','state','zip','lat','long','img','img_nm','img_id']  

任何指導表示贊賞。

這成功了......就像從 forum.djangoproject.com 獲得出色的指導一樣。 需要了解 forms 和型號之間的差異。

def human_add(request):
    if request.method == 'POST':
        human_form = HumanForm(request.POST)
        location_form = LocationForm(request.POST)
        human_notes_form = HumanNotesForm(request.POST)

        if human_form.is_valid() and location_form.is_valid() and human_notes_form.is_valid():
            loc = location_form.save()
            hum = human_form.save(commit=False) 
            humnote = human_notes_form.save(commit=False)
            hum.intaker = request.user
            hum.location = loc   #.id NOTE YOU NEED THE ENTIRE INSTANCE
            human_form.save()
            humnote.intaker = request.user
            humnote.human = hum #.id NOTE YOU NEED THE ENTIRE INSTANCE
            human_notes_form.save()
            return redirect('/intake/success-form')
        else:
            context = {
                'human_form': human_form,
                'location_form': location_form,
                'human_notes_form': human_notes_form,
            }
    else:
        context = {
            'human_form': HumanForm(),
            'location_form': LocationForm(),
            'human_notes_form': HumanNotesForm(),
        }
    return render(request, 'intake/human-add.html', context)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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