使用 DjangoModelFactory 时使用 LazyAttribute 获取 FactoryBoy 工厂的 id
Get id of FactoryBoy factory with LazyAttribute when using DjangoModelFactory
我有以下工厂,想访问将从中创建的实例的 ID:
class PlatformFactory(factory.django.DjangoModelFactory):
type = factory.fuzzy.FuzzyChoice(Platform.Type)
name = factory.fuzzy.FuzzyText(length=30)
user = factory.SubFactory(UserFactory)
ext = factory.LazyAttribute(lambda self: f"{self.user.key}|{self.id}")
class Meta:
model = Platform
exclude = ["user", ]
不幸的是,它给了我错误 AttributeError: The parameter 'id' is unknown. Evaluated attributes are {'type': <Type.OTHER: 2>, 'name': ...
但是因为它是一个 django 模型,所以存在一个 id。为什么这不被工厂男孩识别,我该如何解决?
感谢和问候
马特
根据 LazyAttribute 上的文档,该方法接受正在构建的对象,我认为该对象不是 created/saved,但这就是为什么还没有 id 的原因。 (如果我错了请纠正我)
无论如何,您应该能够使用 PostGeneration
实现您想要的
class PlatformFactory(factory.django.DjangoModelFactory):
class Meta:
model = Platform
exclude = ["user", ]
@factory.post_generation
def set_ext(obj, create, extracted, **kwargs):
if not create:
return
obj.ext = f"{obj.user.key}|{obj.id}"
obj.save()
我有以下工厂,想访问将从中创建的实例的 ID:
class PlatformFactory(factory.django.DjangoModelFactory):
type = factory.fuzzy.FuzzyChoice(Platform.Type)
name = factory.fuzzy.FuzzyText(length=30)
user = factory.SubFactory(UserFactory)
ext = factory.LazyAttribute(lambda self: f"{self.user.key}|{self.id}")
class Meta:
model = Platform
exclude = ["user", ]
不幸的是,它给了我错误 AttributeError: The parameter 'id' is unknown. Evaluated attributes are {'type': <Type.OTHER: 2>, 'name': ...
但是因为它是一个 django 模型,所以存在一个 id。为什么这不被工厂男孩识别,我该如何解决?
感谢和问候 马特
根据 LazyAttribute 上的文档,该方法接受正在构建的对象,我认为该对象不是 created/saved,但这就是为什么还没有 id 的原因。 (如果我错了请纠正我)
无论如何,您应该能够使用 PostGeneration
实现您想要的class PlatformFactory(factory.django.DjangoModelFactory):
class Meta:
model = Platform
exclude = ["user", ]
@factory.post_generation
def set_ext(obj, create, extracted, **kwargs):
if not create:
return
obj.ext = f"{obj.user.key}|{obj.id}"
obj.save()