将数据从一个视图传递到另一个 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
并将该值传递给分配查询集。我该怎么做?
【问题讨论】:
您需要在<form ...>
中指定action="url/to/warehouse_details/view"
。你的<option>
s 应该是表单的一部分
@YevhenKuzmovych 而不是href,我应该将它定向到warehouse_details 视图?
是的,我想是的。否则,该按钮只会将您重定向到带有GET
而不是POST
的employee:warehouse_details
URL,并且没有来自<option>
s 的任何信息。
@YevhenKuzmovych 我是 django 模板的新手,你能告诉我怎么做吗?
您的 html 表单由内而外,<a/>
元素在 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的主要内容,如果未能解决你的问题,请参考以下文章
将 ImageData 从一个视图控制器传递到另一个视图控制器