如何设置特定长度的特定伪造者随机字符串并使用下划线作为空格?

How to set specific faker random string of specific length and using underscores for spaces?

import factory.fuzzy
import faker
from core.strings import underscore_15

from factory import DjangoModelFactory, SubFactory


faker = faker.Factory.create()
class SubProjectFactory(DjangoModelFactory):
    class Meta:
        model = SubProject
        django_get_or_create = ("internal_name",)

    internal_name = factory.Faker('pystr')
    internal_short_name = factory.Faker('pystr')
    underscore_15 = factory.fuzzy.FuzzyText(length=15)
    main_project = SubFactory(MainProjectFactory)

我需要字段 underscore_15 是一个只有 15 个字符长且没有 space 的小写字符串。如果有任何 space 它应该是下划线。我试图在 factory.fuzzy.FuzzyText(length=15) 周围放置一个函数。然后我意识到我假设 FuzzyText returns 是一个字符串,但它是一个 FuzzyText 对象。

我该怎么办?

嗯,你可以像这样调用来获取 FuzzyText 对象的值:

>> f = factory.fuzzy.FuzzyText(length=15)
>> f.fuzz()

但是,在本文中,字符可以是大写或小写。所以如果你想要独占小写字符,那么你可以像这样覆盖 FuzzyText

from factory.fuzzy import FuzzyText

class CustomFuzzyText(FuzzyText):
    def fuzz(self, *args, **kwargs):
       return super(CustomFuzzyText, self).fuzz(*args, **kwargs).lower()

并像这样在工厂中使用它:

underscore_15 = CustomFuzzyText(prefix="aa_", length=12)  # or CustomFuzzyText(length=15)