2014-12-31 2 views
1

У меня есть 2 модели, которые унаследованы от абстрактной модели. Я использую один для релевантных данных, а другой для архивированных данных. Они имеют одинаковые поля и методы. Я хотел бы создать сигнал post_save на модели А так экземпляр будет создан в модели B всякий раз, когда создается новая запись, до сих пор вариантов там не очень элегантна:Сохранение экземпляра модели django в другую модель

a = A.objects.get(id=1) 
b = B() 
model_dict = a.__dict__ 
model_dict.pop('id') 
b.__dict__ = model_dict 
b.save() 

есть лучший способ для достижения этой цели?

Примечание: эти модели содержат внешние ключи, поэтому функция model_to_dict в django.forms не работает, поскольку она предоставляет только идентификатор связанного объекта.

ответ

1

Я думаю, что итерация по списку полей более предсказуемым образом:

a = A.objects.get(id=1) 
data = dict([field.name, getattr(a, field.name) for field in a._meta.fields]) 
b = B(**data) 
b.pk = None 
b.save() 

Примечание: это не обрабатывает ManyToMany отношения. Поля M2M должны быть скопированы вручную.

0

Нет необходимости в этом. Просто установка id на None приведет к его сохранению в качестве нового экземпляра.

a = A.objects.get(id=1) 
a.id = None 
a.save() 
+0

Вы не поняли вопроса. Это modelB, который необходимо сохранить (снова). – unlockme

Смежные вопросы