使用 SelfAttribute 和 Faker 的开始日期早于结束日期的 Factory Boy 实例

问题描述 投票:0回答:1

类似于有关 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
应该是一个完全可以接受的日期。我做错了什么?

python faker factory-boy
1个回答
0
投票

这可能与以下事实有关:

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"))
© www.soinside.com 2019 - 2024. All rights reserved.