如何设置python Faker字段的长度

问题描述 投票:3回答:2

我正在尝试使用来自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生成特定于语言环境的字段?

python django faker
2个回答
1
投票

有两种可能对我有用:

选项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)

0
投票

找到了解决方法:

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

    username = factory.Faker('user_name', locale='uk_UA')
    first_name = factory.Faker('first_name', locale='uk_UA')
    last_name = factory.Faker('last_name', locale='uk_UA')

    email = factory.Faker('safe_email', locale='uk_UA')

它适用于我,但如果有一个选项可以设置Faker中的字段长度,它仍然很有趣。

© www.soinside.com 2019 - 2024. All rights reserved.