【问题标题】:How to record and preserve a user-editable Django model instance at a given time如何在给定时间记录和保存用户可编辑的 Django 模型实例
【发布时间】:2019-06-10 15:12:44
【问题描述】:

我正在开发一个 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)

    ...

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

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

如果我创建了一个带有address 字段的Receipt 模型作为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,因为这些是用户可编辑的。

【问题讨论】:

    标签: python mysql django database


    【解决方案1】:

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

    【讨论】:

    • 我想我可以复制Address 模型实例,并添加一个字段来指定它是用户可编辑的地址还是收据地址。只有前者会显示在用户的帐户中并且是可编辑的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2018-03-21
    • 2021-10-16
    • 1970-01-01
    • 2018-07-03
    • 2014-02-14
    • 2012-12-11
    相关资源
    最近更新 更多