【问题标题】:Ephemeral model instances for demo in Django 1.10Django 1.10 中用于演示的临时模型实例
【发布时间】:2017-06-12 19:25:06
【问题描述】:

为了演示一些功能,我需要在 Postgres 数据库中动态创建一系列模型和关系。

问题是这些模型不能干扰 Django 应用程序的正常运行中的查询或被查询返回。但是,它们必须具有模型的完整行为集,并且能够在演示期间通过查询返回。

使用工厂(我们主要使用 Factory Boy)是不完美的,因为模型如果不保存到数据库就无法查询,此时它们与常规操作查询交互。

第二个数据库也不完善,因为演示发生在正常的应用程序操作期间,因此“有效”模型实例仍然需要可用。

将模型标记为 is_demo 也不起作用,因为需要实例化六种不同类型的模型才能使演示按预期工作。

我可以清除使用 cron 作业或类似作业创建的特定模型,但它们会影响创建和计划作业之间的数据库。

在暂存环境中运行所有内容是可以接受的,但理想的答案是让我可以在生产版本上运行演示。

是否有我错过的公认方法或有用的库?

演示中涉及的示例模型:

class Transaction(models.Model):
    amount = models.DecimalField(max_digits=8, decimal_places=2, db_index=True,
                                 editable=False)
    assigned_user = models.ForeignKey(User, on_delete=models.CASCADE)
    date = models.DateField(db_index=True, editable=False)
    description = models.CharField(max_length=255, null=True, blank=True)
    is_declined = models.BooleanField(default=False)
    is_pending = models.BooleanField(db_index=True)
    fi_account = models.ForeignKey(
        FinancialAccount, on_delete=models.CASCADE)



   @property
    def organization(self):
        org = self.fi_account.organization
        return org

我们需要能够查询此模型并成功使用其.organization 属性。不会影响其他查询。

【问题讨论】:

    标签: python django postgresql django-models


    【解决方案1】:

    您可以创建生产环境(数据库和 django 应用程序)的克隆,然后更新生产代码库以包含演示功能/修复。这样,除了您正在演示的新模型之外,您还可以获得“有效”生产模型的副本。

    听起来您应该有一个与您的生产环境非常匹配的“暂存”环境,以应对这种情况。

    编辑

    我刚刚想到的一个选项是创建一个Demo 模型,该模型跟踪作为演示的一部分创建的记录。这个Demo 模型将有一个ForeignKey 到您的User 模型,因此每个用户都可以创建/销毁他们自己的演示(或者您的视图可以创建它)。

    这将允许您删除作为指定 Demo 对象的一部分创建的所有记录。

    但是,您必须确保为现有模型的所有当前查询/过滤器添加 exclude

    老实说,我不确定是否可以在不彻底修改所有模型过滤器以排除您创建的任何演示记录的情况下完成您的要求。

    【讨论】:

    • 谢谢 Nathan,我们确实有一个暂存环境。理想情况下,我们能够在 prod 环境中运行“演示”。这是一个很好的后备想法,我会更新。
    • 我想我不明白您的生产环境做了什么,这使得登台环境无法用于您的演示。您能否详细说明,尤其是您在第二段中暗示的内容? “模型的完整行为集和查询返回的能力”是什么意思?
    • 生产环境与登台基本相同。我希望用户/客户能够使用“临时数据”触发并逐步完成演示。这将涉及用于生产的演示,因为用户显然不会使用暂存环境。将其视为教程可能更容易,它不完全是,但想法相同。
    • 如果没有看到一些代码,特别是你的模型,很难说更多。
    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2015-05-31
    • 2019-04-23
    • 2016-03-18
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多