13

DateTimeField received a naive datetime while time zone support is active遇到了一个扭曲的经典警告。当我运行使用由factory_boy. 这是一个工厂的例子:

from django.utils.timezone import now
import factory
class PostFactory(factory.DjangoModelFactory):
    FACTORY_FOR = models.Post
    value = 42
    created = now()

如您所见,我正在使用来自 Django 时区的 now() 方法,它应该处理整个简单的 datetime 事情,但事实并非如此。这是模型的样子:

class Post(models.Model)
    value = models.IntegerField()
    created = models.DateTimeField(auto_now_add=True)

另外,在我的 settings.py 文件中,我设置了USE_TZ = True.

我已经尝试安装pytz和使用它的库来创建一个日期时间对象来填充工厂中的字段,但这也不起作用。

我知道我可以抑制警告,但它已经开始在代码的其他区域咬我,我想深入了解它。. .

4

2 回答 2

17

您可以按如下方式使用faker:

import factory
from django.utils import timezone


class PostFactory(factory.DjangoModelFactory):
    FACTORY_FOR = models.Post
    value = 42
    created = factory.Faker("date_time", tzinfo=timezone.get_current_timezone())
于 2019-04-12T14:17:10.877 回答
0

你也需要换timezonesettings.py

When USE_TZis False,这是 Django 将存储所有日期时间的时区。When USE_TZis True,这是 Django 用于在模板中显示日期时间并解释在表单中输入的日期时间的默认时区。

于 2013-12-11T04:42:20.800 回答