【问题标题】:django- how two def in the same views.py pass the datadjango-同一个views.py中的两个def如何传递数据
【发布时间】:2016-01-18 20:40:38
【问题描述】:

在同一个views.py中,如果我有2个“def”,如何将第一个def中的数据输入结果传递给第二个def以过滤数据库?

举个例子:

def input(request):
    if request.method == 'POST':
        form = InputForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            age = form.cleaned_data['age']

            return redirect('result')
       else:
            print form.errors
   else:
       form=InputForm()             
   return render_to_response('inputform.html',{'form': form},context_instance=RequestContext(request))


class ResultView():
    context_object_name = 'result_list'
    template_name = 'result_list.html'

    # Here how can I get the form entry (name/age)from above def to filter the result?                    
    queryset=Result.filter(name=name,age=age)
    scor=Result.objects.filter(queryset)
    subject.Result.objects.filter(queryset)

    def get_context_data(self, **kwargs):
        context = super(ResultView, self).get_context_data(**kwargs)

        return context

网址

url(r'^result_list/$',ResultView.as_view(),name='result'),
url(r'^input', 'result.views.input',name='input'),

在上面的代码中,queryset=Result.filter(name=name,...),这里无法从“def input”获取表单数据。非常感谢您的帮助,谢谢。

【问题讨论】:

    标签: python django forms


    【解决方案1】:
    class ResultView(ListView):
        context_object_name = 'result_list'
        template_name = 'result_list.html'
    
        def get_context_data(self, **kwargs):
            context = super(ResultView, self).get_context_data(**kwargs)
            return context
    
        def get_queryset(self):
            if self.request.method == 'POST':
                form = InputForm(self.request.POST)
                if form.is_valid():
                    name = form.cleaned_data['name']
                    age = form.cleaned_data['age']
                    return Result.filter(name=name, age=age)
            return super(ResultView, self).get_queryset()
    

    【讨论】:

    • 感谢@EchoUA 团队。如果我想在提交表单后保留重定向功能。如何将 redirect('result') 与返回的 super(ResultView, self).get_queryset() 结合起来?
    • 如果你想在验证表单后重定向到带有参数“age”和“name”的结果,你可以使用这个方案gist.github.com/anonymous/52918ccb37bc18d03e63
    • 只需替换 {{DupontView.total_asset}} 上的 {{ result.total_asset }}{{DupontView.sales}} 上的 {{ result.sales }}
    • 嗨@EchoUA团队,在你的方案中,在“reverse('result')”部分,你放了不同的“?”和“&”在字段名称前,我可以对所有字段使用一个(& 或?)吗?
    • 您好@EchoUA 团队,我按照您的建议更新了代码,但出现了一些新问题。请您帮忙回答一下:stackoverflow.com/questions/33250458/…。非常感谢~
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 2021-09-26
    • 2019-09-10
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多