0

我有一些与标准 django 表单输入字段一起出现的复杂 GUI 元素(例如可以突出显示多天的自定义日历)。我想处理来自这些复杂表单的数据 I/O 以及 Django 表单。

以前,在保存或呈现 Django 表单后,我会使用 AJAX 请求来处理我的 HTML 表单上的这些自定义 GUI 元素,但这会导致大量问题和自定义 AJAX 编码。在 Django 表单中处理复杂交互小部件的好方法是什么?

4

3 回答 3

1

不确定我是否完全理解,但您可以通过 javascript 将 UI 的值保存到表单上的隐藏元素中。这可以在他们选择 UI 中的值或提交表单时完成。假设 JQuery 在提交数据发送之前使用 submit() 保存的伪代码:

$('#myForm').submit(function(){
  // get the value of your UI
  var calendarValue = calendarWidget.getValue()

  // #calendarData is the hidden field
  $('#calendarData').val(calendarValue)
})

这显然需要 JS,但使用 UI 元素也是如此。

于 2009-03-17T14:56:36.447 回答
1

您的问题非常含糊,因此我建议您阅读有关编写自定义字段的 Django 文档,希望这可以帮助您入门。您可能还想研究编写自定义小部件。不幸的是,文档有点缺乏,但谷歌搜索带来了几篇有用的博客文章,包括这篇文章。

于 2009-03-17T15:00:32.897 回答
1

根据您将 Django Form 子类输出到 HTML 页面的方式,您有三个选项。

第一个根本不涉及形式。任何 html 表单输入都将在 request.POST 中结束,因此您可以在那里访问它们。没错,它们不会绑定到您的 Form 子类,因此您必须使用自定义表单构造函数手动注入该值,或者在使用 request.POST 实例化它之后在您的 Form 对象上设置一些属性。这可能是最不理想的选择,但我会提到它,以防您的用例真的不支持其他任何东西。

如果您在 HTML 中手动输出表单字段,则第二个是一个选项(即:使用而{{ myform.field }}不仅仅是{{ myform }}需要一个)。使用正确的名称和 ID 将这个隐藏字段添加到 Form 子类本身,确保它有一个隐藏的 django 表单小部件。如有必要,按照 Rob 的建议使用 javascript 填充隐藏字段。当表单发布后,它将像往常一样绑定到您的表单子类,因为这一次,您的表单子类上有一个具有该名称的字段。机器clean()将正常工作。

第三个也是最好的选择是编写一个自定义的 django 字段;安德鲁的帖子有链接。Django 字段具有指定jscss要求的能力,因此您可以为使用日历小部件的任何页面自动封装这些依赖项。

于 2009-03-17T15:13:04.690 回答