繁体   English   中英

从 SuperClass 访问 Django SubClass 方法

[英]Access Django SubClass Method from SuperClass

好的,所以我有两个 Django 模型:

class Ticket(BaseModel):
  name = models.CharField(max_length=200)
  description = models.TextField(blank=True, null=True)

  def get_absolute_url(self):
    return '/core/group/ticket/{0}/'.format(self.id)

class ProjectTicket(Ticket):
    project = models.ForeignKey('Project', on_delete=models.DO_NOTHING)
    phase = models.ForeignKey('ProjectPhase', blank=True, null=True, on_delete=models.DO_NOTHING)

    def get_absolute_url(self):
        return '/different/url/structure'

现在,我正在使用 Ticket.objects.all() 查询所有 Ticket 对象。 这将返回所有 Ticket 对象,包括一些 ProjectTicket 子类。

当有问题的对象是实际的子类 ProjecTicket 对象时,我希望能够做的是访问子类 get_absolute_url() 。

我知道我可以从子类中获取父类,但我希望能够反过来。

有没有人取得过这样的成绩? 如果是这样,你采取了什么方法?

这是我现在能想到的一种方法:

我确定您知道继承 django 模型会创建与父级的 OneToOne 关系。 因此,同样是ProjectTicket类实例的Ticket对象将具有一个名为projectticket的属性。 您可以检查此值并相应地返回 url:

class Ticket(...):
    ...
    def get_absolute_url(self):
        if hasattr(self, 'projectticket'):
            return self.projectticket.get_absolute_url()
        else:
            return '/core/group/ticket/{0}/'.format(self.id)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM