我的所有模型,包括Report
都继承自BaseModel
:
class Report(BaseModel):
...
class BaseModel(models.Model):
created_date = models.DateTimeField(auto_now_add=True, db_index=True)
modified_date = models.DateTimeField(auto_now=True, db_index=True)
class Meta:
abstract = True
我正在尝试测试计划的任务,该任务将删除旧的Report
对象。
以下是灯具:
@pytest.fixture(scope="function")
def old_dummy_report(request, db):
### set the date to far back
old_date = datetime.datetime.now() - datetime.timedelta(days=900)
return mixer.blend("core.report", , created_date=old_date, ios_report={'1': 1}, android_report={'1': 1})
但是,当我运行测试并检查created_date
的{{1}}字段时,我总是得到运行测试时的日期。
除了在测试函数本身中将日期重新设置为old_dummy_report
(似乎是非Python的)之外,我该如何纠正这一点。
答案 0 :(得分:0)
找到了解决方案。我想这与auto_now_add=True
参数有关。
我已将pytest固定装置功能更改为此:
@pytest.fixture(scope="function")
def old_dummy_report(request, db):
old_date = datetime.datetime.now() - datetime.timedelta(days=900)
obj = mixer.blend("core.report", ios_report={'1': 1}, android_report={'1': 3}, created_date=old_date)
obj.created_date = old_date
obj.save()
return obj
因此,首先创建对象并让Django auto_now_add
,然后手动更改created_date
。