Необходимо переопределить django auto_now_add в фабрике pytest
Из-за auto_now_add в моделях django sent_at не работает в pytest factory. Необходимо перепрошить sent_at для pytest factory
class ABC(models.Model):
x = models.ForeignKey(X, on_delete=models.CASCADE, related_name="xx")
y = models.ForeignKey(Y, on_delete=models.CASCADE, related_name="yy")
sent_at = models.DateTimeField(auto_now_add=True)
class ABCFactory(factory.django.DjangoModelFactory):
x = factory.SubFactory(XFactory)
y = factory.SubFactory(YFactory)
sent_at = timezone.now() - timezone.timedelta(seconds=40)
Возможно, проверьте это решение, опубликованное на github factory_boy: https://github.com/FactoryBoy/factory_boy/issues/102
Короче говоря, есть 2 решения:
- Удалите
auto_now_add
в поле вашей модели и вместо него используйтеdefault=timezone.now
. Это будет довольно похоже, за исключением того, что поле не будет доступно только для чтения в админке. Но теперь вы можете легко переопределить/обновить его .
- Переопределите метод
_create
так, чтобы он устанавливал поле, и пересохраните экземпляр после того, как он был первоначально создан .