将数据从一个视图传递到另一个 Django

Posted

技术标签:

【中文标题】将数据从一个视图传递到另一个 Django【英文标题】:pass data from one view to another django 【发布时间】:2020-02-10 22:00:32 【问题描述】:

我的应用中有两个视图

Views.py

def selectwarehouse(request):
    z = Warehouse.objects.all()
    return render(request, 'packsapp/employee/selectwarehouse.html', 'z': z)

def warehouse_details(request):
    queryset = AllotmentDocket.objects.filter(send_from_warehouse = #dynamic(from the selectwarehouse.html))

    return render(request, 'packsapp/employee/allotwarehousedetails.html', 'query': queryset)

selectwarehouse.html

% block content %

<label>Select Warehouse<label>
    <select id="the-id">
        % for i in z %
        <option value=" i "> i </option>
        % endfor %
        <form method="post" novalidate>
            % csrf_token %
            <a href="% url 'employee:warehouse_details' %" class="btn btn-outline-secondary" role="button">Proceed</a>
            <a href="% url 'employee:products_table' %" class="btn btn-outline-secondary" role="button">Nevermind</a>
        </form>
    </select>
    % endblock %

URLS.py

    path('select-warehouse/', selectwarehouse, name='select_warehouse'),
    path('warehouse-details/', warehouse_details, name='warehouse_details'),

我希望当一个人从下拉列表中选择“仓库”并单击 Proceed 时,它应该将该值传递给 def warehouse_details 并将该值传递给分配查询集。我该怎么做?

【问题讨论】:

您需要在&lt;form ...&gt;中指定action="url/to/warehouse_details/view"。你的&lt;option&gt;s 应该是表单的一部分 @YevhenKuzmovych 而不是href,我应该将它定向到warehouse_details 视图? 是的,我想是的。否则,该按钮只会将您重定向到带有GET 而不是POSTemployee:warehouse_details URL,并且没有来自&lt;option&gt;s 的任何信息。 @YevhenKuzmovych 我是 django 模板的新手,你能告诉我怎么做吗? 您的 html 表单由内而外,&lt;a/&gt; 元素在 html 表单处理中没有任何作用。了解 HTML 以使用 django 很重要。阅读一些教程。 developer.mozilla.org/en-US/docs/Learn/HTML/Forms/… 【参考方案1】:

MAKE Proceed 作为隐藏输入

模板

 % block content %

<label>Select Warehouse<label>
    <select id="the-id">
        % for i in z %
        <option value=" i "> i </option>
        <form method="post" novalidate>
            % csrf_token %
             <input type="hidden" name="object_id" value=" i.id ">
  <input class="btn btn-outline-secondary" name="Proceed" type="submit" 
     value="Proceed"> 
            <a href="% url 'employee:products_table' %" class="btn btn-outline- 
        secondary" role="button">Nevermind</a>
        </form>
    % endfor %
    </select>
    % endblock %

views.py

def selectwarehouse(request):
    z = Warehouse.objects.all()
    return render(request, 'packsapp/employee/selectwarehouse.html', 'z': z)

def warehouse_details(request):
    queryset = AllotmentDocket.objects.get(id=request.POST.get('object_id'))
    //Now to access the element in queryset write (queryset.'attribute name')
    return render(request, 'packsapp/employee/allotwarehousedetails.html', 'query': 
    queryset

检查这是否有效

尝试打印查询集,看看输出是什么。

【讨论】:

不会,我只是看到'endfor'在输入之前,这就是为什么它不知道'i'是什么,在 i之后取'endfor'现在已经编辑了代码检查 您还没有在表单标签中添加任何操作,添加它,否则它将无法正常工作 或者给你的回购我会解决它。 我不能给你回购,对不起,请帮我添加操作到继续按钮

以上是关于将数据从一个视图传递到另一个 Django的主要内容,如果未能解决你的问题,请参考以下文章

将数据从视图控制器传递到另一个视图控制器

Laravel 将数据从一个视图传递到另一个视图

如何将数据从表视图传递到另一个视图控制器

将 ImageData 从一个视图控制器传递到另一个视图控制器

将数据从 viewcontroller tableview 传递到另一个视图控制器

将活动之间的数据从列表视图传递到另一个活动