У меня есть реальный случай жизни, который можно решить с помощью полиморфизма, как в Java
Где мы можем создать список объектов, принадлежащих тому же типу. Однако у каждого объекта могут быть переопределенные или дополнительные поля.Доступ к дочерним методам в Python Django
class Animal(models.Model):
name = models.CharField(max_length=30)
def speak(self):
return "I am an animal"
class Cat(Animal):
def speak(self):
""" OVERRIDE """
return "MEAOO"
class Dog(Animal):
def speak(self):
""" OVERRIDE """
return "WOOOOF"
Теперь мне нужно получить всех животных, но пусть каждое животное будет использовать его метод говорения. Я не смог сделать это, как показано ниже.
>>> c = Cat(name="MyCAT")
>>> c.save()
>>> d = Dog(name="MyDOG")
>>> d.save()
>>> animals = Animal.objects.all()
>>> animals
[<Animal: Animal object>, <Animal: Animal object>]
>>> for a in animals:
... a.speak()
...
'I am an animal'
'I am an animal'
>>>
Для меня выход должен быть как ниже
'MEAOO'
'WOOOOF'
Есть в любом случае, чтобы сделать подобную вещь в Django?
Это потому, что вы вытаскиваете животных из объекта «Животное», который определяет метод 'speak()' как «Я - животное». Если вы запрашиваете их соответствующие модели, ваши данные должны быть созданы правильно. – monkut
Подробнее о наследовании модели см .: https://docs.djangoproject.com/en/1.7/topics/db/models/#model-inheritance – monkut
Вам нужны подклассы ... try modelutils http: // django-model-utils .readthedocs.org/ен/последний/managers.html # inheritancemanager – cdvv7788