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