Django:在将数据重构为单独的文件后,syncDB或南方不会识别模型

abo*_*nov 6 django django-models django-south

我有一个包含所有类和内容的大型模型文件,很难在一个文件中维护所有内容.所以我把它重构成一个模型文件夹,init .py和每个类一个文件.

然后我做了

manage_noDebug.py schemamigration picviewer --auto
manage_noDebug.py schemamigration migrate picviewer
Run Code Online (Sandbox Code Playgroud)

和南从数据库中删除了表,但没有像我想象的那样添加了model_*表.我现在可以拿起我的模型文件吗?

manage_noDebug.py sql picviewer
Run Code Online (Sandbox Code Playgroud)

上面的输出是空的

我的文件夹的结构是:

picviewer/models / init .py Picture.py paperType.py ...

其中一个文件类是:

class cartItem(models.Model):
    picture = models.ForeignKey('Picture', null=False)
    paperType = models.ForeignKey('paperType', null=False)
    printSize = models.ForeignKey('printSize', null=False)
    quantity = models.IntegerField(default=1, validators=[validators.MinValueValidator(1)])
    price = models.DecimalField(decimal_places=2,max_digits=8)
    dateCreated = models.DateTimeField(null=False)
    sessionKey = models.ForeignKey(Session, to_field="session_key", null=False)
    user = models.ForeignKey(User,null=True)

    class Meta:
        app_label = 'picviewer'
Run Code Online (Sandbox Code Playgroud)

设置安装的应用:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'picviewer',
    'south'
)
Run Code Online (Sandbox Code Playgroud)

我尝试从项目目录中删除/ migrations /目录并运行syncdb:

D:\~Sasha\eclipse_workspace\zavalen>manage_noDebug.py syncdb
Syncing...
No fixtures found.

Synced:
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.sites
 > django.contrib.messages
 > django.contrib.admin
 > picviewer
 > south

Not synced (use migrations):
 -
(use ./manage.py migrate to migrate these)
Run Code Online (Sandbox Code Playgroud)

看起来既没有"本机"syncDB也没有南方模式迁移看到我的模型.

这是dbShell的表输出:

D:\~Sasha\eclipse_workspace\zavalen>manage_noDebug.py dbshell
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
auth_group                  auth_user_user_permissions
auth_group_permissions      django_admin_log
auth_message                django_content_type
auth_permission             django_session
auth_user                   django_site
auth_user_groups            south_migrationhistory
sqlite>
Run Code Online (Sandbox Code Playgroud)

这是我的模型文件夹的目录:

D:\~Sasha\eclipse_workspace\zavalen\picviewer\models>dir *.py
Directory of D:\~Sasha\eclipse_workspace\zavalen\picviewer\models

15.04.2011  16:38             1 125 cartItem.py
15.04.2011  16:43             1 283 Collection.py
15.04.2011  16:40               419 ImageSizeRatio.py
15.04.2011  16:43               876 Menu.py
15.04.2011  16:43             1 667 Order.py
15.04.2011  14:07             1 457 OrderForm.py
15.04.2011  16:43               490 OrderStatusHistory.py
15.04.2011  16:43               683 paperType.py
15.04.2011  16:43             3 202 Picture.py
15.04.2011  16:43             1 520 printSize.py
15.04.2011  16:43               687 PurchaseItem.py
15.04.2011  16:43             1 239 Tools.py
15.04.2011  16:11                 0 __init__.py
Run Code Online (Sandbox Code Playgroud)

var*_*tec 11

要公开类,您必须在中导入它们__init__.py,例如:

from Picture import Picture 
from paperType import paperType 
...
__all__ = ['Picture', 'paperType', ...]
Run Code Online (Sandbox Code Playgroud)

导入顺序重要.

如果你不这样做,你就没有访问路径picviewer.models.Picturepicviewer.models.Picture.Picture.

  • 检查**中是否有**app_label` (4认同)