python - 如何设置 python Faker 字段的长度

标签 python django faker

我正在尝试使用 factory_boy 中的 DjangoModelFactory 设置 UserFactory和 Faker . 这是我的代码。

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:Fuzzy 而不是 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/

相关文章:

java - 如何用java faker创建一个连贯的对象

python - 删除行读取引起的回车

python - 如何知道Django中数据库的当前名称?

python - 为什么这个脚本需要这么长时间才能运行?

python - 使用 ModelForm 更新 Django 模型的某些字段

django - 使用 postgresql 和 django 存储地理信息的最佳模块是什么?

postman - 是否可以在不编写预请求脚本的情况下重用动态变量值

Python:如何将 ggplot 与简单的 2 列数组一起使用?

python - (python) Youtube-dl 连接错误处理

python - 如何将列表转换为 ASCII