Python Django未为模型创建db表(既不使用syncdb也不使用South)

Python Django未为模型创建db表(既不使用syncdb也不使用South),python,django,django-south,syncdb,Python,Django,Django South,Syncdb,我在Centos VPS上有一个Django项目 我创建了一些模型并对它们进行了调试,这样它们就可以进行验证,并且不会出现错误。 我将它们放在myapp的“models”文件夹中,并已将每个模型添加到此目录的init文件中,例如: 从类别导入类别 我将应用程序添加到settings.pyINSTALLED_APPS并运行: Python manage.py syncdb 它似乎工作得很好,并且添加了除我的应用程序之外的所有表 然后我安装了South并将其添加到已安装的应用程序中,然后再次尝试s

我在Centos VPS上有一个Django项目

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

从类别导入类别

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

Python manage.py syncdb
它似乎工作得很好,并且添加了除我的应用程序之外的所有表

然后我安装了South并将其添加到已安装的应用程序中,然后再次尝试syncdb并运行:

Python manage.py schemamigration myapp --initial
它正确地生成了文件,但其中没有任何内容(我的模型中没有任何表)

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


你知道这里会出什么问题吗?为什么我找不到任何东西来检测我的模型?

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

  • 将South添加到已安装的应用程序
  • 第一次运行syncdb
  • 将您的应用添加到已安装的应用*
  • 运行south初始化命令:

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

    python manage.py migrate
    
  • 如果要转换项目,请执行以下操作:

  • 添加south后运行syncdb
  • 运行:

    manage.py将\u转换为\u south myapp

  • 并从现在起使用south来管理您的迁移

    *p、 你可以同时添加south和你自己的应用,如果你记住把south放在你自己的应用之前。这是因为django按顺序读取已安装的应用程序-它在所有应用程序上运行syncdb,但在安装south之后,它不会安装其余的应用程序,而是告诉您使用south命令来处理这些应用程序

    编辑

    我误导了你。因为你把重点放在了南方,我没有意识到问题是你试图把模型作为一个目录模块,而不是一个普通的文件。这是一个很好的解决方案,实际上与您最初的想法完全相同:

    假设这是你的结构:

    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!
    
    from bar import Foo
    
    \uuuu init\uuuu.py
    需要如下所示:

    from django.db import models
    
    class Foo(models.Model):
        # fields...
    
        class Meta:
            app_label = 'myapp' #you need this!
    
    from bar import Foo
    
    确保它看起来像这样,它就会工作

    更新日期2014年8月18日


    票改成了,因为显然app_标签存在更大的问题。哈扎

    运行以下命令

    python manage.py makemigrations yourappname
    
    python manage.py migrate
    

    注意它对我来说适用于django 1.7版本。

    我正在使用--initial,因为它是一款新的应用程序,db中没有任何型号。我尝试了“manage.py convert_to_south myapp”只是为了看看发生了什么,它说“这个应用程序没有模型;这个命令用于已经有模型syncdb'd的应用程序。制作一些模型,然后使用./manage.py schemamigration myapp--initial。”如前所述,我可以运行--initial并按预期执行,除了生成的文件中没有任何内容之外,它不会检测到任何模型。这些都是新模型,没有一个在db.1中。你在文章中描述它的方式与我描述它的方式不同。你能分享模特吗?还有您认为相关的任何其他信息。我不认为我看到了整个问题,雪人现在已经按照您的建议从“models”文件夹中的
    \uuu init\uuu.py
    中删除了引用。谢谢,虽然它没有改变我的问题,因为没有检测到任何模型。我不希望它改变任何东西,我只是提到了它。酷,我现在已经添加了一个模型的例子来描述上述问题。请编辑您的原始帖子,并添加您的评论作为其一部分,像这样不可读我现在已经将其添加到原始帖子中,需要更多信息吗?请查看我的其他评论请查看我的编辑以获得更新的解决方案。