Как сгенерировать объект aware time в Faker?

У меня есть следующая (упрощенная) модель и завод:

models.py

class Event():
    duration = FloatField()
    start_time = TimeField()
    finish_time = DateTimeField()

    def save(self, *args, **kwargs):
        self.finish_time = self.start_time + timedelta(hours=self.duration)

event_factory.py

from factory import Faker

class EventFactory:
    date = Faker(
        "date_time_this_month",
        before_now=False,
        after_now=True,
        tzinfo=timezone.get_current_timezone(),
        )
    start_time = Faker("time_object")
    duration = Faker("random_int")

Однако, мой метод save поднимает Warning: DateTimeField Event.finish_time received a naive datetime (2022-03-28 12:43:38) while time zone support is active.

date известно благодаря аргументу tzinfo, но start_time наивно (я проверил с помощью timezone.is_aware() от django), потому что провайдеры времени в Faker, похоже, не допускают никаких параметров временных зон.

Есть предложение по получению поддельного объекта осознания времени в factory-boy/Faker?

Попробуйте использовать объекты FuzzyDateTime, они возвращают объект с учетом часового пояса: https://factoryboy.readthedocs.io/en/stable/fuzzy.html?highlight=timezone

Вернуться на верх