Saltar al contenido

No se pueden importar modelos de otra aplicación en Django

Poseemos la mejor información que hallamos en línea. Nuestro deseo es que te sirva de ayuda y si deseas compartir algo que nos pueda ayudar a crecer hazlo con total libertad.

Solución:

Esto podría deberse a importación circular problemas. Para evitar esto debes cargar el modelo dinámicamente:

Para versiones recientes de django (1.7+) use el registro de la aplicación:

from django.apps import apps
MyModel1 = apps.get_model('app1', 'MyModel1')

Para versiones anteriores de django (<1.7):

from django.db.models.loading import get_model
MyModel1 = get_model('app1', 'MyModel1')

Nota 1: Si desea definir un relación ForeignKeyhay no hay necesidad de una declaración de importación por separado. Django te tiene cubierto en esto:

Si app1 es una aplicación instalada, debe definir la relación ForeignKey de la siguiente manera:

# in app2.py
class MyModel2(models.Model):
   mymodel1 = models.ForeignKey('app1.MyModel1')

Nota 2: Los get_model solo funciona si app1 es una aplicación instalada y MyModel1 es el modelo desde el que desea importar app1.

Nota 3: Trate de evitar la importación de comodines (from ... import *), ya que esto es una mala práctica.

Definitivamente es una importación circular.

Pero creo que lo que necesita es usar modelos como una especie de RetationFields (ForeignKey, ManyToManyField o OneToOneField) argumentos. Por lo tanto, debe omitir la importación y el uso como tal:

# app1/models.py
class Model1(models.Model):
    relation_field = models.ForeignKey('app2.Model2')

De documentos:

Si necesita crear una relación en un modelo que aún no se ha definido, puede usar el nombre del modelo, en lugar del objeto del modelo en sí.

Para hacer referencia a modelos definidos en otra aplicación, puede especificar explícitamente un modelo con la etiqueta de aplicación completa

Sólo hay que poner str objeto como primer argumento de los campos de relación que conducen a ..

Nota: es mejor evitar importar todo desde el módulo (from import *)

Si desea importar solo algún módulo específico, no use import *.

Tomará más tiempo cargar toda su biblioteca y, por lo tanto, también puede afectar la velocidad de su aplicación.

Si desea usar algunos módulos de su segunda aplicación, simplemente agregue el nombre del módulo en lugar de bibliotecas completas, algo como esto:

from app2.models import Module1, Module2

o puede ser un problema de importación circular como otro aclara.

Gracias.

Nos puedes respaldar nuestro quehacer dejando un comentario o dejando una puntuación te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *