Bir uygulamayı django 1.2'den 1.4'e taşıma sürecindeyim.
Görevin tamamlanması gereken günün bir saatini içeren günlük bir görev nesnem var:
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']
Bugün hala bir görevin tamamlanması gerekip gerekmediğini kontrol etmek için aşağıdaki koda sahibim:
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
Bu, 1.2'nin altında iyi çalıştı, ancak 1.4'ün altında hatayı alıyorum:
can't compare offset-naive and offset-aware datetimes
hat nedeniyle
if timeDue<now and timeDue>dailyTask.last_completed
ve her iki karşılaştırma cümlesi de bu hatayı atar.
Pytz.UTC'yi argüman olarak ekleyerek timeDue saat diliminin farkına varmaya çalıştım, ancak bu yine de aynı hatayı ortaya çıkarıyor.
Saat dilimleriyle ilgili bazı dokümanları okudum, ancak sadece timeDue saat diliminden haberdar olmam gerekip gerekmediği veya db ve mevcut verilerimde temel bir değişiklik yapmam gerekip gerekmediği konusunda kafam karıştı.