Предполагается простой набор унаследованных классов Model, например:
class BaseObject(models.Model):
some_field = models.SomeField(...)
class AwesomeObject(BaseObject):
awesome_field = models.AwesomeField(...)
class ExcellentObject(BaseObject):
excellent_field = models.ExcellentField(...)
и запрос, который выглядит следующим образом:
found_objects = BaseObject.objects.filter(some_field='bogus')
Как лучше всего взять каждый найденный объект
и превратить его обратно в производный класс? Код, который я использую сейчас, такой:
for found in found_objects:
if hasattr(found, 'awesomeobject'):
ProcessAwesome(found.awesomeobject)
elif hasattr(found, 'excellentobject'):
ProcessExcellent(found.excellentobject):
Но мне кажется, что это злоупотребление hasattr. Есть ли лучший способ сделать это, не создавая явного поля «тип» в базовом классе?