2014-12-15 14 views
14

cerca di impostare un timestamp per una scadenza chiave nel modello di Django e urtato in questo problema:Django default = timezone.now + delta

mio codice corrente:

key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1)) 

Il codice di cui sopra funziona, tuttavia, quando viene utilizzato "timezone.now()", ottiene il modulo data/ora al momento del riavvio di Apache, quindi questo non funziona. Ho fatto delle ricerche e ho trovato la soluzione per quella parte del problema, quindi sostituendo "timezone.now()" con "timezone.now", sto ottenendo il timestamp corrente ogni volta che viene creato l'oggetto, che è perfetto , il problema è parzialmente risolto.

Ho problemi a modificare la data utilizzando "timezone.timedelta (days = 1)".

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1)) 

errore sto ottenendo è:

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1)) 

TypeError: tipo di operando non supportato (s) per +: 'funzione' e 'datetime.timedelta'

L'obiettivo è quello di impostare la data e l'ora 24 ore prima.

Qualsiasi aiuto è molto apprezzato.

risposta

20

default prende un callable, in modo che solo bisogno di scrivere una funzione per fare quello che vuoi e poi prevedere che come argomento:

def one_day_hence(): 
    return timezone.now() + timezone.timedelta(days=1) 

class MyModel(models.Model): 
    ... 
    key_expires = models.DateTimeField(default=one_day_hence) 
+0

Grazie Kevin, il vostro aiuto è molto apprezzato! – Nerses

+0

'django.db.utils.OperationalError: (1067," Valore predefinito non valido per 'date_end' ")' – Viktor