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

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

快速说明:此错误可能与 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 怎么没有出现错误,但也许执行不是从上到下。

无论如何,我相信我已经适当地初始化了 timestamp 变量。有人可以帮忙吗? 请注意,我不能在任何一个函数之外定义 timestamp,因为我需要时间戳随着定期调用的函数不断更新。

EDIT 我在别处看到这个错误是因为在代码的别处使用了命名空间 datetime ,但我的问题不是这样。

提前致谢。

这似乎是我使用的依赖项 (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()

仍然欢迎任何解决方案,但在浏览了其他几个关于 SO 的问题后,我得出的解决方案是将 UNIX 时间戳存储为整数是最简单的解决方案。假设初始 UNIX 时间戳已验证,您始终可以按照 here 所述将整数转换回 datetime

仍然感谢所有试图回答问题的人。