Pregunta

Mi segunda pregunta no tan hábil del día: tengo un proyecto django con cuatro aplicaciones instaladas. Cuando ejecuto manage.py syndb, solo crea tablas para dos de ellos. Que yo sepa, no hay problemas en ninguno de mis archivos de modelos, y todas las aplicaciones se especifican en INSTALLED_APPS en mi archivo de configuración. El syndb Manage.py parece ignorar dos de mis aplicaciones.

Una cosa que es única acerca de los dos "ignorados" aplicaciones es que los archivos de modelos importan modelos de las otras dos aplicaciones y las usan como claves foráneas (no sé si esto es una buena / mala práctica, pero me ayuda a mantenerme organizado). Sin embargo, no creo que ese sea el problema, porque comenté los modelos con clave externa y las tablas aún no se crearon. Estoy perplejo.

ACTUALIZACIÓN: cuando comento las líneas que importan archivos de modelos de otras aplicaciones, syndb crea mis tablas. Quizás no entiendo algo sobre cómo los archivos de modelos en aplicaciones separadas se relacionan con otros. Pensé que estaba bien usar un modelo de otra aplicación como clave externa simplemente importándolo. ¿No es cierto?

¿Fue útil?

Solución

Desafortunadamente, manage.py silenciosamente no puede cargar una aplicación donde hay un error de importación en sus modelos.py ( ticket # 10706 ). Lo más probable es que haya un error tipográfico en uno de sus archivos models.py ... verifique todas las declaraciones de importación de cerca (o use pylint).

Recientemente, syncdb dejó de cargar un par de mis aplicaciones, y sqlall me dio el error "No se pudo encontrar la aplicación con etiqueta foo". Sin saber que esto a veces significa "Se encontró una aplicación con etiqueta foo pero no se pudo cargar debido a que se produjo ImportError", me llevó media hora darme cuenta de que estaba tratando de importar 'haslib' en lugar de 'hashlib' en uno de mis archivos models.py.

Otros consejos

Creo que me encontré con algo similar.

Tuve un problema en el que no se restablecía un modelo. En este caso, resultó que había un error en mis modelos que no se escupía.

Aunque creo que syncdb, cuando se ejecuta, escupe algún tipo de error.

En cualquier caso, intente importar su archivo de modelos desde el shell y vea si puede.

$ manage.py shell
>>> from myapp import models
>>>

Si hay un error en el archivo, esto debería señalarlo.

Según su actualización, parece que puede tener un problema de importación cruzada. En lugar de:

from app1.models import X

class ModelA(models.Model):
    fk = models.ForeignKey(X)

Prueba:

class ModelA(models.Model):
    fk = models.ForeignKey("app1.X")

... aunque creo que debería obtener un error en syncdb.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top