Django model subclassing: Get the subclass by querying the superclass

后端 未结 4 1622
渐次进展
渐次进展 2020-12-16 23:01

The following code is given:

class BaseMedium(models.Model):
    title = models.CharField(max_length=40)
    slug = models.SlugField()

class A(BaseMedium):
         


        
4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-16 23:24

    This worked for me (using self.subclass_name_in_lower_case): In this example subclasses are TextTreeItem, CategoryTreeItem and KeywordTreeItem.

    class TreeItem(MPTTModel):
        parent = TreeForeignKey('self', on_delete=models.CASCADE, verbose_name=_('Parent'),
                                null=True, blank=True, related_name='%(class)s_related')
    
        objects = CustomTreeManager()
    
        @property
        def daughter(self):
            try:
                return self.texttreeitem
            except TreeItem.texttreeitem.RelatedObjectDoesNotExist:
                pass
    
            try:
                return self.categorytreeitem
            except TreeItem.categorytreeitem.RelatedObjectDoesNotExist:
                pass
    
            try:
                return self.keywordtreeitem
            except TreeItem.keywordtreeitem.RelatedObjectDoesNotExist:
                return self
    

提交回复
热议问题