django选择syncdb的应用程序

时间:2013-05-22 19:56:55

标签: python django django-syncdb syncdb django-manage.py

首先:请不要问我:“你为什么需要这个?”。

现在问题本身:我在INSTALLED_APPS中安装了几个应用程序。数据库现在为空,我想只同步一些应用程序。最简单的方法是什么?

我知道我可以基于syncdb编写自定义管理命令。但令人遗憾的是,syncdb的设计方式使得我必须复制/粘贴大量代码,只更改一行。这是我想探索其他可能性的原因。

4 个答案:

答案 0 :(得分:1)

您可以在模型的managed = False类中执行Meta。设置此属性后,syncdb将无法为您管理应用的表格。你可以阅读它here

另一种方法是编写自定义路由器

class MyAppRouter(object):
    """A router to control all database operations on models in
    the myapp application"""

    def db_for_read(self, model, **hints):
        pass

    def db_for_write(self, model, **hints):
        pass

    def allow_relation(self, obj1, obj2, **hints):
        pass

    def allow_syncdb(self, db, model):
        if model._meta.app_label in ['myapp1', 'myapp2']
            return False

答案 1 :(得分:0)

您可以安装django-extensions,启用它并使用它的有用命令,如:

./manage.py sqldiff APP_NAME

它将打印出一个SQL命令列表,您可以按名称运行这些命令来同步您的应用程序。

Django-extensions文档:https://django-extensions.readthedocs.org/en/latest/

答案 2 :(得分:0)

这似乎有效 - python manage.py syncdb --database=NEW_APP_DB

答案 3 :(得分:0)

对于app的启动迁移,有app_label参数:

  

<app_label>:指定的应用最多运行其迁移   最近的迁移。这可能还涉及运行其他应用的迁移,   由于依赖性。

实施例

./manage.py migrate myapp

请参阅Django's docs