Django动态表单保存

时间:2009-11-27 16:11:09

标签: django forms dynamic save

我正在使用James Bennetts代码(link text)来创建动态表单。一切正常,但我现在已经到了需要保存数据并且变得有点卡住的地步。我知道我可以评估表单返回的数据,只需将其作为字符串保存到数据库中,但我真正想要做的是保存它是什么类型的数据。 date,integer,varchar以及值,以便在查看数据时我可以对其进行一些处理,具体取决于它的类型,例如得到的日期大于上周。

所以我的问题是我如何根据表单元素的类型来访问表单元素的数据库类型,例如: a django.forms.IntegerField的数据库字段类型为int,django.forms.DateField是日期字段,django.forms.ChoiceField是varchar字段吗?

3 个答案:

答案 0 :(得分:1)

我无法理解确切的问题,所以如果我弄错了,请原谅我。

如果 使用模型,则无需了解数据库级数据类型。它们由django根据您的模型字段定义。

但是,既然你在谈论动态表单(我读过这篇文章),你可能不会使用模型,至少不是直接使用。在这种情况下,它也无关紧要,因为您正在使用表单验证,例如,您可以绝对确定整数来自forms.IntegerField字段,unicode来自forms.CharField等等。

如果您正在手动编写数据库交互路由(原始sql),那么您必须自己将python-types映射到db-types,例如<type 'int'>转到{{1}类型的列(或者某种东西),integer转到<type 'datetime.datetime'>类型的列(或者不是,这个例子是任意的),依此类推。当您使用模型时,django会以独立于数据库引擎的方式为您执行此类映射。

无论哪种方式,你自己都在python端定义数据类型,你或者django也必须在db端定义数据类型。这些类型的选择有时不是自动1:1类型的决策,而是根据应用程序中使用的数据做出的设计决策。

对不起,如果这没什么意义,但是,我必须承认,我不太明白你问题背后的问题。

答案 1 :(得分:0)

您为什么想知道您使用的是哪种数据库字段?您是否通过原始sql存储表单中的信息?您应该有一些模型,您正在存储表单中的信息,它将为您完成所有工作。

也许你可以展示一些表格代码?现在很难确定你到底要做什么。

答案 2 :(得分:0)

如果您正在使用James的代码,那么您不会从表单本身获得Model,而是表单字段元素列表。这意味着您无法将数据保存为Model实例。

我认为你有两个选择;将整个表单捆绑到一个JSON对象中并将其保存到数据库中的LONGTEXT变量中,或者将每个表单元素保存到数据库的一行中,并将其保存到BLOB中。进入。在这种情况下,您需要在保存之前“挑选”该对象。如果你挑选对象并将其保存到数据库中,当你检索它并取消它时,你将获得与该对象相关的所有python类信息。

试着让这个更清楚 - 如果你有字节; 2009-11-28 21:34:36.516176,这是str还是datetime对象?您无法判断它是以VARCHAR还是LONGTEXT存储在数据库中。哪个是你问题的核心 - 如果你把它作为一个腌制对象保存,你获取对象信息。

通过扩展,您可以将整个Form对象保存到数据库中,作为JSON对象,或者将对象腌制并保存。

我正在努力解决目前非常相似的事情,因为我正在尝试将动态表单系统组合在一起,并考虑将“个别表单字段元素,腌制”,然后保存到数据库中。所以我会看看这个问题是如何解决的! :)