Python django中面向最终用户的动态表单

Python django中面向最终用户的动态表单,python,django,forms,django-models,Python,Django,Forms,Django Models,我正在创建一个django项目,其中任何用户都可以创建具有任意数量字段的表单。例如,用户A可以创建以下表单: 字段名称:字段_1-类型:文本 字段名称:字段_2-类型:日期 字段名称:字段_3-类型:文件 用户B可以创建: 字段名称:名称-类型:文本 字段名称:phone-类型:Text 看,用户需要对程序说出字段的名称和类型。因为是一种动态方式,可以为每个表单创建任意数量的表单和任意数量的字段。创建数据库模型最有效的方法是什么 考虑到程序在用户发送字段之前不知道字段的名称。因此,在视图

我正在创建一个django项目,其中任何用户都可以创建具有任意数量字段的表单。例如,用户A可以创建以下表单:

  • 字段名称:字段_1-类型:文本
  • 字段名称:字段_2-类型:日期
  • 字段名称:字段_3-类型:文件
用户B可以创建:

  • 字段名称:名称-类型:文本
  • 字段名称:phone-类型:Text
看,用户需要对程序说出字段的名称和类型。因为是一种动态方式,可以为每个表单创建任意数量的表单和任意数量的字段。创建数据库模型最有效的方法是什么


考虑到程序在用户发送字段之前不知道字段的名称。因此,在视图中,我无法使用字段的确切名称来处理它。

如果在数据库中创建两个表,则可以非常轻松地处理此问题。一个表将序列化表单存储为JSON,另一个表保存表单数据(以及表单定义的链接)

如何序列化它取决于您,但它看起来是这样的:

序列化表单

{
  "fields": [
    {
      "name": "field_name"
      "type": "text"
      "attrs": []
    }
  ]
}
序列化数据(ForeignKey的上述格式)

这样做的好处是您不需要动态创建模型,而且您的数据库会保持更干净,因为您不会有太多的表

可能重复的
{
  "data": {
    "field_name": "value"
  }
}