I just ran into this issue myself. The problem is that models are loaded before mock has patched the timezone module, so at the time the expression default=timezone.now
is evaluated, it sets the default
kwarg to the real timezone.now
function.
The solution is the following:
class MyModel(models.Model):
timestamp = models.DateTimeField(default=lambda: timezone.now())