为可重用的 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:为可重用模型字段创建一个 Mixin

django 可重用应用程序:删除迁移中的依赖项?

如何在 Django 中使用 South 将数据从一个模型迁移到另一个模型?

如何将 UITableViewController 创建为可重用模块?

创建可重用的 Django 应用程序?

将整数转换为可迭代对象以方便代码重用