Django模型继承 - 查询时实例化为超类的子类

时间:2014-09-08 09:38:52

标签: python django inheritance django-models model

我希望模型继承自超类,因为超类(" Step")为子类提供基本功能(" InfoStep"等)。

但是,当我查询" Step"时,InfoStep被实例化为Step,因此不会在子类中调用正确的方法。从Route.json()调用Step.json()而不是对InfoStep.json()的所需调用

显然,我更希望不必明确查询每个子类。下面的最小代码示例:

class Route(models.Model):
  def json(self):
    postResult = []
    for needle in self.posts.all():
      json = needle.json()
      json['steps'] = [x.json() for x in Step.objects.filter(post=needle, route=self)]
      postResult.append(json)

    return postResult


class Step(models.Model):
  def json(self):
        return {'id' : self.id,
                'name' : self.name,
                'description' : self.description}

class InfoStep(Step):
  def json(self):
        base = super(InfoStep, self).json()
        base[0]['url'] = self.url
        return base

1 个答案:

答案 0 :(得分:0)

解决方案是使用django插件。有几个这样的插件存在,我最终使用了django-polymorphic