Jestem w trakcie migracji aplikacji z django 1.2 do 1.4.
Mam obiekt zadania dziennego zawierający porę dnia, w którym zadanie powinno zostać ukończone:
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']
Aby sprawdzić, czy zadanie nadal wymaga wykonania dzisiaj, mam następujący kod:
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
To działało dobrze pod 1.2, ale pod 1.4 dostaję błąd:
can't compare offset-naive and offset-aware datetimes
ze względu na linię
if timeDue<now and timeDue>dailyTask.last_completed
i obie klauzule porównania zgłaszają ten błąd.
Próbowałem uświadomić strefę czasową timeDue, dodając pytz.UTC jako argument, ale nadal powoduje to ten sam błąd.
Przeczytałem niektóre dokumenty dotyczące stref czasowych, ale nie wiem, czy muszę po prostu uświadomić strefę czasową timeDue, czy też muszę dokonać fundamentalnej zmiany w mojej bazie danych i istniejących danych.