簡體   English   中英

從 SuperClass 訪問 Django SubClass 方法

[英]Access Django SubClass Method from SuperClass

好的,所以我有兩個 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 關系。 因此,同樣是ProjectTicket類實例的Ticket對象將具有一個名為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM