gpt4 book ai didi

python - 从父类(super class)访问 Django 子类方法

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:34 25 4
gpt4 key购买 nike

好的,所以我有两个 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 关系。因此,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)

关于python - 从父类(super class)访问 Django 子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53087940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com