【发布时间】:2013-09-01 04:30:54
【问题描述】:
我有以下型号:
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 查询的情况下做到这一点?
【问题讨论】:
-
将两个日期转换为
timedelta并减去。 -
你的意思是这样的:
a = Assignment.objects.filter(extra_days__gt=timedelta(cur_date - F('due_date')).days)我得到这个错误:TypeError: unsupported type for timedelta days component: ExpressionNode -
你可以使用 django ORM。参考this
标签: django