2015-04-09 12 views
18

Django 1.8 ora ha qualche problema di rilevamento per i modelli, che è bello. Tuttavia, per un avvertimento che mi sta dando, capisco il problema, ma non capisco come il suggerimento che mi sta dando sia migliore."Corretto il valore predefinito fornito" dopo l'aggiornamento a Django 1.8

Questo è il mio campo (male) il modello:

my_date = DateField(default=datetime.now()) 

ed è facile capire perché questo è male. Ma questo è il suggerimento che mi sta dando:

MyMoel.my_date: (campis.W161) Valore predefinito predefinito fornito.
        SUGGERIMENTO: Sembra che per questo campo sia impostato un valore predefinito di data/ora/datetime come predefinito. Questo potrebbe non essere quello che vuoi. Se si vuole avere la data corrente come predefinito, utilizzare `django.utils.timezone.now`

Quindi, dice di usare timezone.now, ma come è che meglio di datetime.now? Sono entrambi i valori di default "fisso" ... timezone.now solo rendimenti un'istanza di datetime, che è un valore fisso ...

Ho il sospetto che si vuole in realtà mi di inserire una sorta di bandiera che dice msgstr "usa timezone.nowsuccessivamente". Ma non è quello che dice il suggerimento ... quindi cos'è quella bandiera?

risposta

48

La funzione datetime.now() viene attualmente eseguita non appena il codice viene importato, vale a dire quando si (ri) avvia il server. Tutte le istanze del modello successive avranno lo stesso valore.

Invece, è necessario passare una funzione callable a default, che viene eseguita ogni volta che un'istanza di modello richiede un valore predefinito. Il suggerimento vuole comunicare che dovresti letteralmente usare DateField(default=django.utils.timezone.now) senza le parentesi.

Il messaggio è leggermente fuorviante, ma Django non sa se è stato utilizzato datetime.now() o django.utils.timezone.now().

+0

Quindi assegnargli un messaggio chiamabile renderà felice il validatore (cioè potrei passarlo sia "datetime.now" o "timezone.now", o qualsiasi altra cosa che sia una funzione che restituisce una data)? – Troy

+0

Sì, qualcuno di loro dovrebbe rendere felice il validatore (e in definitiva, voi). – knbk

Problemi correlati