无法通过factoryBoy类创建实例的Django技术求助
Django Shell中使用factory_boy创建模型实例报错的解决方案
问题概述
在Django Shell中尝试通过自定义factory_boy类创建WebShareFileFolders模型实例时,调用类或create()方法均触发报错,最终确认问题源于错误的导入方式。
环境信息
- Python 3.7.9
- factory-boy 3.3.0
自定义Factory类代码
文件路径:webshare/tests/factories/WebShareFileFactoryBoy.py
import factory from webshare.models import WebShareFileFolders class WebShareFileFactoryBoy(factory.django.DjangoModelFactory): class Meta: model = WebShareFileFolders inode = factory.Sequence(lambda n: n) name = factory.Faker('name') path = factory.Faker('text', max_nb_chars=50) is_dir = factory.Faker('boolean')
错误导入及报错信息
使用错误的导入语句时,控制台抛出以下异常:
>>> from webshare.tests.factories import WebShareFileFactoryBoy >>> instance = WebShareFileFactoryBoy() Traceback (most recent call last): File "C:\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> TypeError: 'module' object is not callable >>> instance = WebShareFileFactoryBoy.create() Traceback (most recent call last): File "C:\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> AttributeError: module 'webshare.tests.factories.WebShareFileFactoryBoy' has no attribute 'create'
解决方法
错误原因是当前导入的是WebShareFileFactoryBoy模块本身,而非模块内的同名Factory类。需使用明确的导入语句指定导入模块中的类:
from webshare.tests.factories.WebShareFileFactoryBoy import WebShareFileFactoryBoy
导入完成后,即可正常调用类实例化或create()方法生成模型实例:
# 直接实例化 instance = WebShareFileFactoryBoy() # 使用factory_boy的create方法创建并保存到数据库 instance = WebShareFileFactoryBoy.create()
内容的提问来源于stack exchange,提问作者jordan
相关产品推荐
相关产品推荐

