Django model subclassing: Get the subclass by querying the superclass

后端 未结 4 1623
渐次进展
渐次进展 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条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-16 23:43

    Thanks mr. Roseman for your reply. I developed your idea a bit further. Here is what I came up with:

    def related_object(self, default_pointer_name='_ptr'):
            models = [A,B] #models
            object = None
    
            argument = '%s%s' %(self.__class__.__name__.lower(), default_pointer_name)
            query = { argument : self}
    
            for model in models:
                try:
                    object = model.objects.get(**query)
                except model.DoesNotExist:
                    pass
                else:
                    return object
    
            if object == None:
                raise RelatedObjectException
            return object
    

    This is a method used by BaseMedium.

提交回复
热议问题