Je suis en train de faire migrer une application de django 1.2 à 1.4.
J'ai un objet de tâche quotidienne qui contient une heure de la journée à laquelle la tâche doit être effectuée :
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']
Afin de vérifier si une tâche doit encore être effectuée aujourd'hui, j'ai le code suivant :
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
Cela a bien fonctionné sous la version 1.2, mais sous la version 1.4, j'obtiens l'erreur suivante :
can't compare offset-naive and offset-aware datetimes
en raison de la ligne
if timeDue<now and timeDue>dailyTask.last_completed
et les deux clauses de comparaison provoquent cette erreur.
J'ai essayé de rendre timeDue conscient du fuseau horaire en ajoutant pytz.UTC comme argument, mais cela soulève toujours la même erreur.
J'ai lu une partie de la documentation sur les fuseaux horaires, mais je ne sais pas si je dois simplement faire en sorte que timeDue tienne compte des fuseaux horaires, ou si je dois apporter un changement fondamental à ma base de données et aux données existantes.
Aide appréciée !