Factory Boy报错:无法生成抽象工厂UserFactory实例求助
解决Factory Boy中
Cannot generate instances of abstract factory错误 错误信息
factory.errors.FactoryError: Cannot generate instances of abstract factory UserFactory; Ensure UserFactory.Meta.model is set and UserFactory.Meta.abstract is either not set or False.
问题根源
你的UserFactory代码存在两个关键问题:
- Meta类模型赋值错误:用了类型注解符号
:而非赋值符号=,导致Factory Boy无法识别关联的Users模型。 - abstract属性位置错误且不必要:
abstract = True写在了Meta类外部,且你需要生成具体实例,完全不需要将工厂设为抽象类型(抽象工厂仅用于被其他工厂继承,不能直接生成实例)。
修复后的UserFactory代码
import factory import factory.django from users.models import Users from django.contrib.auth.hashers import make_password class UserFactory(factory.django.DjangoModelFactory): username = factory.Sequence(lambda n: f"user_{n:004}") email = factory.LazyAttribute(lambda user: f"{user.username}@example.com") password = factory.LazyFunction(make_password("password")) class Meta: model = Users # 改为赋值符号=,正确关联模型
验证
修改后,在测试代码中调用UserFactory()即可正常生成Users实例,不会再触发抽象工厂相关错误。
内容的提问来源于stack exchange,提问作者Wael Elsafty
相关产品推荐
相关产品推荐

