2015-12-15 101 views
0

假設我有在Django以下模型結構:Django的多表繼承:查找和更改父模型

class A(models.Model): 
    x = models.IntegerField() 

    def copy(self): 
     obj = self 
     obj.pk = None 
     obj.save() 

     return obj 

class B(A): 
    y = models.IntegerField() 

    def copy(self): 
     # this method is what I am confused about 
     new_parent = super(B, self).copy() # not sure about this 
     obj = self 
     obj.pk = None 
     # how to set obj's parent model to 'new_parent' 
     obj.save() 
     return obj 

我不知道我如何能訪問父模型的對象,我怎麼能做出這種複製方法的工作?

我已經搜索了很多,找不到任何答案。我應該只使用一對一的關係嗎?

+0

我認爲你需要使用foriegn鍵關係父模型對象 – zabusa

回答

1

如果您有一個正常的父母子女模型,您將獲得孩子訪問父母的屬性。您可以使用新的父對象更新此屬性。

此外,您創建父對象的方式可能不起作用,您需要調用該對象上的方法。

所以我會更新孩子的copy()方法:

class B(A): 

    def copy(self): 
     # this method is what I am confused about 
     new_parent = self.a.copy() # change 'a' with appropriate attribute name 
     obj = self 
     obj.pk = None 
     # set obj's parent model to 'new_parent' 
     obj.a = new_parent 
     obj.save() 
     return obj 
+0

這很簡單!謝謝 – SeeknInspYre

+0

是否有任何django文檔更詳細地解釋這一點?還有'a_ptr'和'a_ptr_id'字段。他們是爲了什麼? – SeeknInspYre