在Factory Boy中,如何连接Faker创建的字符串?

2024-03-16

我想用工厂男孩 http://factoryboy.readthedocs.io/en/latest/index.html and 它的支持 http://factoryboy.readthedocs.io/en/latest/#realistic-random-values for Faker http://faker.readthedocs.io/en/master/index.html从多个提供商生成字符串。例如结合prefix and name:

# models.py
from django.db import models

class Person(models.Model):
    full_name = models.CharField(max_length=255, blank=False, null=False)


# factories.py
import factory

class PersonFactory(factory.Factory):
    class Meta:
        model = models.Person

    full_name = '{} {}'.format(factory.Faker('prefix'), factory.Faker('name'))

但这似乎不起作用。例如。:

>>> person = PersonFactory()
>>> person.full_name
'<factory.faker.Faker object at 0x7f25f4b09e10> <factory.faker.Faker object at 0x7f25f4ab74d0>'

我缺少什么?


您可以使用(基本上没有记录)exclude使您的第一种方法发挥作用的属性:

class PersonFactory(factory.Factory):
    class Meta:
        model = Person
        exclude = ('prefix', 'name')

    # Excluded
    prefix = factory.Faker('prefix')
    name = factory.Faker('name')

    # Shows up
    full_name = factory.LazyAttribute(lambda p: '{} {}'.format(p.prefix, p.name))

你也可以只使用factory.LazyAttribute并直接使用一次性生成所有内容faker:

from faker import Faker

fake = Faker()

class PersonFactory(factory.Factory):
    class Meta:
        model = Person

    # Shows up
    full_name = factory.LazyAttribute(lambda p: '{} {}'.format(fake.prefix(), fake.name()))

这种方法的缺点是您无法轻松访问此人的前缀或姓名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Factory Boy中,如何连接Faker创建的字符串? 的相关文章

随机推荐