Python 检测Django模型中的设置时间是否从日期起已过

Python 检测Django模型中的设置时间是否从日期起已过,python,django,datetime,models,Python,Django,Datetime,Models,这段代码总是给我错误。在Django模型中,我有一个名为invite_sent的字段datetime,在同一个模型中,还有一个名为check_time的字段check time是invite发送后发生特定操作的时间量。由于某种原因,我的代码无法工作 models.py class Game(models.Model): title = models.CharField(max_length=50) summery = models.CharField(max_length=500

这段代码总是给我错误。在Django模型中,我有一个名为invite_sent的字段datetime,在同一个模型中,还有一个名为check_time的字段check time是invite发送后发生特定操作的时间量。由于某种原因,我的代码无法工作

models.py

class Game(models.Model):
    title = models.CharField(max_length=50)
    summery = models.CharField(max_length=500)
    pin = models.CharField(max_length=12)
    key = models.CharField(max_length=12)
    complete = models.BooleanField()
    invite_sent = models.DateTimeField() #<-----------
    check_time = models.IntegerField() #<-----------
    on = models.ForeignKey("Member", related_name="turn", blank=True,  null=True)

您在以下行遇到问题:hours=datetime.datetime-g.invite\u sent/60/60

您应该使用datetime.datetime.now而不是datetime.datetime它是您必须调用的模块对象。now 减去两个datetime对象得到一个timedelta对象,该对象有一个方法。total_seconds使用该方法转换为小时 因此,错误代码行应该是:

hours = (datetime.datetime.now() - g.invite_sent.replace(tzinfo=None)).total_seconds() / 60 / 60

您在以下行遇到问题:hours=datetime.datetime-g.invite\u sent/60/60

您应该使用datetime.datetime.now而不是datetime.datetime它是您必须调用的模块对象。now 减去两个datetime对象得到一个timedelta对象,该对象有一个方法。total_seconds使用该方法转换为小时 因此,错误代码行应该是:

hours = (datetime.datetime.now() - g.invite_sent.replace(tzinfo=None)).total_seconds() / 60 / 60

谢谢,但现在我得到这个错误不能减去偏移量naive和偏移量感知datetimesok django它返回的偏移量感知datetimes是时区感知的,时区信息在您的情况下重要吗?请回答,以便我可以根据时区更新解决方案不重要。事实上,它实际上对程序的运行方式有害。所以不应该是时区awareI更新了我的答案。如果您不想从django获得时区感知的日期时间,那么应该在设置文件中设置USE_TZ=False清除表中的数据,然后重新开始。因为旧数据是时区感知的,所以doing.replacetzinfo=None仅禁用时区信息,不要忘记更改设置文件中的USE_TZ=False。谢谢,但现在我发现这个错误不能减去offset naive和offset aware datetimesok django它返回的offset aware datetimes是时区感知的,时区信息在您的情况下重要吗?请回答,以便我可以根据时区更新解决方案不重要。事实上,它实际上对程序的运行方式有害。所以不应该是时区awareI更新了我的答案。如果您不想从django获得时区感知的日期时间,那么应该在设置文件中设置USE_TZ=False清除表中的数据,然后重新开始。因为旧数据是时区感知的,所以doing.replacetzinfo=None仅禁用时区信息,不要忘记更改设置文件中的USE_TZ=False。