好的,所以我有两个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子类。
当有问题的对象是实际的子类ProjecTicket对象时,我想做的就是访问子类get_absolute_url()。
我知道我可以从子类中获取父类,但是我希望能够做到相反。
有人能做到这样吗?如果是这样,您采取了什么方法?
答案 0 :(得分:1)
这是我现在可以想到的一种方法:
我确定您知道继承django模型会与父级建立OneToOne关系。因此,Ticket
对象也是ProjectTicket
类的实例,它们上将具有名为projectticket
的属性。您可以检查该值并相应地返回网址:
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)