我收到了这个错误,我已经尝试了很多小时来修复它,当我将models.py分离到一个包含多个文件的目录中时,它就出现了。
这是我项目的当前结构。我省略了许多文件,但这些都是相关的:
- 项目文件夹
- 学院
- app1
- app2
- manage.py
- 模型
- _ _ init _ _.py
- 内容.py
- session.py
- app3
- 配置
- 静态的
- 学院
以前,我把所有的模型都放在app2中的一个名为models.py的文件中。然而,由于文件开始变得太大,我把每个模型都分为不同的类别。此外,在__init__.py
中,我导入了以下元素:
from academy.app2.models.content import *
from academy.app2.models.session import *
现在,当我像往常一样尝试使用python manage.py makemigrations app2
进行迁移时,我会得到以下错误:
RuntimeError: Model class app2.models.content.Reward doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
当我搜索这个错误时,我发现了这个答案,然而,当我添加声明app_label的Meta Class时,我得到了这个错误:
RuntimeError: Conflicting 'reward' models in application 'app2': <class 'academy.app2.models.content.Reward'> and <class 'app2.models.content.Reward'>.
这是我的app2:配置文件
class App2Config(AppConfig):
name = 'academy.app2'
这是我的INSTALLED_APPS:
INSTALLED_APPS = [
...
'academy.app2.apps.App2Config',
...
]
当我有一个models.py文件时,这个错误并没有发生,但当我将它分离成单独的文件时。我还试图创建一个额外的基础模型,并在该模型中定义Meta Class,在其他模型中继承,但没有成功。
经过多次尝试,我找到了解决问题的方法:
首先,我将__init.py__
编辑为以下语法:
from .content import *
from .session import *
from .system import *
此外,我更新了从一个文件到另一个文件的导入,从app2.models.file
格式更新为:academy.app2.models.file
。
没有必要添加基类。我现在能够正确地运行迁移了。我希望这对某人有帮助。