2014-12-31 105 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() 

有沒有更好的辦法爲了達成這個?

注意:這些模型包含外鍵,因此,django.forms下的model_to_dict函數不起作用,因爲它只提供相關對象的id。

回答

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() 

注:這不處理多對多的關係。應該手動複製M2M字段。

0

沒有任何需要。簡單地將id設置爲None將導致它保存爲新的實例。

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

你不明白這個問題。這是modelB,需要保存(再次)。 – unlockme

相關問題