Python 冷冻枪不适用于django orm create_at字段

Python 冷冻枪不适用于django orm create_at字段,python,python-2.7,django-orm,freezegun,Python,Python 2.7,Django Orm,Freezegun,我正在尝试使用冷冻枪进行单元测试: class Customer(models.Model): created_at = models.DateTimeField(default=datetime.now, null=True) from freezegun import freeze_time with freeze_time(datetime(2020, 9, 9, 9), tz_offset=9): customer =

我正在尝试使用冷冻枪进行单元测试:

    class Customer(models.Model):
        created_at = models.DateTimeField(default=datetime.now, null=True)


    from freezegun import freeze_time

    with freeze_time(datetime(2020, 9, 9, 9), tz_offset=9):
            customer = Customer.objects.create()
            print 'created at', customer.created_at

    # prints: created at 2020-11-27 19:54:11.994688
因此,出于某种原因,冻结时间似乎对django orm不起作用。 我无法在我尝试测试的函数中执行
Customer.objects.create(created_at=…)

如何使用冷冻枪正确设置创建的_


非常感谢。

问题是您直接传递函数,因此当
冷冻枪
覆盖
日期时间时。现在
属性对旧函数的引用没有影响

另一种方法是创建一个自定义函数,每次在该函数中检索属性:

def current_time():
    return datetime.now()

class Customer(models.Model):
        created_at = models.DateTimeField(default=current_time, null=True)

这也会将字段设置为默认情况下,它不会显示在
模型表单中

噢,哇,我在这个问题上花了这么长时间。。非常感谢你!(刚才给你买了一杯咖啡;D)谢谢你,威廉!
class Customer(models.Model):
        created_at = models.DateTimeField(auto_now_add=True, null=True)