我正在开发一个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
,因为这些都是用户可编辑的。
答案 0 :(得分:1)
无法创建没有重复的快照,您可以仅通过跟踪已更改的字段将数据保持在最低限度。但是,如果执行此操作,并且想知道实例的地址是什么,则需要遍历所做的所有更改。