django:将继承的模型基类切换到不同的子类

时间:2011-09-12 11:20:53

标签: django django-models

基类模型和继承的模型如下:

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

我有Student类的对象(其数据存储在db-Profile表中的两个表中,而Student表有一个指向Profile表的指针)。我需要将该Profile表行分配给Teacher对象并删除Student对象,即不丢失Profile表数据的内容并保留该行的相同id。应该如何做?

谢谢,

任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:1)

在幕后,Django在Student和Teacher模型上创建了一个名为profile_ptr_id的字段。所以你可能不得不操纵它。由于Django的具体继承如何工作,每个Student和Teacher对象的主键实际上是这个profile_ptr_id字段。因此,我不确定是否同时允许具有相同profile_ptr_ids的Student和Teacher对象。

您可以尝试解决此问题的一种方法如下:

  • 创建新的个人资料对象
  • 将Student对象的profile_ptr_id设置为新Profile对象的id
  • 将Teacher对象的profile_ptr_id设置为Student对象之前指向的旧Profile对象的ID。
  • 删除学生对象

我从未尝试过这个,所以我真的不能说它是否会起作用......

答案 1 :(得分:0)

如果您有一名学生想要成为具有部分或全部领域的教师,并且您可以输入字段,那么您可以这样做:

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

在保存具有相同ID的新对象之前,设置ID并删除旧对象非常重要。