Django:我如何动态创建模型

时间:2018-01-16 05:25:45

标签: django csv django-models

如何在上传csv文件时动态创建模型?我已经完成了可以读取csv文件的部分。

2 个答案:

答案 0 :(得分:1)

This doc非常好地解释了如何在django中在运行时动态创建模型。它还链接到这样做的一个例子。

但是,正如您在查看文档后所看到的那样,执行此操作非常复杂且繁琐。我不建议这样做,并且相信很有可能你可以提前确定一个足够灵活的模型来处理CSV。这是更好的做法,因为在应用程序运行时动态更改数据库的架构是导致代码中出现大量错误的一个因素。

答案 1 :(得分:0)

据我所知,您希望根据CSV中的字段动态创建新架构。虽然这是一个有效的用例,可能是绝对正确的电话。我对此表示怀疑 - 它适用于单个原则SaaS应用程序的数据模型,该应用程序可能具有愚蠢的性能和迁移问题。

我尝试使用Mongo /其他一些其他NoSQL解决方案。但更简单的方法可能是在SQL中实现的修改后的Star Schema。在这种情况下,您创建一个维度表来存储每个标头,然后创建每个数据元素的实例,该数据元素具有维度的外键并记录该维度的值。

如果你读了csv,psuedo代码看起来像这样:

for row in DictReader(file):
   for k in row.keys():
       try:
          dim = Dimension.objects.get(name=k)
       except:
          dim = Dimension(name=k)
          dim.save()
       DimensionRecord(dimension=dim, value=row[k]

显然,如果维度已经存在,你可以更好地处理读取标题和错误捕获,但这将是如何动态地将变量带标题的CSV加载到SQL数据库中的示例。