Sto migrando un'applicazione da django 1.2 a 1.4.
Ho un oggetto attività quotidiana che contiene un'ora del giorno in cui l'attività dovrebbe essere completata:
class DailyTask(models.Model):
time = models.TimeField()
last_completed = models.DateTimeField()
name = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
weekends = models.BooleanField()
def __unicode__(self):
return '%s' % (self.name)
class Meta:
db_table = u'dailytask'
ordering = ['name']
Per verificare se un'attività deve ancora essere completata oggi, ho il seguente codice:
def getDueDailyTasks():
dueDailyTasks=[]
now = datetime.datetime.now()
try:
dailyTasks = DailyTask.objects.all()
except dailyTask.DoesNotExist:
return None
for dailyTask in dailyTasks:
timeDue = datetime.datetime(now.year,now.month,now.day,dailyTask.time.hour,dailyTask.time.minute,dailyTask.time.second)
if timeDue<now and timeDue>dailyTask.last_completed:
if dailyTask.weekends==False and now.weekday()>4:
pass
else:
dueDailyTasks.append({'id':dailyTask.id,
'due':timeDue,
'name': dailyTask.name,
'description':dailyTask.description})
return dueDailyTasks
Questo ha funzionato bene sotto 1.2, ma sotto 1.4 ottengo l'errore:
can't compare offset-naive and offset-aware datetimes
a causa della linea
if timeDue<now and timeDue>dailyTask.last_completed
ed entrambe le clausole di confronto generano questo errore.
Ho provato a rendere consapevole del fuso orario timeDue aggiungendo pytz.UTC come argomento, ma questo solleva ancora lo stesso errore.
Ho letto alcuni documenti sui fusi orari, ma sono confuso se devo solo rendere consapevole del fuso orario timeDue o se devo apportare una modifica fondamentale al mio database e ai dati esistenti.