syncdb ignores imported models

一曲冷凌霜 提交于 2019-12-24 10:37:21

问题


I have a project, structured like this:

project/
   __init__.py
   db/
      models/
         __init__.py
         article.py
         project.py
         ontology/
            __init__.py
            coded.py

It's a little bit bigger, but that's the idea. models.__init__.py contains:

from db.models.article import *
from db.models.project import *
from db.models.ontology.coded import *

When running syncdb, it ignores all models imported in models.__init__.py. There are no ImportError's, and when adding a print statement to the __init__.py, it happily prints the import models (while running syncdb).

Models defined in __init__.py work though.

Why is that? Can I force syncdb to account for my imported models?

Edit: The application is in INSTALLED_APPS:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'amcatnavigator.navigator',
'amcatnavigator.db',
)

Thanks!


回答1:


According to South (syncdb) docs: http://south.aeracode.org/docs/tutorial/part1.html It will create tables only for those models that are in INSTALLED_APPS section in settings.py file. If model is being used, but its changed and you don't want to lose any data - use migrations: http://south.aeracode.org/docs/tutorial/part1.html#the-first-migration

UPDATE: As far as i looked Django by design wont find the models within different directories: http://code.djangoproject.com/ticket/14007 you might want to use app_label

UPDATE: app_label docs: http://docs.djangoproject.com/en/dev/ref/models/options/#app-label




回答2:


You need to add app_label = 'db' to your models' Meta inner classes.




回答3:


Looks like your db module is not included in the INSTALLED_APPS list in your settings. It is not enough information for other variants.



来源:https://stackoverflow.com/questions/5662313/syncdb-ignores-imported-models

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!