使用 Factory Boy SelfAttribute + relativedelta

Using Factory Boy SelfAttribute + relativedelta

我在测试中使用 Factory Boy 并希望实现以下目标:

我正在尝试将 SelfAttributerelativedelta 结合使用,但我目前的应用方式不起作用。我的代码:

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'

所以这显然不是它的完成方式。但是我该怎么做呢?

答案是LazyAttributeSelfAttribute 仅对复制字段有帮助。

你应该这样做:

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)
    )