¿Cómo puede tener declaraciones de modelo en dos directorios diferentes en Django?

Tengo el modelo en el directorio Código que contiene " init .py", "models.py" y "admin.py". Funciona correctamente solo.

Quiero tener el directorio Historial que tiene el modelo de las revisiones de las preguntas dadas. Tengo los archivos similares en el directorio.

Necesito decirle a Django que use el modelo en el directorio "Historial" de alguna manera, ya que tengo una relación ManyToMany en la tabla Preguntas con el otro directorio.

Me sale el siguiente error de importación

ImportError at /

cannot import name history

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Exception Type:     ImportError
Exception Value:    

cannot import name history

Exception Location:     /home/noa/build/CML/../CML/codes/models.py in <module>, line 2
Python Executable:  /usr/bin/python
Python Version:     2.6.2
Python Path:    ['/home/noa/build/CML', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/var/lib/python-support/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/var/lib/python-support/python2.6/gtk-2.0', '/var/lib/python-support/python2.6/pyinotify', '/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode', '/usr/local/lib/python2.6/dist-packages']
Server time:    Fri, 11 Dec 2009 15:46:30 -0600
0
anon 12 dic. 2009 a las 01:00

3 respuestas

La mejor respuesta

Como parece que ambos directorios son aplicaciones de Django, y suponiendo que los haya puesto a ambos en su lista INSTALLED_APPS en settings.py, puede referirse a ellos usando una cadena sin tener que importar:

# in code/models.py

class Questions(models.Model):
    histories = models.ManyToManyField('history.MyHistoryModel')

Tenga en cuenta que la ruta distingue entre mayúsculas y minúsculas ... así que si su aplicación realmente se llama 'Historial', deberá hacer referencia a ella usando 'History.MyHistoryModel'.

2
Jarret Hardie 11 dic. 2009 a las 22:11

En general, las personas solo tienen un directorio de "modelos", o incluso a veces solo un archivo de modelos. Si llega al punto de sentir que necesita 2 directorios completos para sus modelos, probablemente sea mejor comenzar a pensar en dividir su aplicación, en un par de pequeñas aplicaciones en general. Dicho esto, hay una serie de cosas que podrían estar potencialmente mal solo con su configuración que no podemos ver.

Sin embargo, cada vez que tengo un error de importación, me dejo caer en un shell de Python e intento importar el elemento. Si falla, entonces algo está mal con el módulo (se sorprendería con qué frecuencia olvido __init__.py), o no está correctamente en su ruta de Python.

0
f4nt 11 dic. 2009 a las 22:10

Si el directorio se llama Historial, debe cambiar import history a import History, ya que las importaciones de Python distinguen entre mayúsculas y minúsculas (al menos en mi caja de Linux).

0
Mike Hordecki 11 dic. 2009 a las 22:11