Передача значения черты в SubFactory Django

У меня два завода.

class DispatchDataFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = models.DispatchData

    order = factory.SelfAttribute('order_data.order')
    sku = factory.LazyAttribute(lambda obj: '%d' % obj.order_data.sku)
    category = SKUCategory.SINGLE
    quantity = 50

    class Params:
        combo_sku=False
        order_data = factory.SubFactory(OrderDataFactory, combo_sku=factory.SelfAttribute('combo_sku'))
        combo_sku = factory.Trait(
            sku=factory.LazyAttribute(lambda obj: '%d' % obj.order_data.sku),
            category=SKUCategory.COMBO,
            quantity=1
        )
class OrderDataFactory(factory.django.DjangoModelFactory):

    class Meta:
        model = models.OrderData

    order = factory.SubFactory(OrderFactory)
    category = SKUCategory.SINGLE
    quantity = 75.6
    price_per_kg = 10.5
    sku = factory.SelfAttribute('crop_data.id')

    class Params:
        crop_data = factory.SubFactory(CropFactory)
        combo_data = factory.SubFactory(ComboSkuFactory)
        combo_sku = factory.Trait(
            sku=factory.SelfAttribute('combo_data.id'),
            category=SKUCategory.COMBO,
            quantity=1,
            price_per_kg=34.56
        )

поэтому, если для combo_sku установлено значение True, оно должно быть указано в combo_sku в OrderDataFactory.

Я получаю следующую ошибку.

Циклическое ленивое определение атрибута для 'combo_sku'; цикл найден в ['category', 'combo_sku']

Есть ли другой способ передать значение черты в SubFactory.


person Arvind Kumar    schedule 26.04.2020    source источник
comment
Я пытался использовать :- order_data = factory.SubFactory(OrderDataFactory, combo_sku=factory.SelfAttribute('..combo_sku')) но это не работает для случая по умолчанию означает, что я должен передать combo_sku=True или False.   -  person Arvind Kumar    schedule 26.04.2020


Ответы (1)


Я добавил значение по умолчанию для первой фабрики, и она работает нормально.

combo_sku = False

    class Params:
        order_data = factory.SubFactory(
            OrderDataFactory, combo_sku=factory.SelfAttribute('..combo_sku'))
person Arvind Kumar    schedule 26.04.2020