如何将从表单提交中检索到的参数作为参数传递给 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 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

HTML 5 输入类型提交不会作为参数传递给控制器

如何通过不提交当前会话事务将 DataTable 作为参数传递给存储过程?

如何使用 GET 方法将 GET 参数传递给 Laravel?

如何将参数传递给servlet

如何将日期对象作为第一个也是唯一的输入参数传递给 PL-SQL

Redux:将参数传递给可以从状态中检索的动作?