1

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

模型.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 是否可行?(就像在这篇文章中一样)我想知道如果两个用户同时添加一个表会发生什么?

4

2 回答 2

2

您可能需要使用原始 SQL 查询来执行此操作。

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

于 2013-04-08T16:36:19.480 回答
2

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

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

或在这里:

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

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

于 2013-04-14T02:24:22.743 回答