にFactory Boyとits supportを使用して、複数のプロバイダから文字列を生成したいとします。例えばFactory Boyでは、Fakerで作成した文字列をどのように結合するのですか?
# 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'))
しかし、これは動作していないよう:prefix
とname
を組み合わせます。例:
>>> person = PersonFactory()
>>> person.full_name
'<factory.faker.Faker object at 0x7f25f4b09e10> <factory.faker.Faker object at 0x7f25f4ab74d0>'
何が欠けていますか?直接faker
を使用して
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
を使用することができますし、一度にすべてを生成します:
'models.Person'クラスのフィールドは何ですか?これは関連情報です。 – wim
OK、それが助けになるかどうかはわかりませんでしたが、今追加しました。 –
@PhilGyford:[this](https://factoryboy.readthedocs.io/en/latest/index.html#lazy-attributes)は機能しますか?あなたのモデルに存在しない 'prefix'と' name'クラス属性を作成し、それらを組み合わせて 'full_name'を作成する必要があります。元の 'Person'モデルにはこれらのフィールドがないので、これがエラーを引き起こすかどうかはわかりません。 – Blender