Django 中的模型继承

Models inheritance in Django

我有:

class User(models.Model):
    name = models.CharField()

class Worker(User):
    role = models.CharField()

我已经从遗留数据库中导入了所有用户。我显然可以做到:

bob = User.objects.get(name='bob')

哪个 returns bob 实例。

但是现在,我需要创建一个继承自 bob 的 Worker 实例?我首先想到的是:

MyWorker = Worker.objects.create(
     pk = bob.pk,
     role = 'chief')

其中 returns 一个新的 Worker 实例,但没有像我想要的那样与 Bob 用户关联。那我怎么能基于 bob 实例创建这个 Worker 实例呢?

这是解决这个问题的正确和完整的方法。 Multi-table继承就是User和Worker之间的OneToOneField关系,这就是重点get here.

要从 User 实例创建子类 Worker,您应该这样做:

user = User.objects.get(name='bob')

worker = Worker(user_ptr=user, role='chief')
worker.__dict__.update(user.__dict__)
worker.save()

这里很重要的一点是两个实例之间的字典更新。

此问题可能重复,但要获得完整答复,您必须在评论中搜索。字典更新技巧是解决方案的重要组成部分。