首页 > 解决方案 > 使用 Django 处理动态模型/数据

问题描述

我即将开始一个 Django 项目,我的数据不会非常结构化,并且在决定如何存储它时遇到了一些麻烦。我的项目的基本前提是创建一个数据库管理器,从用户那里抽象出 SQL 位。基本上,用户将创建字段并定义它们的类型。然后用户可以选择用数据行填充这些字段。

例如,用户可以创建两个字段:第一个字段是name,用户可以将其设置为文本字段,然后是age字段,并将其设置为整数字段。这实际上会创建两列:nameage

到目前为止,我可以想象我的模式结构应该是什么样子。但是,当涉及到让用户输入与这些列相关的数据行时,我不确定如何处理这方面的存储。此外,我希望用户可以随时选择添加其他列。

关于我应该如何解决这个问题的任何想法?

标签: djangodjango-models

解决方案


我即将开始一个 Django 项目,我的数据不会非常结构化......

Django 的模型设计用于结构化数据。您似乎更多地询问模型一致性而不是结构,但一致性对于 Django 模型也很重要。

例如,用户可以创建两个字段:第一个是姓名,用户可以将其设置为文本字段,然后是年龄,然后是整数字段。这实际上会创建两列:姓名和年龄。

如果您发现自己正在考虑更新架构以响应用户查询,那么绝对是时候重新考虑您的方法了。Django 中的模式应该通过迁移基础设施进行管理,但更一般地说,这不太可能导致可维护的项目(或模式)。

当需要这种行为时,较老的方法是EAV,它允许您定义任意“列”而无需更新模式。但是您最终会遇到大量且效率低下的数据库查询;这不是 RDBMS 的用途。

幸运的是,键值存储是保持结构化但不太一致的数据的好选择。

如果您想使用 Django 的身份验证后端,但仍想跟踪用户的任意字段,我建议使用Redis(配置了至少一个持久性选项)作为辅助存储,其中的条目键入用户的主键值,您可以将配置文件模型用于结构一致的数据。


推荐阅读