django形成db表

时间:2009-11-30 09:59:10

标签: django forms types

在Django中,如果我是类型的对象:django.forms.BooleanField,例如,我如何知道要将其保存到的数据库类型,例如: Int,Boolean,Varchar? 我知道Django会自动将其作为模型的一部分处理,但我想手动执行此操作,因此这不是一个选项。是否有一个内置的Django函数,我可以调用它来告诉我这些信息,还是我必须手动执行它,例如创建一个函数,它返回传入的表单元素的db类型?

3 个答案:

答案 0 :(得分:1)

我知道这个帖子现在已经过时了,但是我想发布一个方法来确定用django创建哪些表/字段:

django-admin.py sqlall <appname>

请参阅django-admin docs了解详情。

答案 1 :(得分:0)

除了使用MySQL支持的Django项目时,BooleanField将主要保存为布尔值:

  

MySQL中的布尔字段存储为   一个TINYINT列,其值为   0或1(大多数数据库都有   改为正确的BOOLEAN类型。

请参阅docs

据我所知,没有内置的方法来覆盖字段类型(它没有在docs中列出)。你为什么想这么做?您是否尝试将数据插入已存在的表中?如果您想这样做,请手动创建表格,并使用managed Meta选项。

答案 2 :(得分:0)

这个问题确实没有意义。与模型形式相反,表单与数据库没有任何关联,因此没有任何这样的“映射”,并且您无法“保存”它。

编辑以回应评论:足够公平,但根本没有您描述的任何映射。如果要将非模型表单的结果保存到数据库,则需要定义如何完成。因此,您可以自行决定将字段保存为哪种类型。

第二次修改否,因为表单和数据库之间没有关系。我不知道如何进一步解释这个问题。 模型字段知道a)要创建的数据库类型和b)要创建的表单字段,但该映射不能反向工作 - 为什么会这样?如果要将表单字段保存到数据库,则需要了解的不仅仅是“它是什么数据类型”。您需要知道要保存的列的名称,列所属的表以及列需要满足的任何约束 - 这些都不是由表单定义的,因为它们都是由< EM>模型

您可以尝试迭代django.db.models.fields中的所有不同模型字段类型,查看每个类型的formfield()方法以查看它是否创建了BooleanField,然后是否确实获取了数据库类型来自get_internal_type(),但这让我觉得这是一个完全可怕,丑陋和低效的事情 - 更不用说没有理由说两个模型字段映射到不同的数据库类型都不能同时使用BooleanField作为表单字段表示。