ISO 8601字段到Python DateTime字段

时间:2016-08-09 03:27:46

标签: python django api datetime

我从API获取一个DateTimeField,格式为" 2016-08-09T02:16:15Z"。我使用下面的代码来解析它并将其转换为我认为是日期时间字段,但我从我的一个类方法中得到一个错误来比较时间。请参阅下面的解析代码:

time= dateutil.parser.parse(x['MatchTime']) #MatchTime is the ISO 8601 field

时间似乎正在拉动,但是当我将其添加到我的游戏模型中,粘贴在下面时, my is_live 方法会给我一个错误

游戏模型:

class Game(models.Model):
    time = models.DateTimeField(null=True, blank=True)
    livePick = models.BooleanField(default=True)

    def is_live(self):
        now = timezone.now()
        now.astimezone(timezone.utc).replace(tzinfo=None)
        if now < self.time:
            return True
        else:
            return False

当我运行脚本以及时间

添加游戏时,这是我得到的错误
line 34, in is_live
if now < self.time:
TypeError: unorderable types: datetime.datetime() < NoneType()

更新: 使用以下

将时间添加到游戏模型中
g = Game.objects.create(team1=team1, team2=team2)
g.time = time 
g.save()

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为模型中的time可以为空,而对于失败的模型实例,None为空(datetime)。当您尝试将其与if self.time is not None and now < self.time: return True else: return False 对象进行比较时,这会引发异常。

您需要在逻辑中考虑零可能性,例如:

{{1}}