Абстрактные модели Django: как использовать родительский метод в дочернем классе?

Абстрактные базовые классы полезны для размещения некоторой общей информации в ряде других моделей. Теперь я хотел бы создать методы в моих абстрактных базовых классах, которые я мог бы вызывать из каждого дочернего класса. Что-то вроде этого, например:

# models.py

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    @property
    def full_name(self):
        "Returns the person's full name."
        return '%s %s' % (self.first_name, self.last_name)

    class Meta:
        abstract = True

class Student(Person):
    school = models.CharField(max_length=50)

class Employee(Person):
    work = models.CharField(max_length=50)
# any HTML template rendered by a view returning a *Student* instance to the template engine

{{ student_instance.full_name }}

# any HTML template rendered by a view returning a *Employee* instance to the template engine

{{ employee_instance.full_name }}

Однако это не работает . Почему?

Обратите внимание, что перемещение метода full_name в Student и в Employee устранило бы проблему. Однако, следуя принципу DRY, я хотел бы найти лучшее решение. Что я могу сделать?

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