Django - Django ORM如何管理用户在数据库中上传的表格

时间:2013-04-05 18:01:11

标签: django django-models

我的Web应用程序允许用户在Postgres数据库中加载/创建表。我知道Django ORM需要models.py中的模型定义才能访问数据库中的每个表。每次上传新表时,如何在不创建新模型定义的情况下访问应用程序中用户上传的表格?我正在考虑创建一个通用模型定义,将表分解为其组件,如下所示:

models.py

class Table(models.Model):
    filename = models.CharField(max_length=255)

class Attribute(models.Model):
    table = models.ForeignKey(Table)
    name = models.CharField(max_length=255)
    type = models.IntegerField()
    width = models.IntegerField()
    precision = models.IntegerField()

class Row(models.Model):
    table = models.ForeignKey(Table)

class AttributeValue(models.Model):
    row = models.ForeignKey(Row)
    attribute = models.ForeignKey(Attribute)
    value = models.CharField(max_length=255, blank=True, null=True)

这种通用模型的问题是每个表都混合在4个表中(在管理界面中没用),当你有很多行时,它的创建速度很慢。你对这个案子有什么建议吗?

编辑:每次用户添加或删除表时,使用单独的数据库存储这些表并使用路由器和manage.py inspectdb来更新其models.py是否可行? (like in this post)我想知道如果两个用户同时添加一个表会发生什么?

2 个答案:

答案 0 :(得分:2)

您可能需要使用raw SQL queries来执行此操作。

如果您预期的表的架构是预定义的,则可以使用数据库路由器将某个模型链接到每个用户的特定表名。

答案 1 :(得分:2)

我认为你应该像这里一样研究动态模型:

https://code.djangoproject.com/wiki/DynamicModels

或在这里:

http://dynamic-models.readthedocs.org/en/latest/

祝你好运,因为我的朋友不是一个简单的方式:)