Как использовать значение Faker как часть другого поля с FactoryBoy

Я использую FactoryBoy и Faker для создания некоторых моделей для модульных тестов. Генерировать данные для полей достаточно просто, но как сгенерировать строку, включающую значение, полученное от провайдера Faker?

import factory
import MyModel

class MyFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = MyModel
        # my_ip will be a temporary variable that is not returned by the factory.
        exclude = (my_ip,)

    my_ip = factory.Faker("ipv4_private")
    my_string = f"String with IP address [{my_ip}]"

Затем с помощью MyFactory создаются объекты с my_string, установленным примерно так:

String with IP address [<factory.faker.Faker object at 0x7fc656aa6358>]

Как я могу заставить my_string содержать что-то вроде:

String with the IP address [192.168.23.112]

Как мне разрешить это значение, а не просто получить объект? Я пробовал обернуть в str() безуспешно. Нужно ли мне использовать LazyAttribute или LazyFunction или что-то из FactoryBoy?


person Daniel    schedule 29.07.2021    source источник


Ответы (1)


Путем проб и ошибок я понял, что это требует использования LazyAttribute, поэтому атрибут my_string вычисляется после создания остальной части объекта.

Однако затем я обнаружил, что это, по сути, дубликат: Как в Factory Boy соединить строки, созданные с помощью Faker?

Если кому интересно, способ сделать это:

my_string = factory.LazyAttribute(lambda o: f"String with IP address [{o.my_ip}]")
person Daniel    schedule 29.07.2021