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
вручную.