У меня есть следующая модель:
class Assignment(models.Model):
extra_days = models.IntegerField(default=0)
due_date = models.DateTimeField()
Где due_date
- дата присвоения, а extra_days
- количество дополнительных дней, указанных после даты окончания, для завершения задания.
Я хочу создать запрос, который возвращает все строки, где due_date + extra_days
больше текущей. Вот что я делаю:
from django.utils import timezone
from django.db.models import F
from datetime import datetime
cur_date = timezone.make_aware(datetime.now(), timezone.get_default_timezone())
a = Assignment.objects.filter(extra_days__gt=cur_date - F('due_date'))
Когда я печатаю a
, я получаю следующую ошибку:
File "c:\Python27\lib\site-packages\MySQLdb\cursors.py", line 204, in execute
if not self._defer_warnings: self._warning_check()
File "c:\Python27\lib\site-packages\MySQLdb\cursors.py", line 117, in _warning
_check
warn(w[-1], self.Warning, 3)
Warning: Truncated incorrect DOUBLE value: '2013-09-01 02:54:31'
Если я делаю разницу во времени, которая составляет, скажем, 3,1 дня, я предполагаю, что разница в днях будет равна 3. Я думаю, что было бы правильнее сделать что-то вроде этого:
a = Assignment.objects.filter(due_date__gt=cur_date - timedelta(days=F('extra_days')))
Но это также приводит к ошибке.
Как я могу это сделать без написания необработанного SQL-запроса?