如何将从表单提交中检索到的参数作为参数传递给 django 中的函数
Posted
技术标签:
【中文标题】如何将从表单提交中检索到的参数作为参数传递给 django 中的函数【英文标题】:How to pass parameters retrieved from form submit as arguments to a function in django 【发布时间】:2012-03-16 17:11:30 【问题描述】:我刚开始学习 django。我从 django 模型创建了一个表单。单击提交按钮后,数据将存储在数据库中。现在我想要的是类似于下面给出的:
#view.py
def contact(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
user = form.save()
return HttpResponseRedirect("/contact/create_db")
#urls.py
(r'^contact/$', views.contact),
(r'^contact/create_db$', views.do_create),
现在,当我在 views.py 中定义 do_create 函数时,我想像这样传递参数(用户表单的用户数据):
def do_create(request, password, dbname, admin_password, confirm_password, demo_data=False, language=None, **kw):
这可以使用 django.这怎么可能实现。
【问题讨论】:
【参考方案1】:您不需要将它们传递到视图中。您想将它们传递到表单中。而你已经在这样做了:
form = UserForm(request.POST)
您将 POST 数据传递到表单中。如果您想对这些数据做一些事情,请在表单验证后使用form.cleaned_data
字典。阅读docs 也是一个好主意。
【讨论】:
Acutally 我的问题是如何在另一个函数中检索提交的数据,而不是在同一个函数中。请注意,作为回报 HttpResponseRedirect("/contact/create_db") create_db in urls.py 将使用另一个名为 do_create 的函数。正是在这个 do_create 函数中,我将检索我提交的数据。对不起我的英语 @user1053786 这里不需要重定向。在form.save
方法中保存东西。【参考方案2】:
您在这里要问的只是如何在后续视图中获取保存的user
的值。
嗯,这很容易。保存用户后,它(与任何模型实例一样)将获得 pk
值。您可以在后续视图的 URL 中使用它。
url(r'^contact/create_db/(?P<user_id>\d+)/$', views.do_create, 'do_create'),
在contact
:
from django.shortcuts import redirect
...
user = form.save()
return redirect('do_create', kwargs='user_id': user.pk)
在do_create
:
def do_create(request, user_id):
user = User.objects.get(pk=user_id)
注意我将 URL 名称和参数传递到 redirect
的方式,而不是对 URL 进行硬编码。
【讨论】:
以上是关于如何将从表单提交中检索到的参数作为参数传递给 django 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
如何通过不提交当前会话事务将 DataTable 作为参数传递给存储过程?
如何使用 GET 方法将 GET 参数传递给 Laravel?