在Djang中的视图之间传递值

2024-10-04 03:16:12 发布

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

简单场景-firstview有一个表单(firstform),其中有一个字段“reference”。在secondview中,有一个单独的表单(secondform),它也有一个字段“reference”。我想将secondview中“reference”的值初始化为=firstview中“reference”的值

我是否能够在不通过URL传递该参数的情况下执行此操作

我使用Python2.7作为参考

这就是我尝试过的。它似乎不是这样工作的,我得到了一个“不存在”的错误,我知道这意味着我实际上没有得到那个值

views.py

def firstview(request):  

    if request.method == "POST":
        form = FirstForm(request.POST) #this form contains 'reference'
        if form.is_valid():
            form.save()
            return redirect('secondview')


def secondview(request):
    form = SecondForm(request.POST)

    if request.method == "POST":
        if form.is_valid():

            form.save()

            ...



    reference_id =  request.POST.get('reference') #this is how Im trying to get reference from the firstview

    form = SecondForm(initial={

         'reference': Orders.objects.get(reference=reference_id), #this is where im getting "does not exist" error

         })
   ....

    return render(request, 'manifest_readonly.html', context)

Tags: form表单getifisrequestsavedef
2条回答

我不知道您为什么不想在URL中传递它,但如果不想,您可以使用会话

def firstview(request):  
    ...
    if form.is_valid():
        form.save()
        request.session["reference"] = form.cleaned_data["reference"]
        return redirect('secondview')

def secondview(request):
    ...
    reference_id =  request.session.pop('reference')

激活django.contrib.sessions.middleware.SessionMiddleware,然后可以使用request.session字典在视图之间传递数据,如下所示:

def firstview(request):
    ...
    form = FirstForm(request.POST) #this form contains 'reference'
    ...
    request.session['selected_form'] = form
    ...

def secondview(request):
    ...
    form = request.session.get('selected_form')
    # now use the form data here
    ...

相关问题 更多 >