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 无法为嵌套应用程序进行迁移的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Elastic Beanstalk 上使用 Docker 进行 Django 迁移