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

Используя Django 2.1.5, у меня есть одна модель, которая полностью наследуется другой моделью. Обе таблицы в БД. Я хочу сохранить «ревизии» модели как унаследованную модель. Все поля должны быть одинаковыми на момент копирования (включая id / pk).

Какой правильный и быстрый способ скопировать экземпляр родительской модели в унаследованную?

Допустим, это модели (но с большим количеством полей, внешних ключей, json полей ..):

class MyModel(models.Model):
    id = models.UUIDField(default=uuid.uuid4, editable=False, db_index=True, unique=True, primary_key=True)
    identifier = models.IntegerField(default=-1)
    title = models.CharField(max_length=1000)
    revision = models.IntegerField(default=0)

class MyModelRevisions(MyModel):
    pass

Теперь я хочу взять экземпляр MyModel и полностью скопировать его в MyModelRevisions , Я думал о чем-то вроде этого:

model_revision = MyModelRevisions(MyModel.objects.get(pk=my_model.pk))
model_revision.save()

Но я получаю сообщение об ошибке, в котором говорится, что заголовок my_model не является допустимым UUID.

1 Ответ

0 голосов
/ 19 апреля 2020

Простой ответ будет что-то вроде сериализации / десериализации объекта для создания нового:

from django.forms.models import model_to_dict

revision = MyModelRevisions(**model_to_dict(my_model_instance, fields=['id', 'identifier', 'title', 'revision']))
revision.save()

Но, возможно, вы захотите взглянуть на что-то вроде django -reversion

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