2

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

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,因此测试将不起作用。当我按照这里的“常用食谱”进行操作时,我应该怎么做?

澄清一下,我问的是如何使用 factory boy 在模型的多对多字段中创建用户列表。我尝试了文档中的建议,我得到了一个ManyRelatedManager,而不是一个列表,因此factory_boy生成了不可用的实例。

4

1 回答 1

4

如上所述,您的问题来自我在 factory_boy 中的魔法:selfin a@post_generation不是工厂实例,而是刚刚生成的实际对象。

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

datasheet = DataSheetFactory()
contributors = datasheet.product_contributors.all()
于 2014-10-29T11:30:59.127 回答