2014-11-23 3 views
0

Я пытаюсь сделать наследование модели Джанго следующим образом:Наследование: Расширение Классы модели в суб-файл

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 строк, и я хочу отделить некоторые из них по функциям.

+1

Как вы создали 'c'? Вы назвали свой класс 'Catalog', но его базовый класс также называется' Catalog', поэтому неясно, какой из них вы использовали для создания экземпляра 'c'. – BrenBarn

+0

@BrenBarn см. Обновленный вопрос. Я думаю, это должно прояснить это. Я изменил имя класса. – David542

+0

Вы не изменили имя класса, вы только что создали «псевдоним», импортировав его под другим именем. Ваш новый класс 'Catalog' не меняет то, что делает старый класс' Catalog'; вы просто создали новый подкласс с тем же именем, что и его суперкласс. Я не знаю достаточно о Django, чтобы узнать, где создается этот класс, но я уверен, вам будет легче отлаживать его, если вы измените имя класса 'Catalog' на что-то еще. Я подозреваю, что вы увидите, что 'obj' является экземпляром« оригинального »класса каталога, а не вашего подкласса. – BrenBarn

ответ

1

Чтобы добавить на дополнительные методы к классу модели, вам необходимо установить proxy=True:

from apps.main.models import Catalog 

class CatalogMasterTitleCreation(Catalog): 
    class Meta: 
     proxy = True 
    def print_hello(self): 
     print 'hello!!' 

https://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models

+0

до этого момента Я думал о какой-то обратной логике с абстрактным = True к каталогу xD – madzohan

Смежные вопросы