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

时间:2019-06-10 15:12:44

标签: 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)

    ...

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

1 个答案:

答案 0 :(得分:1)

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