【发布时间】:2017-12-17 12:37:27
【问题描述】:
上下文:
我有一个有两个日期的模型,我想对它们都使用factory.Faker,但第二个日期应该总是大于第一个日期。
我试过了:
模型摘录:
class Event(models.Model):
execution_start_date = models.DateTimeField()
execution_end_date = models.DateTimeField()
工厂:
class EventFactory(factory.DjangoModelFactory):
class Meta:
model = Event
strategy = factory.BUILD_STRATEGY
execution_start_date = factory.Faker('date_time_this_year', tzinfo=pytz.utc)
@factory.lazy_attribute
def execution_end_date(self):
return factory.Faker('date_time_between_dates',
datetime_start=self.execution_start_date,
datetime_end=now(),
tzinfo=pytz.utc)
但是当我尝试从 python shell 中使用工厂时,我得到了这个:
In [3]: e = EventFactory()
In [4]: e.execution_end_date
Out[4]: <factory.faker.Faker at 0x1103f51d0>
我设法使它工作的唯一方法是这样:
@factory.lazy_attribute
def execution_end_date(self):
# return factory.Faker('date_time_between_dates',
# datetime_start=self.execution_start_date,
# datetime_end=now(),
# tzinfo=pytz.utc)
faker = factory.Faker._get_faker()
return faker.date_time_between_dates(datetime_start=self.execution_start_date,
datetime_end=now(),
tzinfo=pytz.utc)
但老实说,我认为有更好的方法。
我的依赖是:
- Django (1.8.18)
- 工厂男孩 (2.8.1)
- Faker (0.7.17)
【问题讨论】:
标签: python django django-models faker factory-boy