pytest/mixer Django - прибор игнорирует значение поля, если оно унаследовано от другой модели

Все мои модели, в том числе 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 в самой тестовой функции (которая кажется непифонической).

1 ответ

Решение

Нашел решение. Я думаю, это связано с 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 вручную.

Другие вопросы по тегам