Дублирование экземпляра модели 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)
Вернуться на верх