我有一个包含所有类和内容的大型模型文件,很难在一个文件中维护所有内容。所以我把它重构成了一个模型文件夹, init .py并且每个类都有一个文件。
然后我做了manage_noDebug.py schemamigration picviewer --auto
manage_noDebug.py schemamigration migrate picviewer
并从数据库中删除了表,但没有像我想象的那样添加了model_ *表。我现在能拿到它来获取我的模型文件吗?
manage_noDebug.py sql picviewer
以上输出为空
我的文件夹的结构是:
picviewer /楷模/ 的初始化的.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'
设置已安装的应用:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'picviewer',
'south'
)
我尝试从项目目录中删除/ 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)
看起来“本机”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>
这是我的模型文件夹的目录:
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
答案 0 :(得分:11)
要公开类,您必须在__init__.py
中导入它们,例如:
from Picture import Picture
from paperType import paperType
...
__all__ = ['Picture', 'paperType', ...]
导入的顺序非常重要。
如果您不这样做,则您没有访问路径picviewer.models.Picture
,而是picviewer.models.Picture.Picture
。
答案 1 :(得分:3)
可能缺少app_label:http://docs.djangoproject.com/en/dev/ref/models/options/#app-label。更多也在syncdb ignores imported models中涵盖了大部分内容。如果要添加更多详细信息,以便可以更新答案。
更新:http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/似乎模型可能没问题。迁移可能是问题所在。