基于 Web 请求预填充 Django 表单

Posted

技术标签:

【中文标题】基于 Web 请求预填充 Django 表单【英文标题】:Pre-populating Django form based on web request 【发布时间】:2015-12-07 19:21:52 【问题描述】:

我正在尝试根据用户的 Web 请求预填充 Django 表单。例如,当他们单击超链接 - http://myapp:8000//23 时,它会返回一个预填充的 django 表单,其中包含与 id 23 相关的所有数据。关于如何执行此操作的任何提示或想法,一步一步将是优秀。提前致谢。

曼尼

【问题讨论】:

【参考方案1】:

您正在寻找的内容在 Django 文档中,正是这个 Django Modelforms。

首先需要定义一个url来获取对象:

url(r'^client/(?P<foo>\w4)$', views.view_function, name='element'),

而视图函数应该是这样的:

def view_function(request, foo):
 obj = get_object_or_404(MyModel, id=foo) # Django shortcut
 form = NameForm(instance=obj)

 return render(request, 'mytemplate.html', 'form': form)

这样,您将预先填充表单以显示在您的应用中。您必须编写 Modelform 的方式在文档中。

您还可以将新数据保存到该 obj。以下代码是相同的函数,但会检查请求是 GET 还是 POST。

def view_function(request, foo):
   obj = get_object_or_404(MyModel, id=foo) # Django shortcut
   if request.method == 'GET':
       # The request uses the GET method, the form is pre-populate with the data of the Model if exists else send an Error 404
       form = NameForm(instance=obj)
       return render(request, 'mytemplate.html', 'form': form)

   elif request.method == 'POST':
       # The request uses POST, we will get the new data and if it is correct then we will save to the DB else we will show the same page as GET but this time will show the errors.
       form = NameForm(request.POST, instance=obj)
       if form.is_valid():
           form.save()
           return render(request, 'changesSaved.html', )
       else: # This render will display the errors
           return render(request, 'myTemplate.html', 'form': form)

Django 快捷键功能:https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/

【讨论】:

嘿,谢谢,这正是我想要的。 :) @manis 记得将问题标记为已解决。祝你有美好的一天;)

以上是关于基于 Web 请求预填充 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django-extra-views 将请求传递到内联表单集中

如何将 Django 的 CSRF 令牌添加到 jQuery POST 请求的标头?

使用 Django 从数据库预填充 HTML 表单表

处理对 Django Web 应用程序的计算密集型请求,可能使用预分叉 RPC 服务器

预填充 Django(非模型)表单

如何预填充 Django 更新表单并将其写回数据库