Получение id фабрики FactoryBoy с помощью LazyAttribute при использовании DjangoModelFactory

У меня есть следующая фабрика, и я хочу получить доступ к id экземпляра, который будет создан из нее:

class PlatformFactory(factory.django.DjangoModelFactory):
    type = factory.fuzzy.FuzzyChoice(Platform.Type)
    name = factory.fuzzy.FuzzyText(length=30)
    user = factory.SubFactory(UserFactory)
    ext = factory.LazyAttribute(lambda self: f"{self.user.key}|{self.id}")

    class Meta:
        model = Platform
        exclude = ["user", ]

К сожалению, это дает мне ошибку AttributeError: The parameter 'id' is unknown. Evaluated attributes are {'type': <Type.OTHER: 2>, 'name': ...

Но поскольку это модель django, в ней присутствует id. Почему это не распознается factory boy и как я могу это решить?

Спасибо и пожелания Matt

Основываясь на документации по LazyAttribute, метод принимает создаваемый объект, который, как я думаю, еще не создан/сохранен, поэтому и нет id. (Поправьте меня, если я ошибаюсь)

В любом случае, вы должны быть в состоянии достичь желаемого, используя PostGeneration

class PlatformFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Platform
        exclude = ["user", ]

    @factory.post_generation
    def set_ext(obj, create, extracted, **kwargs):
        if not create:
            return
        obj.ext = f"{obj.user.key}|{obj.id}"
        obj.save()
Вернуться на верх