Абстрактные модели 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, я хотел бы найти лучшее решение. Что я могу сделать?