python - 伪造一个用于模型测试的语言环境字段
问题描述
我只是在这样的模型中有一组语言:
from django.conf.global_settings import LANGUAGES
class AvailableLanguage(models.Model):
code = models.CharField(choices=LANGUAGES, unique=True)
在factories.py
,我想伪造code
字段。我试图从中随机获取语言环境代码,LANGUAGES
但失败了。它不是创建一个实例AvailableLanguage
,而是循环语言并迅速引发问题,因为code
设置为unique
.
所以我想创建一个 Provider 作为一个单例,但由于同样的原因它失败了。它生成所有语言环境代码,而不是只提供一个!
class Provider(BaseProvider):
lang_code = NotImplemented
def __init__(self, generator):
self.langs = LANGUAGES
self.generator = generator
def __getattribute__(self, attrib):
if attrib == 'lang_code':
self.lang_code = self.langs.pop()[0]
return self.lang_code
else:
return super().__getattribute__(attrib)
fake.add_provider(Provider)
class AvailableLanguageFactory(DjangoModelFactory):
code = Faker('lang_code')
class Meta:
model = AvailableLanguage
解决方案
您可以尝试使用 工厂男孩的迭代器。
from django.conf.global_settings import LANGUAGES
import factory
class AvailableLanguageFactory(factory.DjangoModelFactory):
code = factory.Iterator(LANGUAGES, getter=lambda l: l[0])
class Meta:
model = AvailableLanguage
推荐阅读
- animation - swiftUI:使用 offset() 隐藏组件时动画混乱
- kotlin - mockk、clearAllMocks 或 unmockkAll
- javascript - 如何在 css/js 中单击时向现有 div 添加 id?
- hibernate - Spring JPA findAll 查询返回没有来自外键映射的嵌套字段
- python - docker 容器中的 jupyter notebook 无法识别卷目录
- c# - 安装密钥搜索 bin 注册表
- node.js - 脱机运行无服务器时出错 - “错误:找不到模块 'C:\\Workspace\\service\\routes\\v1\\authnRoutes'”,
- javascript - 导入的节点模块可以调用在主模块中初始化的函数吗?
- c# - 发送到服务器后删除 C# HttpClient 授权标头
- windows - 每当复制和粘贴“reducedTransparencyFallbackColor”时,它都会转换为看起来像加密地址的随机字母数字字符串