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()
这里很重要的一点是两个实例之间的字典更新。
此问题可能重复,但要获得完整答复,您必须在评论中搜索。字典更新技巧是解决方案的重要组成部分。
我有:
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()
这里很重要的一点是两个实例之间的字典更新。
此问题可能重复,但要获得完整答复,您必须在评论中搜索。字典更新技巧是解决方案的重要组成部分。