Дублирование экземпляра модели Django без изменения объекта python
Я пытаюсь создать метод для дублирования экземпляра модели
new_object = old_object.duplicate_in_db()
Согласно Django 3.2 документации экземпляр модели может быть продублирован в базе данных путем установки сущности pk и/или id в None :
# Model method
def duplicate_in_db(self):
self.pk = None
self._state.adding = True
# Some other duplication steps happens here e.g. duplicating OneToOneFields attributes
# ...
self.save()
Однако побочным эффектом является то, что у исходного объекта изменяется его id (наряду с другими атрибутами...)
old_object_pk = old_object.pk
new_object = old_object.duplicate_in_db()
print(old_object_pk == old_object.pk) # False
Каким будет эффективный метод/функция дублирования без побочных эффектов?
Обновление из базы данных с правильным идентификатором делает свою работу, Недостатком является необходимость делать несколько вызовов базы данных.
def duplicate_from_db(self):
old_pk = self.pk # storing for refreshing latter
self.pk = None
self._state.adding = True
self.prediction_result = None
self.save()
new_pk = self.pk
self.pk = old_pk
self.refresh_from_db()
return MyModel.objects.get(pk=new_pk)