Django没有为模型创建数据库表(既不使用syncdb也不使用南部)

时间:2014-01-23 13:19:50

标签: python django django-south syncdb

我在Centos VPS上有一个Django项目。

我创建了一些模型并对它们进行了调试,以便它们验证并且不会出错。 我将它们放在myapp的“models”文件夹中,并将每个模型添加到此目录中的init文件中,例如:

来自类别导入类别

我将应用添加到settings.py INSTALLED_APPS并运行:

Python manage.py syncdb

它似乎运行正常,并添加了除我的应用程序之外的所有表格。

然后我安装了South并将其添加到INSTALLED_APPS并再次尝试syncdb并运行:

Python manage.py schemamigration myapp --initial

它正确生成了文件,但没有任何内容(我的模型没有表格)。

“models”文件夹(usertype.py)中的示例文件

from django.db import models

class UserType(models.Model):
    usertype_id = models.PositiveIntegerField(primary_key=True)
    description = models.CharField(max_length=100)
    is_admin = models.BooleanField()
    is_moderator = models.BooleanField()

class Meta:
    app_label = 'myapp'

任何想法可能会出现问题以及为什么我无法检测到我的模型?

2 个答案:

答案 0 :(得分:10)

运行以下命令

python manage.py makemigrations yourappname

python manage.py migrate

注意它适用于我的django 1.7版本。

答案 1 :(得分:8)

你误解了与南方合作的过程。 South不仅仅是另一个应用程序,它还是一个管理工具。您的应用程序需要从一开始就是南方应用程序或转换为一个。话虽如此,这个过程是这样的:

  1. 将南方添加到INSTALLED_APPS
  2. 首次运行syncdb
  3. 将您的应用添加到INSTALLED_APPS *
  4. 运行south初始化命令:

    python manage.py schemamigration myapp --initial
    
  5. 迁移:

    python manage.py migrate
    
  6. 如果您想转换项目:

    1. 添加南
    2. 后运行syncdb
    3. 运行:

      manage.py convert_to_south myapp

    4. 从现在开始使用南方来管理您的迁移。

      * P.S。 - 您可以同时添加南方和自己的应用程序,如果您记住在自己的应用程序之前放置南方。这是因为django按顺序读取INSTALLED_APPS - 它在所有应用程序上运行syncdb,但是在安装南部之后它将不安装其余部分,而是告诉您使用south命令来处理那些

      修改

      我误导了你。由于你非常重视南方的事情我没有意识到问题是你试图使用模型作为目录模块而不是普通文件。这是一个recognized problem in django,解决方法实际上与您首先完全一样:

      说这是你的结构:

      project/
             myapp/
                  models/
                        __init__.py
                        bar.py
      

      您需要bar.py看起来像这样:

      from django.db import models
      
      class Foo(models.Model):
          # fields...
      
          class Meta:
              app_label = 'myapp' #you need this!
      

      __init__.py需要看起来像这样:

      from bar import Foo
      

      确保它看起来像这样,它会起作用。

      更新2014年8月18日

      故障单已更改为wontfix,因为app_label has been fixed显然是一个更大的问题。 Huzza!