【问题标题】:Is there a way to use a temporary non-field variable in factoryboy?有没有办法在 factoryboy 中使用临时非字段变量?
【发布时间】:2021-12-31 02:56:12
【问题描述】:

我正在定义一些工厂来测试我的电子商务商店。我创建了一个 Faker 提供程序,它可以返回例如包含随机产品所有数据的字典。

然后我想使用该字典来填充我工厂中的字段。这是因为字典中的数据是连贯的。我不想使用不连贯的数据创建工厂,例如a 产品名称:“短袖 T 恤”,然后描述:“漂亮、舒适的鞋子”。有没有办法可以实现类似于

class ProductFactory(factory.django.DjangoModelFactory):
    temporary_product_dict = fake.product_dict_from_provider()
    
    name = temporary_product_dict["name"]
    description = temporary_product_dict["description"]
    category = temporary_product_dict["category"]
    ...

    class Meta:
        model = models.Product

当我执行此操作时,我收到一条错误消息,告诉我temporary_product_dict 不是产品模型的属性。

【问题讨论】:

    标签: python django pytest faker factory-boy


    【解决方案1】:

    我使用class Params如下:

    class OptionTypeFactory(factory.django.DjangoModelFactory):
        """OptionType model factory."""
    
        class Meta:
            model = OptionType
    
        class Params:
            # Obtain coherent data for an option type from provider
            option_type = fake.product_option_type()
    
        name = Params.option_type["name"]
        display_name = Params.option_type["display_name"]
        index = Params.option_type["index"]
        created = datetime.datetime.strptime(
            Params.option_type["created"], "%Y-%m-%d %H:%M:%S"
        )
        updated = datetime.datetime.strptime(
            Params.option_type["updated"], "%Y-%m-%d %H:%M:%S"
        )
    
    
    register(OptionTypeFactory)
    

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多