Skip to main content
 首页 » 编程设计

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

2024年12月31日17zfyouxi

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