0

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

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

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

4

4 回答 4

1

你可以managed = FalseMeta模型的类中做。设置此属性后,syncdb将不会为您管理应用程序的表格。你可以在这里阅读。

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

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
于 2013-05-22T20:17:05.603 回答
0

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

./manage.py sqldiff APP_NAME

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

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

于 2013-05-22T20:00:49.540 回答
0

对于应用程序的启动迁移,有app_label以下论点:

<app_label>:指定的应用程序运行其迁移,直到最近的迁移。由于依赖关系,这也可能涉及运行其他应用程序的迁移。

例子

./manage.py migrate myapp

请参阅Django 的文档

于 2015-12-03T00:43:12.610 回答
0

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

于 2015-12-03T00:24:27.617 回答