Domanda

La mia seconda domanda poco abile del giorno: ho un progetto Django con quattro app installate. Quando eseguo manage.py syndb, crea solo tabelle per due di loro. Per quanto ne so, non ci sono problemi nei file dei miei modelli e tutte le app sono specificate in INSTALLED_APPS nel mio file delle impostazioni. Syndb Manage.py sembra semplicemente ignorare due delle mie app.

Una cosa unica dei due "ignorati" le app è che i file dei modelli importano i modelli dalle altre due app e li usano come chiavi esterne (non so se questa è una buona / cattiva pratica, ma mi aiuta a rimanere organizzato). Non penso che sia questo il problema, perché ho commentato i modelli con chiave esterna e le tabelle non sono ancora state create. Sono perplesso.

AGGIORNAMENTO: quando commento le righe che importano i file dei modelli da altre app, syndb crea le mie tabelle. Forse non sto capendo qualcosa su come i file dei modelli in app separate si collegano ad altri. Ho pensato che fosse giusto usare un modello di un'altra app come chiave esterna semplicemente importandolo. Non è vero?

È stato utile?

Soluzione

Sfortunatamente, manage.py non riesce a caricare silenziosamente un'app in cui è presente un errore di importazione nel suo models.py ( biglietto n. 10706 ). È probabile che ci sia un refuso in uno dei tuoi file models.py ... controlla attentamente tutte le dichiarazioni di importazione (o usa pylint).

Recentemente syncdb ha smesso di caricare un paio di mie app e sqlall mi ha dato l'errore "Impossibile trovare l'app con etichetta foo". Non sapendo che questo a volte significa che è stata trovata l'app con etichetta foo ma che non è stata caricata a causa del fatto che ImportError è stato sollevato, mi ci è voluta mezz'ora per capire che stavo cercando di importare 'haslib' anziché 'hashlib' in uno dei miei file models.py.

Altri suggerimenti

Penso di aver incontrato qualcosa di simile.

Ho avuto un problema a causa del quale un modello non veniva ripristinato. In questo caso si è scoperto che c'era un errore nei miei modelli che non veniva sputato.

Anche se penso che syncdb, quando eseguito, sputi un qualche tipo di errore.

In ogni caso prova a importare il file dei modelli dalla shell e vedi se puoi.

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

Se si verifica un errore nel file, è necessario segnalarlo.

Secondo il tuo aggiornamento, sembra che potresti avere un problema di importazione incrociata. Invece di:

from app1.models import X

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

Prova:

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

... anche se penso che dovresti ricevere un errore su syncdb.

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