Как Django пропускает приложение при использовании команды syncdb - PullRequest
2 голосов
/ 25 апреля 2011

У меня есть проект Django, в котором есть два приложения (одно создано как отладочный тест). Для теста отладки syncdb помещает модель в базу данных, но для другой - нет.

  • Оба в settings.INSTALLED_APPS.
  • Существует около семи моделей, ни одна из которых не опознана.
  • Ни сервер, ни страница, ни консоль syncdb не выдают ошибок.
  • Модели находятся в каталоге моделей . В качестве теста есть еще один в app / models.py (тоже не работает).
  • Самое поразительное для меня то, что приведенный ниже код отображает модели, которые не синхронизированы (выполняются из пропущенного приложения):
for model in get_models():  
    models.append(model)  
pass models to a template  

Любая помощь будет высоко ценится. Я думаю, что это что-то тривиальное, но у меня нет идей, что можно попробовать.

Спасибо

UPDATE:

INSTALLED_APPS = (  
    'django.contrib.auth',  
    'django.contrib.contenttypes',  
    'django.contrib.sessions',  
    'django.contrib.messages',  
    'django.contrib.admin',  
    'techtree',  
    'froink',  
)

Структура:

  • project/techtree/models.py (содержит тестовую модель)
  • project/techtree/models/__init__.py (как описано здесь )
  • project/techtree/models/typ.py (содержит тип модели)

Есть еще файлы того же типа, что и в последней строке.

Ответы [ 4 ]

2 голосов
/ 20 мая 2011

Я столкнулся с той же проблемой. Мне потребовались часы, чтобы понять, как сгруппировать модели в отдельный каталог.Вот как это сделать,

Добавьте мета-класс для каждой из ваших моделей с параметром app_label.

from django.db import models

class Test(models.Model):
    class Meta:
        app_label = 'myapp'

Вот где я узнал об этом, Размещение моделей Django вОтдельные файлы

Но для этого недостаточно было импортировать модели в файл __init__.py в каталоге моделей, например,

from YourModelFile import *
2 голосов
/ 25 апреля 2011

Вам не хватает файла __init__.py в каталоге моделей второго приложения? Это означало бы, что его нельзя найти на пути.

Можете ли вы показать нам настройки INSTALLED_APPS и структуру каталогов, пожалуйста?

Глядя на вашу структуру каталогов, я думаю, что могу догадаться, что не так.

my_app/
    __init__.py
    my_module.py
    my_module/
        __init__.py
        my_python_file.py

Что с импортированной вымышленной структурой каталогов, что импортируется, когда я делаю следующее?

from my_module import *

Импортирует ли это все изнутри my_module.py или все из каталога my_module?

Используйте одно или другое. Не оба. Поместите все в свой файл models.py и избавьтесь от каталога, если у вас нет веских причин иметь каталог models. Вы, вероятно, нет.

0 голосов
/ 25 апреля 2011

Проверьте имя файла

__init__.py

, а не

init.py

0 голосов
/ 25 апреля 2011

Django обычно ищет только файл models.py. Если у вас есть models.py и подкаталог модуля с именем models с файлом __init__.py, это значит, что модели не распознаются правильно (я думаю). Вы можете сделать один из этих двух:

  • Полностью удалите свой подмодуль и сохраните все определения модели в models.py

OR

  • Удалить models.py in techtree. Добавьте файл models.py в ваше приложение techtree.models, где вы храните определения модели. Добавьте 'techtree.models' к вашему INSTALLED_APPS (просто 'techtree' недостаточно).

Надеюсь, что один из этих ответов поможет.

...