0

快速说明:这个错误可能与这个线程有一些联系,但是用例和 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在任何一个函数之外定义,因为我需要使用定期调用的函数不断更新时间戳。

编辑我在其他地方看到这个错误发生是因为datetime在代码的其他地方使用了命名空间,但在我的问题中情况并非如此。

提前致谢。

4

1 回答 1

0

这似乎是我使用的依赖项的问题 ( 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 时间戳得到验证,您始终可以将整数转换回此处datetime所述。

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

于 2021-06-12T01:35:10.850 回答