当我想要列表时,带工厂男孩的post_generation给出了ManyRelatedManager

时间:2014-10-28 11:47:54

标签: python django factory-boy

我显然是一个笨蛋,我会在一开始就承认。我使用以下工厂

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会生成不可用的实例。

1 个答案:

答案 0 :(得分:4)

如上所述,您的问题来自于我在factory_boy中投入的魔力:self中的@post_generation不是工厂实例,而是刚生成的实际对象

因此,product_contributors确实是Django&#34; RelatedManager&#34;的一个实例,您可以通过以下方式访问这些项目:

datasheet = DataSheetFactory()
contributors = datasheet.product_contributors.all()