Django 无法为嵌套应用程序进行迁移

Posted

技术标签:

【中文标题】Django 无法为嵌套应用程序进行迁移【英文标题】:Django cannot makemigrations for a nested app 【发布时间】:2019-06-24 17:36:25 【问题描述】:

我正在尝试在我的 django 项目中创建一个嵌套应用程序,但 makemigrations 没有检测到它。我有以下目录结构:

myproject/
├── db.sqlite3
├── manage.py
├── myproject
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── parentapp
    ├── admin.py
    ├── apps.py
    ├── childapp
    │   ├── admin.py
    │   ├── apps.py
    │   ├── __init__.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    ├── __init__.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

这里有一些相关的代码:

myproject/myproject/settings.py:

INSTALLED_APPS = [
    ...
    'parentapp',
    'parentapp.childapp',
]

myproject/parentapp/childapp/__init__.py:

default_app_config = "parentapp.childapp.apps.ChildAppConfig"

myproject/parentapp/childapp/apps.py:

from django.apps import AppConfig

class ChildAppConfig(AppConfig):
    name = 'parentapp.childapp'

myproject/parentapp/childapp/models.py:

from django.db import models

class Child(models.Model):

    class Meta:
        app_label = "parentapp.childapp"

    name = models.CharField(max_length=100)

我在尝试进行迁移时看到以下行为:

$ myproject/manage.py makemigrations
No changes detected

$ myproject/manage.py makemigrations childapp
No changes detected in app 'childapp'

$ myproject/manage.py makemigrations parentapp.childapp
'parentapp.childapp' is not a valid app label.  Did you mean 'childapp'?

我做错了什么?我看到大量其他具有嵌套应用程序的可重用应用程序(例如 django-allauth)。

【问题讨论】:

你有一个migrations 目录和一个__init__.py 文件吗? @gpichot 是的,我愿意。在“parentapp”和“childapp”中。 你能做一个tree myproject 然后用输出更新你的问题吗?您是使用startapp 还是手动创建子应用程序? 我添加了tree 输出。我使用 startapp 创建了 childapp。 您是否尝试从 Child 模型中删除您的 app_label 【参考方案1】:

您需要从Child.Meta 中删除app_label 或将其更改为兼容的应用名称(没有“.”、小写和下划线)。

【讨论】:

以上是关于Django 无法为嵌套应用程序进行迁移的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8 迁移无法将列 ID 转换为整数

迁移回滚期间无法从其他应用导入 Django 模型

在 AWS Elastic Beanstalk 上使用 Docker 进行 Django 迁移

不要为 Django 模型应用现有迁移

Django - 无法为具有动态 upload_to 值的 ImageField 创建迁移

Django迁移无法将用户实例分配给用户字段