首先:请不要问我:“你为什么需要这个?”。
现在问题本身:我在INSTALLED_APPS中安装了几个应用程序。数据库现在为空,我想只同步一些应用程序。最简单的方法是什么?
我知道我可以基于syncdb编写自定义管理命令。但令人遗憾的是,syncdb的设计方式使得我必须复制/粘贴大量代码,只更改一行。这是我想探索其他可能性的原因。
答案 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。