2011-09-12 47 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。