Использование Factory Boy SelfAttribute +lativedelta - PullRequest
0 голосов
/ 16 января 2020

Я использую 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'

Так что, очевидно, это не так, как это делается. Но как мне это сделать?

1 Ответ

1 голос
/ 16 января 2020

Ответ 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)
    )
...