El proceso de Django para encontrar clases modelo.

En Django, el proceso de encontrar clases modelo.

La relación entre modelos y aplicaciones en django.

En Django, los modelos deben pertenecer a una aplicación. Los modelos de Django están organizados y administrados por aplicaciones, y cada modelo debe pertenecer a una aplicación.

Una aplicación Django es una unidad funcional independiente que puede contener múltiples modelos, vistas, enrutamiento de URL y otros componentes para implementar funciones específicas o lógica comercial. Cada aplicación tiene su propia estructura de directorios que contiene definiciones de modelo, funciones de vista, archivos de plantilla, etc. relacionados con esa aplicación.

Si bien los modelos deben pertenecer a una aplicación, Django no exige que un proyecto pueda tener solo una aplicación. Según el tamaño y las necesidades de su proyecto, puede crear una o más aplicaciones para organizar y administrar sus modelos.

El proceso de encontrar una clase modelo

Django determina qué aplicaciones contienen clases modelo según la lista INSTALLED_APPS que configuraste en el archivo de configuración de tu proyecto (settings.py). Esta lista contiene todas las aplicaciones utilizadas en el proyecto Django.

  1. Al usar clases modelo, Django primero busca las aplicaciones enumeradas en INSTALLED_APPS. Busca el archivo models.py debajo de cada aplicación, que es donde se colocan las definiciones de clase de modelo de forma predeterminada.

  2. Django usa el paquete importlib integrado de Python para cargar el archivo models.py de cada aplicación y analizar el código que contiene.

  3. Durante este proceso, Django crea un registro de todas las clases del modelo, accesible a través del módulo django.apps.registry. Este registro mantiene el mapeo entre las clases de aplicación y modelo.

  4. Cuando hace referencia a una clase de modelo en su código, Django busca la definición de esa clase de modelo en el registro. Si se encuentra una clase de modelo coincidente, se puede utilizar.

  5. Tenga en cuenta que si se definen varias clases de modelo en el archivo models.py de una aplicación, todas estarán registradas y disponibles para su uso.

De forma predeterminada, Django busca en el directorio de nivel superior de cada aplicación y busca un archivo models.py. No busca en los subdirectorios de forma recursiva. Por ejemplo:

myapp/
├── models.py
└── subdirectory/
    ├── models.py
    └── other_models.py

De forma predeterminada, Django busca definiciones de clase de modelo en el archivo models.py de cada aplicación. Si no define sus clases de modelo en su archivo models.py, Django no podrá cargarlas automáticamente.

Django solo buscará el archivo models.py en el directorio myapp y no cargará automáticamente las clases de modelo en los archivos models.py u other_models.py en el directorio del subdirectorio.

Si desea que Django pueda cargar clases de modelos en subdirectorios, puede importarlas manualmente y registrarlas en el archivo models.py de su aplicación. Por ejemplo, en myapp/models.py:

from .subdirectory.models import MyModel

# 手动导入并注册子目录中的模型类

Al importar manualmente clases de modelos en subdirectorios, puede extender el mecanismo de carga de modelos predeterminado de Django y habilitarlo para cargar definiciones de clases de modelos desde más ubicaciones.

El proceso independiente usa el modelo django para informar un error: jango.core.exceptions.AppRegistryNotReady: las aplicaciones aún no están cargadas.

Cuando usa modelos Django en un proceso separado, puede encontrar errores django.core.exceptions.AppRegistryNotReady: las aplicaciones no están cargadas todavía. Esto se debe a que Django necesita cargar la configuración de la aplicación y registrar la aplicación durante el inicio y, en un proceso independiente, Django aún no ha hecho estas cosas.

Asegúrese de haber inicializado la configuración de la aplicación Django antes de usar modelos Django. Django se puede inicializar manualmente ejecutando el siguiente código:

import django
from django.conf import settings

# 设置 Django 配置模块
settings.configure(DEBUG=True, ...)  # 使用你的实际配置

# 调用 django.setup() 初始化 Django
django.setup()

De esta forma, Django se inicializará de acuerdo a tu configuración, incluyendo cargar la aplicación, registrar modelos, etc.

Supongo que te gusta

Origin blog.csdn.net/inthat/article/details/131400463
Recomendado
Clasificación