python - 如何在给定时间记录和保存用户可编辑的 Django 模型实例

标签 python mysql django database

我正在开发一个 Django 应用程序,我需要在用户完成操作时记录和保留用户的详细信息。

打个比方,假设我有一个类似以下的地址模型:

class Address(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    street = models.CharField(max_length=100)
    town = models.CharField(max_length=50)

    ...

等等。用户可以随时编辑他们的地址。

当他们完成一项操作时,我需要创建一张收据,详细说明他们当时的地址。

如果我创建了一个 Receipt 模型,其中 address 字段作为 ForeignKey,如下所示:

class Receipt(models.Model):
    ref_num = models.UUIDField(default=uuid.uuid4, editable=False)
    date = models.models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    address = models.ForeignKey(Address, on_delete=models.CASCADE)

收据在创建时是正确的,但如果用户随后更改了地址,收据就会不正确。

创建 Receipt 模型的解决方案是否复制 Address 模型中的所有字段,以便保留它们?

class Receipt(models.Model):
    ref_num = models.UUIDField(default=uuid.uuid4, editable=False)
    date = models.models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    street = models.CharField(max_length=100)
    town = models.CharField(max_length=50)

    ...

我假设有一种更简洁、更优雅的方法来实现这一目标。我基本上需要在给定时刻创建用户地址的快照,而不创建重复的地址,因为这些是用户可编辑的。

最佳答案

无法创建不重复的快照,您可以通过仅跟踪已更改的字段来将数据保持在最低限度。但是,如果您执行此操作并且想知道某个实例的地址是什么,则需要循环返回所做的所有更改。

关于python - 如何在给定时间记录和保存用户可编辑的 Django 模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529031/

相关文章:

python - 有没有办法在 Python 中随机化连接函数?

python - 在我的 Django Digital Ocean 服务器上的什么位置设置环境变量?

mysql - 使用 eclipselink 和 mysql 保存数据时的奇怪行为

mysql - 查询显示其中一个值为 0 的关系的结果

django - {{ STATIC_URL }} 在 Django 中使用 pyjade

python - "Zero Iteration"- 简单联系表功能中的端到端验收测试

python - 我尝试使用 python 将 XML 文件中的一些信息放入 SQL 数据库

python - 如何使用Python将 "Microsoft Excel Object"VBA代码添加到Excel文件

python - 在 Pandas 数据框中将 yes/no 转换为整数类型 1/0(不仅仅是替换)

php - 把div放到MYSQL里死掉