/ / django sync db question - python, django, django-models

domanda django sync db - python, django, modelli django

Nei modelli di Django si dice che questo modello esiste nei dettagli / models.py

    class OccDetails(models.Model):
title = models.CharField(max_length = 255)
occ = models.ForeignKey(Occ)

Quindi, quando viene eseguito il sync db, vengono creati i seguenti campi

e in seguito a questo vengono aggiunti altri due campi e viene sincronizzato db. I nuovi campi non vengono creati. Quanto è risolvibile, anche ciò che è auto_now = true nel seguente

questi sono i nuovi campi

         created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now_add=True, auto_now=True)

risposte:

7 per risposta № 1

syncDB crea le tabelle del database per tutte le app in INSTALLED_APPS le cui tabelle non sono già state create.

Syncdb non modificherà le tabelle esistenti
syncdb creerà solo tabelle per i modelli che non sono stati ancora installati. Non emetterà mai ALTER TABLE istruzioni per abbinare le modifiche apportate a una classe del modellodopo l'installazione. Le modifiche alle classi di modelli e agli schemi di database spesso implicano qualche forma di ambiguità e, in quei casi, Django dovrebbe indovinare le modifiche corrette da apportare. C'è il rischio che i dati critici vengano persi nel processo.

puoi o

  • Emettere un manuale ALTER TABLE comando
  • DROP TABLE la tabella specifica (perderà i dati) ed eseguire nuovamente syncdb
  • correre django-admin sqlclear per ottenere una lista di istruzioni SQL per cancellare l'intero db ed eseguire quei comandi (svuoterà il db - perderete tutti i dati esistenti) o

DateField.auto_now: imposta automaticamente il campo su NOW() ogni volta che l'oggetto viene salvato. Utile per i timestamp "last-modified". Si noti che la data corrente viene sempre utilizzata; non è solo un valore predefinito che puoi escludere.

Quindi, il modified_date la colonna verrà automaticamente aggiornata ogni volta che si chiama object.save()


3 per risposta № 2

Questo è un problema comune con Django. Come detto da Amarghosh, syncdb non può modificare lo schema delle tabelle esistenti.

Sud è stato creato per risolvere questo problema.

Lo raccomando.