使用 Factory Boy SelfAttribute + relativedelta
Using Factory Boy SelfAttribute + relativedelta
我在测试中使用 Factory Boy 并希望实现以下目标:
- 使
first_period_end_date
依赖于 first_period_date
并增加 12 个月。
我正在尝试将 SelfAttribute
与 relativedelta
结合使用,但我目前的应用方式不起作用。我的代码:
import datetime
import factory
from dateutil import relativedelta
from somewhere.models import Contract
class ContractFactory(factory.django.DjangoModelFactory):
class Meta:
model = Contract
start_date = factory.LazyFunction(datetime.date.today)
first_period_date = factory.SelfAttribute('start_date')
first_period_end_date = (
factory.SelfAttribute('first_period_date')
+ relativedelta.relativedelta(months=12)
)
但在运行时出现以下错误:
TypeError: unsupported operand type(s) for +: 'SelfAttribute' and 'relativedelta'
所以这显然不是它的完成方式。但是我该怎么做呢?
答案是LazyAttribute
; SelfAttribute
仅对复制字段有帮助。
你应该这样做:
class ContractFactory(factory.django.DjangoModelFactory):
class Meta:
model = Contract
start_date = factory.LazyFunction(datetime.date.today)
first_period_date = factory.SelfAttribute('start_date')
first_period_end_date = factory.LazyAttribute(
lambda self: self.first_period_date + relativedelta.relativedelta(months=12)
)
我在测试中使用 Factory Boy 并希望实现以下目标:
- 使
first_period_end_date
依赖于first_period_date
并增加 12 个月。
我正在尝试将 SelfAttribute
与 relativedelta
结合使用,但我目前的应用方式不起作用。我的代码:
import datetime
import factory
from dateutil import relativedelta
from somewhere.models import Contract
class ContractFactory(factory.django.DjangoModelFactory):
class Meta:
model = Contract
start_date = factory.LazyFunction(datetime.date.today)
first_period_date = factory.SelfAttribute('start_date')
first_period_end_date = (
factory.SelfAttribute('first_period_date')
+ relativedelta.relativedelta(months=12)
)
但在运行时出现以下错误:
TypeError: unsupported operand type(s) for +: 'SelfAttribute' and 'relativedelta'
所以这显然不是它的完成方式。但是我该怎么做呢?
答案是LazyAttribute
; SelfAttribute
仅对复制字段有帮助。
你应该这样做:
class ContractFactory(factory.django.DjangoModelFactory):
class Meta:
model = Contract
start_date = factory.LazyFunction(datetime.date.today)
first_period_date = factory.SelfAttribute('start_date')
first_period_end_date = factory.LazyAttribute(
lambda self: self.first_period_date + relativedelta.relativedelta(months=12)
)