Кастинг объекта модели Django, который переключает логику на типы, чтобы с ним было проще работать

У меня есть модель Django, которая имеет поле type:

class MyModel(models.Model):
    type = models.CharField(choices=MyModelTypes.choices)
    ...
    
    def some_func(self):
        if self.type == "TYPE_1":
            do_something_1()
        elif self.type == "TYPE_2":
            do_something_2()

Это становится очень сложным и приводит к тому, что везде мусолятся условия, поэтому мне интересно, есть ли какой-то способ привести мою модель в какой-то конкретный объект, который имеет конкретную реализацию этой some_func() функции для типа.:

class MyModelTypeA:
    ...

class MyModelTypeB:
    ...

class MyModel(models.Model):
    type = models.CharField(choices=MyModelTypes.choices)
    ...
    
    def some_func(self):
        # Obviously this won't work, but I want something that allows me to turn
        # MyModel into the right type then call the `some_func()` (which has logic 
        # specific to the `type`).
        MyModelType(self).some_func()

Или, возможно, это неправильный подход. Есть идеи?

Вернуться на верх