Django - Django ORM 如何管理用户在数据库中上传的表
Posted
技术标签:
【中文标题】Django - Django ORM 如何管理用户在数据库中上传的表【英文标题】:Django - How can Django ORM manage user's uploaded tables in database 【发布时间】:2013-04-05 18:01:10 【问题描述】:我的 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 是否可行? (like in this post) 不知道如果两个用户同时添加一个表会怎样?
【问题讨论】:
我不明白您的主要问题是如何让用户创建他的表,或者您如何定义模型来处理用户正在创建的表。 主要问题是如何使用 Django ORM 处理表。我正在考虑在上传(或删除)后调用 inspectdb,但我不确定它是否是最好的解决方案。 【参考方案1】:我认为您应该像这里一样研究动态模型:
https://code.djangoproject.com/wiki/DynamicModels
或这里:
http://dynamic-models.readthedocs.org/en/latest/
祝你好运,因为这不是一个简单的方法,我的朋友 :)
【讨论】:
【参考方案2】:您可能需要使用 raw SQL queries 来执行此操作。
如果您期望的表架构是预定义的,您可以使用数据库路由器将某个模型链接到每个用户的特定表名。
【讨论】:
以上是关于Django - Django ORM 如何管理用户在数据库中上传的表的主要内容,如果未能解决你的问题,请参考以下文章