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