2011-06-08 41 views
5

Recientemente dividí una aplicación en dos separadas porque tenía más de 15 modelos en ella. Obtuve el "error de importación circular". Para resolver este Traté de escribir esto:Intentando evitar las importaciones circulares

from django.db import models 

class App1Model(models.Model): 
    app2model = models.ForeignKey(app2.App2Model) 

El error que estoy recibiendo es: "NameError: nombre 'app2' no está definido". Pero la aplicación2 se agrega correctamente a las aplicaciones instaladas y a la ruta.

project 
    -app1 
     --models.py 
    -app2 
     --models-py 

Respuesta

13

ForeignKey puede tomar una cadena como argumento, es decir models.ForeignKey('app2.App2Model'). Por supuesto, debe intentar diseñar su código para evitar cualquier dependencia circular en primer lugar.

+0

¿Pero qué sucede si necesita el modelo somehwere en el código. Tengo suficientes funciones que necesitan una función de un modelo u otro? –

+1

@HansdeJong No establezca relaciones circulares. Use 'get_model' o las importaciones a nivel de funciones si realmente lo necesita. –

1

aún debe necesitar una sentencia de importación

import app2.App2Model 

Pero si APP2 importaciones app1 que se obtendría un error como usted ha mencionado.

2

Estoy de acuerdo con Cat Plus Plus sobre el diseño de código para evitar dependencias circulares, pero en caso de que no sea capaz de:

try: 
    import app.model 
except ImportError: 
    pass 
+0

Hacky. ¡Pero en un apuro, funciona ...! Gracias – awidgery

Cuestiones relacionadas