我显然是一个笨蛋,我会在一开始就承认。我使用以下工厂
class DataSheetFactory(factory.DjangoModelFactory):
class Meta:
model = models.myModel
django_get_or_create = ('key_field',)
key_field = factory.Sequence(lambda n: n)
... <additional fields>
@factory.post_generation
def product_contributors(self, create, extracted, **kwargs):
if not create:
return
if extracted:
for person in extracted:
self.product_contributors.add(person)
当我使用PDS=DataSheetFactory(product_contributors= (<tuple of users>))
创建此广告时,我希望字段product_contributors
中包含一个用户列表,但我得到的是django.db.models.fields.related.ManyRelatedManager
,因此测试无法正常工作。我应该做什么,因为我遵循了#34; Common Recipes&#34; here?
为了澄清,我问如何使用工厂男孩在模型的多对多字段中创建用户列表。我尝试了文档中的建议,但我得到的是ManyRelatedManager
,而不是列表,因此factory_boy
会生成不可用的实例。
答案 0 :(得分:4)
如上所述,您的问题来自于我在factory_boy中投入的魔力:self
中的@post_generation
不是工厂实例,而是刚生成的实际对象
因此,product_contributors
确实是Django&#34; RelatedManager&#34;的一个实例,您可以通过以下方式访问这些项目:
datasheet = DataSheetFactory()
contributors = datasheet.product_contributors.all()