2012-05-08 3 views
0

Я пытаюсь реорганизовать мой код для серии моделей Django, но это справедливо для общего импорта python. Позвольте мне объяснить мою установку и проблемы (с укомплектовать поддельные классы и т.д.)Импорт модулей Python для переопределения пространства имен/__ repr__ для рефакторинга

APP_ROOT/ 
|- __init__.py 
|- tests/ 
|- urls.py 
|- models/ 
| |- __init__.py 
| |- BunchOfModels.py 
| |- SomeMoreModels.py 
\- admin.py 

в models.__init__:

# models/__init__.py 
from APP_ROOT.models.BunchOfModels import * 
from APP_ROOT.models.SomeMoreModels import * 

это позволяет мне сделать следующее:

from APP_ROOT.models import SuperModel 
# Where SuperModel is in SomeMoreModels 

Проблема заключается в том, что класс Реестр:

<class 'project.APP_ROOT.models.SomeMoreModels.SuperModel'> , который испортил внешние ключи.

мой вопрос:

Есть ли способ сделать это так, чтобы все мои классы имеют магнезии больше как: <class 'project.APP_ROOT.models.SuperModel'> без вручную перегрузки __repr__ для каждого класса. Я даже не уверен, что это решит проблему, и даже если бы это произошло, это не очень хорошо переносило бы.

или мне нужно вернуться к использованию одной большой, уродливый файл ...

+1

Django не рекомендует распространять ваши модели на несколько файлов. – San4ez

ответ

0

Как я уже заметил, Django не рекомендует вам распространять свои модели на несколько файлов. Но это может решить вашу проблему

from django.db import models 

class SuperModel(models.Model): 
    class Meta: 
     app_label = 'APP_ROOT' 

app_label атр должен быть в Meta класса внутри каждой модели. Вы также можете inheritMeta от базового метакласса.

Другим подходом может быть перемещение менеджеров, функция полезности за пределами models.py (если у вас есть). Но в этом случае вы, скорее всего, получите круговой импорт.

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