类似于有关 Laravel 的问题我希望创建一个开始日期早于结束日期的 FactoryBoy 实例,如下所示:
from dataclasses import dataclass
from datetime import date
import factory
@dataclass
class DateRange:
start: date
end: date
class DateRangeFactory(factory.Factory):
class Meta:
model = DateRange
start = factory.Faker("date")
end = factory.Faker("date_between_dates", date_start=factory.SelfAttribute("..start"))
print(DateRangeFactory())
这给出了一个难以理解的错误:
faker.providers.date_time.ParseError: Can't parse date string `1984-11-11`
在我看来,
1984-11-11
应该是一个完全可以接受的日期。我做错了什么?
这可能与以下事实有关:
factory.Faker("date")
返回日期字符串而不是日期对象。
一个简单的解决方法是使用不带参数的
date_between
,这将为您提供一个真实的日期,设置为合理的日期(过去的日期,但不到 30 年前。)
这可以用在结束日期中,而不依赖于字符串解析:
class DateRangeFactory(factory.Factory):
class Meta:
model = dict
start = factory.Faker("date_between")
end = factory.Faker("date_between", start_date=factory.SelfAttribute("..start"))