如何在 django 3.0 中从 __init__.py 中的 base.py 导入类。似乎无法在应用程序注册表时设置self.apps_ready


Django版本-3.0

BaseModel-base_models/models.py

# Create your models here.
from django.db import models

class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)

base_models/__init__.py

from base_models.models import BaseModel

设置.py

INSTALLED_APPS = [
...,
'base_models.apps.BaseModelsConfig',
...
]

错误-

文件"/Users/vaibhavsharma/vabhav/workspace/rm-api/rm-api/base_models/__init__.py",第1行,位于从base_models.models导入BaseModel文件"/Users/vaibhavsharma/vabhav/workspace/rm-api/rm-api/base_models/models.py",第6行,位于类BaseModel(models.Model):文件"/Users/vaibhavsharma/vabhav/workspace/rmApi/env/lib/python3.7/site packages/django/db/models/base.py",第107行,在newapp_config=apps.get_containing_app_config(module)中文件"/Users/vaibhavsharma/vabhav/workspace/rm-api/env/lib/python3.7/site packages/django/apps/registry.py",第252行,在get_containing_app_config中self.check_apps_ready()check_apps_ready中的文件"/Users/vaibhavsharma/vabhav/workspace/rmApi/env/lib/python3.7/site packages/django/apps/registration.py",第135行引发AppRegistryNotReady("尚未加载应用程序。")django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。

我找到了答案,在Django 3.0中无法做到这一点。在这个版本中,似乎在每个应用程序初始化self-check_apps_ready()函数都是从app/registry.py运行的,它本身是从app/settings.py的INSTALLED_apps检查的。

下面是我如何使用BaseModel的。

  1. python manage.py startappbase
  2. 已从基础应用程序中删除models.py文件
  3. 在同一应用程序中创建了模型目录
  4. base/models/中创建了__init__.py文件
  5. base.py中初始化我的模型
  6. 包含init.py(base/models/__init__.py)中的BaseModelfrom .base import BaseModel
  7. 最后在base/__init__.py中包含from .models import BaseModel
  8. 通过from base import BaseModel在应用程序中的任何位置包含BaseModel

完成!

参考-https://docs.djangoproject.com/en/3.0/topics/db/models/#organizing-一揽子模型

最新更新