使用Djang将主键传递到下一页

2024-09-30 22:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有以下文件:

在视图.py公司名称:

def home(request):
    return render(request, 'home/index.html')

def add(request):
    if request.method == 'POST': # If the form has been submitted...
        # ContactForm was defined in the previous section
        form1 = AddEventForm(request.POST) # A form bound to the POST data
        #person = AddPersonForm(request.POST) # A form bound to the POST data
        if form1.is_valid(): # All validation rules pass
            form = form1.save()
            request.session['event_data'] = request.POST
            #request.session['event_data2'] = form
            return HttpResponseRedirect('/add_person/')
            #return HttpResponseRedirect(reverse('/add_person', kwargs={'PK':form.pk}))
    else:
        form1 = AddEventForm() # An unbound form
        person = AddPersonForm() # A form bound to the POST data

    return render(request, 'add/add.html', {
        'form1': form1, 'person': person,
    })


def add_person(request):

    event_data = request.session.get('event_data')
    if request.method == 'POST':
        person = AddPersonForm(request.POST)
    else:
        person = AddPersonForm()

    return render(request, 'add_person/add_person.html',{'event_data': event_data, 'person': person,})

在模型.py公司名称:

^{pr2}$

这个问题困扰了我好几个小时。我有一个初始页面,用户在其中输入有关事件的一些信息。如果检查通过,则保存表单并生成主键。然后用户被重定向到另一个页面,在那里他们填写了一个关于他们在那里遇到的人的表格。问题是我无法找到将主键传递到第二页(add_people)的方法。我需要主键,因为它是我的Person表中的外键,我需要使用它来预填充add_people页中的eventID。在

我最初以为保存表单后主键应该在request.POST中,但实际上不是。在


Tags: theformeventadddatareturnrequestdef
3条回答

如果表单被验证,则必须将session值设置为eventID,而不是{}

if form1.is_valid(): # All validation rules pass
    form1.save(commit=False) 
    request.session['event_data'] = form1.cleaned_data['eventID']
    form1.save()
    return HttpResponseRedirect('/add_person/')

使用表单输入作为参数在表中查询主键。获得密钥后,将其作为请求对象中的会话变量传递。在

下面是同一个问题的答案,但是使用基于类的视图而不是基于函数的视图:How do I pass a parent id as an fk to child object's ModelForm using generic class-based views in Django?。在该示例中,外键通过作为URL中的参数从父页传递到子页。子页面将其作为表单参数(在表单的__init__函数中)捕获,将其存储在隐藏字段中以供显示(通过视图类的get_context_data和表单模板中的html代码),然后将其作为表单的一部分提交。在

相关问题 更多 >