代码之家  ›  专栏  ›  技术社区  ›  crimsonpython24

Python Django:AttributeError:'int'对象没有属性'timetuple'

  •  0
  • crimsonpython24  · 技术社区  · 5 年前

    快速提示:此错误可能与 this thread ,但是用例和python版本(另一个版本仍然是v2)是不同的。其他类似的线程并不专门考虑python datetime .

    我有以下代码:

    import datetime
    from .models import RaceData, RacerData
    
    @periodic_task(crontab(minute='*/15'))
    def record_racedata():
        team = nitrotype.Team('PR2W')
        timestamp = datetime.datetime.now()  # timestamp 
        
        for members in team.data["members"]:
            rcd = RaceData(
                timestamp=timestamp,
            )
            rcd.save()
    
    @periodic_task(crontab(minute='*/15'))
    def record_racerdata():
        timestamp = datetime.datetime.now()  # timestamp 
        
        for members in team.data["members"]:
            rcrd = RacerData(
                timestamp=timestamp,
            )
            rcrd.save()  # error comes from here
    

    模型:

    class RaceData(models.Model):
        id = models.BigAutoField(primary_key=True)
        timestamp = UnixDateTimeField()
    
    class RacerData(models.Model):
        id = models.BigAutoField(primary_key=True)
        timestamp = UnixDateTimeField()
    

    我得到以下输出:

    AttributeError: 'int' object has no attribute 'timetuple'
    

    最让我困惑的是,第一次列入 timestamp 不会出现错误,但执行过程可能不会自上而下。

    不管怎样,我相信我已经初始化了 适当地改变。谁能帮忙吗? 请注意,我无法定义 时间戳 在这两个函数之外,因为我需要使用周期性调用的函数不断更新时间戳。

    编辑 我在其他地方看到,由于名称空间 约会时间 在代码的其他地方使用了,但在我的问题中不是这样。

    提前谢谢。

    0 回复  |  直到 5 年前
        1
  •  0
  •   crimsonpython24    5 年前

    这似乎是我使用的依赖性的一个问题( UnixDateTimeField )当抛出的错误指向虚拟环境中的包时。

    我求助于将时间存储在整数字段中:

    import datetime
    from .models import RaceData, RacerData
    
    @periodic_task(crontab(minute='*/15'))
    def record_racedata():
        team = nitrotype.Team('PR2W')
        timestamp = datetime.now().timestamp() # converts datetime into unix
        
        for members in team.data["members"]:
            rcd = RaceData(
                timestamp=timestamp,
            )
            rcd.save()
    
    @periodic_task(crontab(minute='*/15'))
    def record_racerdata():
        timestamp = datetime.now().timestamp()
        
        for members in team.data["members"]:
            rcrd = RacerData(
                timestamp=timestamp,
            )
            rcrd.save()  # error comes from here
    

    模型:

    class RaceData(models.Model):
        id = models.BigAutoField(primary_key=True)
        timestamp = IntegerField()
    
    class RacerData(models.Model):
        id = models.BigAutoField(primary_key=True)
        timestamp = IntegerField()
    

    任何解决方案都是受欢迎的,但在浏览了其他几个问题之后,我找到了一个解决方案,将UNIX时间戳存储为整数是最简单的。始终可以将整数转换回 datetime 如上所述 here ,假设初始UNIX时间戳已验证。

    不过,感谢所有试图回答这个问题的人。

    推荐文章