Python Django 1.10中演示的短暂模型实例

Python Django 1.10中演示的短暂模型实例,python,django,postgresql,django-models,Python,Django,Postgresql,Django Models,为了演示一些功能,我需要在Postgres数据库中动态创建一系列模型和关系 问题是这些模型不能干扰Django应用程序的正常运行,也不能通过查询返回。但是,它们必须具有模型的完整行为集,并且能够在演示过程中通过查询返回 使用工厂(我们主要使用Factory Boy)是不完美的,因为如果不将模型保存到数据库中,就无法查询模型,此时模型会与常规操作查询交互 第二个数据库也是不完善的,因为演示发生在正常的应用程序操作期间,因此“有效”的模型实例仍然需要可用 将模型标记为是_demo也不起作用,因为有六

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

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

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

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

将模型标记为
是_demo
也不起作用,因为有六种不同类型的模型需要实例化,以使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
属性。不影响其他查询。

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

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

编辑 我刚才想到的一个选项是创建一个
Demo
模型,它跟踪作为Demo一部分创建的记录。此
演示
模型将为您的
用户
模型提供一个
外键
,因此每个用户都可以创建/销毁自己的演示(或者您的视图可以创建它)

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

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


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

谢谢Nathan,我们确实有一个暂存环境。理想情况下,我们能够在prod环境中运行“演示”。这是一个很好的回退想法,我会更新。我想我不了解您的生产环境是如何使登台环境无法用于您的演示的。你能详细说明一下吗,特别是你在第二段中暗示了什么?“模型的完整行为集和查询返回的能力”是什么意思?生产环境本质上与登台相同。我希望用户/客户能够触发并使用“短暂数据”逐步完成演示。因为用户显然不会使用登台环境,所以这将涉及到在生产环境中进行演示。把它看作一个教程可能更容易,虽然不完全一样,但想法是一样的。如果没有看到一些代码,特别是你的模型,就很难说得更多。