django - 使用 Django 处理动态模型/数据
问题描述
我即将开始一个 Django 项目,我的数据不会非常结构化,并且在决定如何存储它时遇到了一些麻烦。我的项目的基本前提是创建一个数据库管理器,从用户那里抽象出 SQL 位。基本上,用户将创建字段并定义它们的类型。然后用户可以选择用数据行填充这些字段。
例如,用户可以创建两个字段:第一个字段是name,用户可以将其设置为文本字段,然后是age字段,并将其设置为整数字段。这实际上会创建两列:name和age。
到目前为止,我可以想象我的模式结构应该是什么样子。但是,当涉及到让用户输入与这些列相关的数据行时,我不确定如何处理这方面的存储。此外,我希望用户可以随时选择添加其他列。
关于我应该如何解决这个问题的任何想法?
解决方案
我即将开始一个 Django 项目,我的数据不会非常结构化......
Django 的模型设计用于结构化数据。您似乎更多地询问模型一致性而不是结构,但一致性对于 Django 模型也很重要。
例如,用户可以创建两个字段:第一个是姓名,用户可以将其设置为文本字段,然后是年龄,然后是整数字段。这实际上会创建两列:姓名和年龄。
如果您发现自己正在考虑更新架构以响应用户查询,那么绝对是时候重新考虑您的方法了。Django 中的模式应该通过迁移基础设施进行管理,但更一般地说,这不太可能导致可维护的项目(或模式)。
当需要这种行为时,较老的方法是EAV,它允许您定义任意“列”而无需更新模式。但是您最终会遇到大量且效率低下的数据库查询;这不是 RDBMS 的用途。
幸运的是,键值存储是保持结构化但不太一致的数据的好选择。
如果您想使用 Django 的身份验证后端,但仍想跟踪用户的任意字段,我建议使用Redis(配置了至少一个持久性选项)作为辅助存储,其中的条目键入用户的主键值,您可以将配置文件模型用于结构一致的数据。
推荐阅读
- javascript - “插槽”组件不显示
- gnuplot - gnuplot 绘制聚集直方图时出错
- javascript - Laravel 将查询作为对象而不是数组返回
- excel - VBA 宏将 WhatsApp 自定义消息发送给多个联系人
- python - 如何通过 Python 在 Dymola 中设置 Advanced.EnableCodeExport 标志?
- bootstrap-4 - 试图将导航栏的最后一个 li 项保持在最右边的角落。Float :right 不会按预期工作。我怎样才能解决这个问题?
- github - Github Actions 从管道创建秘密
- java - 如何在 JDesktopPane 的背景中创建 JLabel?
- python - Rosrun 命令不执行 python 文件
- php - 图片上传不会在文件夹中创建图片,只在数据库中