首先:请不要问我:“你为什么需要这个?”。
现在问题本身:我在 INSTALLED_APPS 中安装了几个应用程序。数据库现在是空的,我只想同步一些应用程序。最简单的方法是什么?
我知道我可以基于 syncdb 编写我的自定义管理命令。但遗憾的是,syncdb 的设计方式是我必须复制/粘贴一大块代码,只更改一行。这是我想探索其他可能性的原因。
首先:请不要问我:“你为什么需要这个?”。
现在问题本身:我在 INSTALLED_APPS 中安装了几个应用程序。数据库现在是空的,我只想同步一些应用程序。最简单的方法是什么?
我知道我可以基于 syncdb 编写我的自定义管理命令。但遗憾的是,syncdb 的设计方式是我必须复制/粘贴一大块代码,只更改一行。这是我想探索其他可能性的原因。
你可以managed = False
在Meta
模型的类中做。设置此属性后,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
您可以安装django-extensions
、启用它并使用它的有用命令,例如:
./manage.py sqldiff APP_NAME
它将打印出一个 SQL 命令列表,您可以运行这些命令来按名称同步您的应用程序。
Django-extensions 文档在这里:https ://django-extensions.readthedocs.org/en/latest/
对于应用程序的启动迁移,有app_label
以下论点:
<app_label>
:指定的应用程序运行其迁移,直到最近的迁移。由于依赖关系,这也可能涉及运行其他应用程序的迁移。
例子
./manage.py migrate myapp
请参阅Django 的文档。
这似乎有效 -python manage.py syncdb --database=NEW_APP_DB