我正在尝试使用factory_boyFaker中的DjangoModelFactory设置UserFactory。
这是我的代码。

fake = Faker('uk_UA')

class UserFactory(DjangoModelFactory):
    class Meta:
        model = User

    username = fake.user_name
    first_name = fake.first_name_male
    last_name = fake.last_name_male

    email = fake.safe_email

但是当我尝试使用它时,出现错误:
    DataError                  Traceback (most recent call last)
/Users/mero/.virtualenvs/fine-hut/lib/python3.6/site-packages/django/db/backends/utils.py in execute(self, sql, params)
     63             else:
---> 64                 return self.cursor.execute(sql, params)
     65

DataError: value too long for type character varying(30)

我认为问题出在Faker产生的字段太长。但是我没有找到任何方法来限制它在python中的长度,尽管没有找到Ruby Faker的答案。

有办法在python Faker中做到这一点吗?
也许还有其他方法可以使用Faker生成特定于语言环境的字段?

最佳答案

对我有用的两种可能性:

选项1:LazyAttribute
如果在factory_boy的Faker实现之外评估此值,则可以将其传递到LazyAttribute工厂方法中,并采用其长度:

from faker import Factory as FakerFactory
faker = FakerFactory.create()

class MyFactory(DjangoModelFactory):
    class Meta:
        model = MyModel
    some_attr = factory.LazyAttribute(lambda n: faker.sentence()[:10])

选项2:用模糊代替Faker:
如果您不关心丢失提供程序的实际属性,并且只需要设置长度的随机字符串即可,则可以执行以下操作:
import factory.fuzzy   # necessary; can't just do import factory

class MyFactory(DjangoModelFactory):
    class Meta:
        model = MyModel
    some_attr = factory.fuzzy.FuzzyText(length=10)

关于python - 如何设置python Faker字段的长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45529161/

10-12 19:24