好的,所以我有两个 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)
