我有以下工廠,并希望訪問將從它創建的實體的 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。為什么工廠男孩不承認這一點,我該如何解決?
謝謝和問候馬特
uj5u.com熱心網友回復:
基于LazyAttribute上的檔案,該方法接受正在構建的物件,我認為該物件尚未創建/保存,這就是為什么還沒有 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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454488.html
