Django "Model class <Class> doesn't declare an explicit app_label and isn't in an applicatio



我收到了这个错误,我已经尝试了很多小时来修复它,当我将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

没有必要添加基类。我现在能够正确地运行迁移了。我希望这对某人有帮助。

相关内容

最新更新