pytest/mixer Django - 夹具从另一个模型继承时忽略字段值
pytest/mixer Django - fixture ignores field value when it's inherited from another model
我所有的模型,包括 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
字段中的 old_dummy_report
时,我总是得到测试 运行 时的日期。
除了在测试函数本身中将日期重新设置为 old_date
之外,我该如何纠正这个问题(这似乎是非 pythonic 的)。
找到解决方案。我想这与 auto_now_add=True
参数有关。
我已经将 pytest fixture 函数更改为:
@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
。
我所有的模型,包括 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
字段中的 old_dummy_report
时,我总是得到测试 运行 时的日期。
除了在测试函数本身中将日期重新设置为 old_date
之外,我该如何纠正这个问题(这似乎是非 pythonic 的)。
找到解决方案。我想这与 auto_now_add=True
参数有关。
我已经将 pytest fixture 函数更改为:
@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
。