gpt4 book ai didi

Django与F对象的时差

转载 作者:行者123 更新时间:2023-12-03 20:51:27 24 4
gpt4 key购买 nike

我有以下模型:

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 查询的情况下执行此操作?

最佳答案

似乎我正在尝试做的事情是不可能的。我最终编写了一个原始查询:

cursor.execute("SELECT * FROM app_assignment WHERE DATE_ADD(due_date, INTERVAL extra_days DAYS) > utc_timestamp()")

我对无法使用 ORM 做一些看似简单的事情感到非常反感,以至于我考虑尝试使用 SQLAlchemy,但原始查询工作正常。我总是尝试解决方法来确保我可以使用 ORM,但我将使用原始 SQL 进行复杂查询。

关于Django与F对象的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com