Я работаю над приложением 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
, так как они доступны для редактирования пользователем.