Così qualche tempo un paio di migrazioni dopo il mio primo, ho deciso che volevo includere questi campi:Migrazioni di Django 1.8. Aggiunta di DateTimeField dopo la creazione di db. Migliori pratiche?
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
in uno dei miei modelli. Quando ho makemigrations
che mi ha dato You are trying to add a non-nullable field 'created' to episode without a default; we can't do that (the database needs something to populate existing rows).
Così ho poi cambiato in
created = models.DateTimeField(auto_now_add=True, default=datetime.now)
Dopo aver cercato di makemigrations
ancora una volta, ha detto che at_api.Episode.modified: (fields.E160) The options auto_now, auto_now_add, and default are mutually exclusive. Only one of these options may be present.
Va bene, quindi ho solo andato avanti e ha rimosso il auto_now_add
created = models.DateTimeField(default=datetime.now)
ora potevo makemigrations
senza alcun problema. E in seguito ho rimosso default=datetime.now
e lo ho sostituito con auto_now_add=True
e ho eseguito di nuovo la migrazione senza problemi. Tuttavia, non posso fare a meno di pensare che questo potrebbe non essere il modo migliore di fare le cose. Sento che qualcosa potrebbe andare storto in seguito nel progetto.
Sì, Django mi ha chiesto un valore unico per le righe esistenti. Ho provato 'datetime.now' ma non sembrava funzionare. Ma suppongo che tutto sia nel complesso ok, allora? È tipico impostare 'null = True' come un" segnaposto "per i valori di riga esistenti e quindi rimuoverlo in seguito per sostituirlo con qualcos'altro? – pyramidface
'datetime.now()' avrebbe funzionato (nota le parentesi - si desidera * chiamare * la funzione e usare il suo valore di ritorno). Aggiungere e rimuovere 'null = True' nei casi più complicati in cui si desidera assegnare un valore diverso a righe diverse. Ad esempio, supponiamo che tu abbia memorizzato la data di creazione effettiva in un file. Scriveresti una migrazione dei dati che, per ogni riga, cercava la data nel file e poi la inserisce nel database. Successivamente, è possibile rimuovere 'null = True' e migrare di nuovo. –
Ahh okay, lo terrò a mente per i progetti futuri. Grazie!! – pyramidface