从超类访问Django子类方法

2024-10-02 22:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我有两个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对象,包括一些ProjectTicket子类。你知道吗

我想做的是访问get\u absolute\u url()子类,当所讨论的对象是实际的子类projectcket对象时。你知道吗

我知道我可以从子类中得到父类,但是我希望能够做相反的事情。你知道吗

有人取得过这样的成就吗?如果是,你采取了什么方法?你知道吗


Tags: 对象selftrueurlgetreturnmodelsdef
1条回答
网友
1楼 · 发布于 2024-10-02 22:25:53

我现在可以想到一个办法:

我相信你知道继承django模型会创建一个与父对象的OneToOne关系。因此,Ticket对象也是ProjectTicket类的实例,它们将有一个名为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)

相关问题 更多 >