python - 如何将 factory.LazyAttribute 与 Faker() 函数一起使用

标签 python django faker factory-boy

我正在使用 factory_boy在 Django 中构建一些固定装置。

我想使用 factory.LazyAttribute 根据另一个属性的条件构建一个属性。

class MyFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = MyModel

    title = 'My Title' if random() < 0.5 else None
    description = factory.LazyAttribute(
        lambda a: factory.Faker(
            'paragraph', nb_sentences=1, variable_nb_sentences=False
        ) if a.title else None)

但是,这会返回 string正在 <factory.faker.Faker object at 0x000001B10597BB20>而不是执行正确的段落生成。

我哪里错了?

最佳答案

factory.Faker是一个特殊的对象:当工厂实例化一个对象时,它会询问 factory.Faker代理从faker获取随机值。

实现您所寻找的最简单的方法是使用 factory.Maybe :

class MyFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = MyModel

    title = factory.fuzzy.FuzzyChoice(["My Title", None])
    description = factory.Maybe('title', factory.Faker('paragraph'))

请注意,在您共享的代码中,title = "My title" if random() < 0.5 else None当 Python 解析文件时,只计算一次。我用过 factory.fuzzy.FuzzyChoice 为每个对象执行随机计算。此函数还使用 factory_boy's randomness management features .

另一种选择是使用 parameters ( class Params ) :

class MyFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = MyModel

    class Params:
        # Items here will be available to further declarations, but won't be
        # passed to the model constructor.
        description_contents = factory.Faker('paragraph')

    title = factory.fuzzy.FuzzyChoice(["My Title", None])
    description = factory.LazyAttribute(lambda a: a.description_contents if a.title else None)

关于python - 如何将 factory.LazyAttribute 与 Faker() 函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62756086/

相关文章:

Python - 单个for循环,计算以下每行的最大、最小和平均单词数以进行分析

python - Cython 中 complex.real 和 creal(complex) 的区别

python - Flask-SQLAlchemy 缺少 "caching_sha2_password"身份验证模块

mysql - 在 Django 中使用 AUTO_INCREMENT 触发器保存模型错误

php - 如何在 Faker 中获取 future 日期

ruby-on-rails - 如何生成假书名?

python - 随机挑选具有给定概率的项目

python - 如何在 Django 中对模型进行两次过滤?

python - 如何对 Django 管理内联表单进行单元测试

php - 在 Laravel 中使用 PHP Faker 在使用工厂播种数据库时生成 "unique with"条目