我已经为数据库中的事件定义了一些时间戳auto_now_add,因为信息应该与事件存储时的时间戳一起存储.
事件的描述是这样的
class NewEvent(models.Model):
'''
Individual event
'''
name = models.CharField(max_length=100)
quantity = models.FloatField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
为了测试模块,我在test.py文件中的数据库中生成一些信息,这样:
for event in EVENT_TYPES:
time = datetime.datetime.now() - datetime.timedelta(days=1)
for i in range(48):
time = time.replace(hour=i / 2)
NewEvent(name=event,
timestamp=time,
quantity=i).save()
Run Code Online (Sandbox Code Playgroud)
我必须生成具有昨天时间戳的事件(模块将汇总它们).问题是您无法覆盖时间戳.时间戳是它生成事件时的时间戳,文档非常清楚地说明了这一点.
那么,如何使用合适的时间戳生成测试数据呢?我有几个想法:
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
Run Code Online (Sandbox Code Playgroud)
或者也许有更简单的方法来做到这一点......任何想法?
我有一个测试,我创建了几个对象:
def test_get_courier_task_returns_couriers_tasks(self):
with patch('django.utils.timezone.now', return_value=make_aware(datetime(2018, 1, 24, 11, 57))):
task1 = TaskFactory()
response = json.loads(MyAPI.get_tasks_list(self.user.username))
print('[*] Response timestamp: {}'.format(response['content'][0]['timestamp']))
Run Code Online (Sandbox Code Playgroud)
设置为 True的Taskhascreated_timestamp字段auto_add_now和上面to_json()使用的方法get_tasks_list():
class Task(models.Model):
created_timestamp = models.DateTimeField(auto_now_add=True)
def to_json(self):
to_return = {
'timestamp': self.created_timestamp.strftime('%d-%m-%Y %H:%M')
}
return to_return
Run Code Online (Sandbox Code Playgroud)
不幸的是,测试给出了这个输出:
[*] 响应时间戳:24-01-2018 10:57
我已经检查过这是时区感知,但不是给我 UTC+1,而是在保存时给我 UTC+0。我需要做什么?我USE_TZ = True在我的设置中已经应用了迁移。这个问题对我的问题没有帮助。