Domanda

Come si può avere dichiarazioni modello in due cartelle diverse in Django?

Ho il modello nella directory Codice , che contiene " init .py", "models.py" e "admin.py". E funziona correttamente solo.

Io voglio avere la directory Storia , che ha il modello delle revisioni delle domande dato. Ho i file simili nella directory.

ho bisogno di dirvi Django ad utilizzare il modello nella directory "Storia" in qualche modo, dal momento che ho un rapporto ManyToMany nella tabella di interrogazioni al l'altra directory.

ottengo il seguente errore di importazione

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
È stato utile?

Soluzione

Dal momento che suona come entrambe le directory sono applicazioni Django, e supponendo che hai messo ciascuno di essi nella vostra lista INSTALLED_APPS in settings.py è possibile fare riferimento a loro utilizzando una stringa senza dover importare:

# in code/models.py

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

Si noti che il percorso è case sensitive ... quindi se app è veramente chiamato 'Storia' è necessario fare riferimento utilizzando 'History.MyHistoryModel'.

Altri suggerimenti

In generale le persone hanno solo una directory "modelli", o anche a volte un solo file modelli. Se si arriva al punto che ti senti bisogno di 2 directory completi per i vostri modelli, probabilmente è meglio iniziare a pensare a rompere il vostro un app, in un paio di piccole applicazioni, invece in generale. Detto questo, c'è un certo numero di cose che potrebbero essere potenzialmente sbagliato solo con la messa a punto che non possiamo vedere.

Ogni volta che ho un errore di importazione, però, ho cadere ad una shell Python e provare a importare la voce. Se fallisce, allora c'è qualcosa che non sia di sbagliato con il modulo (si sarebbe sorpreso quanto spesso mi dimentico __init__.py), o non è correttamente nel tuo percorso di python.

Se la directory si chiama Storia, si dovrebbe cambiare import history a import History, in quanto le importazioni di pitone sono case-sensitive (sulla mia macchina Linux, almeno).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top