Я пытаюсь сделать наследование модели Джанго следующим образом:Наследование: Расширение Классы модели в суб-файл
from apps.main.models import Catalog
class ExtendedModel(Catalog):
class Meta:
abstract = True
def print_hello(self):
print 'hello!!'
Однако, когда я пытаюсь использовать этот метод, он говорит, что не найдено :
>>> from apps.main.models_master_extension import ExtendedModel
>>> obj=ExtendedModel.objects.all()[0]
>>> obj
<Catalog: 81758604>
>>> obj.print_hello()
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Catalog' object has no attribute 'print_hello'
что бы правильный способ расширения Catalog
класса в другом файле? Причина, по которой мне нужно сделать это, заключается в том, что методы, участвующие в классе Catalog
, расширяют 1000 строк, и я хочу отделить некоторые из них по функциям.
Как вы создали 'c'? Вы назвали свой класс 'Catalog', но его базовый класс также называется' Catalog', поэтому неясно, какой из них вы использовали для создания экземпляра 'c'. – BrenBarn
@BrenBarn см. Обновленный вопрос. Я думаю, это должно прояснить это. Я изменил имя класса. – David542
Вы не изменили имя класса, вы только что создали «псевдоним», импортировав его под другим именем. Ваш новый класс 'Catalog' не меняет то, что делает старый класс' Catalog'; вы просто создали новый подкласс с тем же именем, что и его суперкласс. Я не знаю достаточно о Django, чтобы узнать, где создается этот класс, но я уверен, вам будет легче отлаживать его, если вы измените имя класса 'Catalog' на что-то еще. Я подозреваю, что вы увидите, что 'obj' является экземпляром« оригинального »класса каталога, а не вашего подкласса. – BrenBarn