我已将数据库中的事件的一些时间戳定义为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)
为了测试该模块,我在数据库中生成一些信息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()
我必须生成带有昨天时间戳的事件(然后模块将总结它们)。问题是您无法覆盖时间戳。时间戳是事件产生时的时间戳,文档说得很清楚。
那么,如何生成具有适当时间戳的数据来进行测试呢?我有几个想法:
- 也许在模型类之外以不同的方式生成数据库数据。在哪里以及如何?
- 以某种方式定义不同的类或更改类以在测试期间表现不同,例如
_
if testing:
timestamp = models.DateTimeField(auto_now_add=True)
else:
timestamp = models.DateTimeField(auto_now_add=False)
或者也许有一个更简单的方法来做到这一点......有什么想法吗?
处理这个问题的另一种方法是使用查询集update创建实例后,根据您的用例,这可能更有用。
As an update
调用在 SQL 级别执行,它将跳过验证、信号和自定义保存功能。它将需要辅助数据库调用,这可能会影响性能,因此应谨慎使用。
for event in EVENT_TYPES:
time = datetime.datetime.now() - datetime.timedelta(days=1)
for i in range(48):
time = time.replace(hour=i / 2)
instance = NewEvent(name=event, quantity=i).save()
NewEvent.objects.filter(pk=instance.pk).update(timestamp=time)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)