【问题标题】:Models inheritance in DjangoDjango中的模型继承
【发布时间】:2015-09-29 07:07:14
【问题描述】:

我有:

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

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

我已从旧数据库导入所有用户。我显然可以做到:

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

返回bob 实例。

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

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

它返回一个新的 Worker 实例,但与我想要的 Bob 用户没有关联。那么我如何基于bob 实例创建这个 Worker 实例呢?

【问题讨论】:

  • 实例不从实例继承——类从类继承。你到底想达到什么目的?
  • 正在尝试创建bob 的副本,但作为B 的实例?我不确定这是否是您真正想要做的。您能否提供一个实际示例来说明您想要实现的目标以及您认为这是实现目标的原因?
  • @jonrsharpe 你是对的。在这种特殊情况下(数据迁移),我需要一个实例来从另一个实例继承。这就是为什么它不起作用。
  • 完整展示你的两个模型
  • this 你想做什么?

标签: python django models


【解决方案1】:

这是解决此问题的正确且完整的方法。多表继承就是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()

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

这个问题可能会重复,但要获得完整的答案,您必须在 cmets 中搜索。 dict 更新技巧是解决方案的重要组成部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2015-03-05
    • 2010-11-08
    相关资源
    最近更新 更多