2013-05-27 65 views
2

我有以下情況:將抽象模型複製到另一個實例?

class AbstractModel(models.Model): 
    # fields 

    class Meta: 
     abstract = True 

class A(AbstractModel): 
    # no extra fields 

class B(AbstractModel): 
    # no extra fields 

現在我想從一個保存一行到B,有沒有簡單的方法來做到這一點? 還是我需要自己複製每個字段?

這樣做還有更好的方法嗎?我需要這個,因爲我有一個表可以被用戶修改,但另一個表被凍結,從凍結的一個我創建PDF文件,但是當我改變類A中的某些東西時,它不應該重寫類B中的某些東西應創建B的新實例。

回答

3

現在我想保存從A到B的一行,有沒有簡單的方法來做到這一點?還是我需要自己複製每一個領域?

可以使用model_to_dictdjango.forms產生初始kwargs字典:

from django.forms import model_to_dict 
a = A.objects.get(..) 
kwargs = model_to_dict(a) 
kwargs.pop('id') 
b = B.objects.create(**kwargs) 
+0

我認爲你的答案是一樣的,這很好! (我希望) 我會upvote你們兩個,但我不能由於我的聲譽。抱歉。 仍然+1 –

0

您應該必須複製B的新實例中的每個字段,然後保存它。

但有一種捷徑。

b_obj.__dict__ = a_obj.__dict__ 
#remove any foreign key/id/default fields 
b_obj.__dict__.pop('id') 
... 
b_obj.save() 

但是它的無證方法,有它自己的風險!

+0

這不是真的很酷,因爲該機型擁有像20場和一些ForeignKeys不應該被刪除。 我希望我能實例化其他模型或其他東西。不好的,這不會工作 –

相關問題