2011-09-12 48 views
0

的基類模型和遺傳模型如下:Django的:繼承的模型基類切換到不同的子

class Profile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    ... 
class Student(Profile): 
    ... 
class Teacher(Profile): 
    ... 

我有Student類的對象(數據被存儲在數據庫的兩個表 - 配置文件表和一個具有指向配置文件表指針的學生表)。我需要將該配置文件表格行分配給教師對象並刪除該Student對象,即不會丟失配置文件表數據的內容,並且也保留該行的相同ID。應該怎麼做?

謝謝

任何幫助,將不勝感激..

+0

編程或只是一個任務?如果其中一個,我會建議你在數據庫中手動執行。否則,你不能在指定Profile_id =你想要的地方創建一個新的教師對象。然後刪除學生? – nulvinge

+0

它必須以編程方式完成,另一個選項(即profile_id =)我正在嘗試,但無法得到它正確的,實際上在繼承模型的情況下,表字段名稱就像profile_ptr_id,我正在使用,但它沒有' t解決了...... – Neo

回答

1

在幕後,Django的創建名爲profile_ptr_id學生和教師車型領域。所以你可能不得不操縱它。由於Django的具體繼承是如何工作的,每個Student和Teacher對象的主鍵實際上就是這個profile_ptr_id字段。因此,我不確定是否允許具有相同profile_ptr_ids的Student和Teacher對象。你可以嘗試去解決這個

的一種方法如下:

  • 創建一個新的配置文件對象
  • 將Student對象的profile_ptr_id到新的配置對象
  • 的id設置教師將對象的profile_ptr_id添加到Student對象先前指向的舊Profile對象的ID中。
  • 刪除Student對象

我從來沒有試過,所以我真的不能說是否會工作或不...

+0

其實我已經有一些數據存儲在參考之前的配置文件ID(當它用於學生時),現在如果該學生升級爲教師配置文件,我也需要保留這些數據,而那些數據引用配置文件ID(如果刪除,將丟失)。 – Neo

+0

沒錯。我寫的步驟列表將舊配置文件移至老師,保留所有信息。 – Spike

0

如果你有,你要打開一個學生與一些或所有字段老師,你能負擔得起打出來的領域,你可以這樣做:

teacher = Teacher(id=student.id, user=student.user, 
        name=student.name, email=student.email, ...) 
student.delete() 
teacher.save() 

節約用相同的新一之前設定的ID,並刪除舊的對象很重要ID。