【问题标题】:how to create, syncdb, and access django model dynamically?如何动态创建、syncdb 和访问 django 模型?
【发布时间】:2010-11-09 14:09:47
【问题描述】:

我为费用应用程序定义了一个费用模型,

class Expense(models.Model):
    pub_date = models.DateTimeField()
    amount = models.IntegerField()
    memo = models.TextField()

我想创建丢失的单独表来维护不同用户的数据,例如

james_expense_table for james 
william_expense_table for william
....
balabala_expense_table for balabala

它们的行为完全相同,就像并行对象一样。唯一的区别是前缀。这样,我就可以轻松地使用更多功能扩展应用程序。

那么我该如何实现呢?

我从 django web 阅读了一些抽象模型的东西。但实际上,它们是静态的,硬编码在 *.py 文件中,而不是我想要的。

还有一个问题,对于静态模型(*.py 文件中的硬代码),它可以使用“manage.py syncdb”命令将模块字段同步到表字段,那么动态如何做到这一点案例?

【问题讨论】:

    标签: django-models syncdb


    【解决方案1】:

    您想要的可能是使用ForeignKey,以便您可以将您的表格链接到不同的用户:

    class Expense(models.Model):
        pub_date = models.DateTimeField()
        amount = models.IntegerField()
        memo = models.TextField()
        user = models.ForeignKey(MyUserField)
    

    显然您需要实现和导入MyUserField

    然后您可以从Expense 表访问用户

    my_expense.user
    

    或者用户使用的Expense 表:

    my_user.expense_set.all()
    

    然后,您不需要为每个新用户运行 syncdb,并且它不是静态硬编码在文件中的。

    【讨论】:

    • 谢谢。但这个解决方案对我来说还不够好。我仍然想要许多表而不是一个表,以使每个表尽可能短。隔离用户数据对我的应用程序非常重要。
    • 表长度可能不相关,因为您应该在用户字段上有一个索引。关于“数据隔离”,您可能必须更明确地说明您需要什么,但如果您希望用户只能看到它的表,那么您可以尝试创建一些“视图”。我没有看到任何其他简单的动态创建表的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2017-11-18
    • 2012-08-12
    • 1970-01-01
    • 2015-01-22
    • 2013-01-03
    • 2010-10-04
    相关资源
    最近更新 更多