为可重用的 Django 应用程序创建迁移
Posted
技术标签:
【中文标题】为可重用的 Django 应用程序创建迁移【英文标题】:Creating migrations for a reusable Django app 【发布时间】:2019-06-19 01:27:20 【问题描述】:我正在编写一个可重用的 Django 应用程序,但在创建迁移时遇到了问题。
我看过this question,我还是一头雾水。我有以下目录结构:
django-mycleverapp/
django-mycleverapp/django_mycleverapp/
django-mycleverapp/django_mycleverapp/__init__.py
django-mycleverapp/django_mycleverapp/apps.py
django-mycleverapp/django_mycleverapp/models.py
django-mycleverapp/django_mycleverapp/urls.py
django-mycleverapp/django_mycleverapp/views.py
django-mycleverapp/example/
django-mycleverapp/example/manage.py
django-mycleverapp/example/example/
django-mycleverapp/example/example/__init__.py
django-mycleverapp/example/example/settings.py
django-mycleverapp/example/example/urls.py
django-mycleverapp/setup.py
如您所见,目录“django_mycleverapp”包含我的可重用应用程序,目录“example”包含一个测试项目。
我将“django_mycleverapp”的模型包含在“示例”设置的INSTALLED_APPS
部分中。
但是,运行 python ~/example/manage.py makemigrations django_mycleverapp
不会构建任何迁移。
有什么建议吗?
我的意思是有一个测试项目将在“/django-mycleverapp/django_mycleverapp/migrations”中构建迁移?
【问题讨论】:
【参考方案1】:您的应用应该在您的项目目录中。您的目录层次结构应如下所示。
django-mycleverapp/
django-mycleverapp/example/
django-mycleverapp/example/django_mycleverapp/
django-mycleverapp/example/django_mycleverapp/__init__.py
django-mycleverapp/example/django_mycleverapp/apps.py
django-mycleverapp/example/django_mycleverapp/models.py
django-mycleverapp/example/django_mycleverapp/urls.py
django-mycleverapp/example/django_mycleverapp/views.py
django-mycleverapp/example/manage.py
django-mycleverapp/example/example/
django-mycleverapp/example/example/__init__.py
django-mycleverapp/example/example/settings.py
django-mycleverapp/example/example/urls.py
django-mycleverapp/example/setup.py
如果您不希望您的应用成为“示例”项目的一部分,而是希望它被您的项目“示例”分离和使用,则必须使用 pip
将其安装到您的项目中(这需要在您的应用的根目录中有一个setup.py
)。
例如,如果您已在 git 存储库“https://gitlab.com/myuser/myproject.git”上发布您的应用,您可以添加到我们的requirements.txt
:
git+https://gitlab.com/myuser/myproject.git@v1.0#egg=myapp_name
如果您还没有在 git 存储库上发布您的应用,您可以将应用的绝对路径添加给您requirements.txt
:
/path/to/django-mycleverapp/django_mycleverapp/
使用 pip
时不要忘记在 virtualenv 中工作。
【讨论】:
那是回答如何进行一般迁移。是否应该始终有一个example
项目具有正确设置的设置并可用于生成迁移?以上是关于为可重用的 Django 应用程序创建迁移的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 中使用 South 将数据从一个模型迁移到另一个模型?