#python #django-models #django-syncdb
#python #django-models #django-syncdb
Вопрос:
У меня есть проект, структурированный следующим образом:
project/
__init__.py
db/
models/
__init__.py
article.py
project.py
ontology/
__init__.py
coded.py
Он немного больше, но в этом и заключается идея. models.__init__.py
содержит:
from db.models.article import *
from db.models.project import *
from db.models.ontology.coded import *
При запуске syncdb игнорируются все модели, импортированные в models.__init__.py
. Их нет ImportError
, и при добавлении инструкции print к __init__.py
он успешно печатает импортированные модели (при запуске syncdb).
Однако модели, определенные в __init__.py
, работают.
Почему это? Могу ли я заставить syncdb учитывать мои импортированные модели?
Редактировать: приложение находится в INSTALLED_APPS:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'amcatnavigator.navigator',
'amcatnavigator.db',
)
Спасибо!
Ответ №1:
Вам нужно добавить app_label = 'db'
к вашим моделям мета-внутренние классы.
Ответ №2:
Согласно документам South (syncdb): http://south.aeracode.org/docs/tutorial/part1.html Он создаст таблицы только для тех моделей, которые находятся в разделе INSTALLED_APPS в settings.py файл. Если модель используется, но она изменена, и вы не хотите потерять какие-либо данные — используйте миграции: http://south.aeracode.org/docs/tutorial/part1.html#the-first-migration
ОБНОВЛЕНИЕ: Насколько я понял, Django by design не найдет модели в разных каталогах: http://code.djangoproject.com/ticket/14007 возможно, вы захотите использовать app_label
ОБНОВЛЕНИЕ: документы app_label: http://docs.djangoproject.com/en/dev/ref/models/options/#app-label
Ответ №3:
Похоже, ваш db
модуль не включен в INSTALLED_APPS
список в ваших настройках. Для других вариантов недостаточно информации.
Комментарии:
1. Я должен был упомянуть, что это в INSTALLED_APPS. Добавлено в исходное сообщение в 3 .. 2..