Как записать и сохранить редактируемый пользователем экземпляр модели Django в данный момент времени - PullRequest
0 голосов
/ 10 июня 2019

Я работаю над приложением 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 Ответ

1 голос
/ 10 июня 2019

Невозможно создать снимок без дубликатов, вы можете свести данные к минимуму, отслеживая только измененные поля.Но если вы сделаете это и захотите узнать, какой адрес был для экземпляра, вам нужно вернуться назад ко всем изменениям, которые были сделаны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...