/ / post_generation com factory boy dá ManyRelatedManager quando eu queria listar - python, django, factory-boy

post_generation com factory boy dá ManyRelatedManager quando eu queria listar - python, django, factory-boy

Eu estou claramente sendo um idiota, eu vou admitir isso no começo. Eu estou usando a seguinte fábrica

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)

Quando eu crio isso com PDS=DataSheetFactory(product_contributors= (<tuple of users>)) Espero uma lista de usuários no campo product_contributors, mas eu tenho um django.db.models.fields.related.ManyRelatedManager em vez disso, os testes não vão funcionar. O que eu deveria fazer, enquanto seguia as "Receitas Comuns"? Aqui?

Só para esclarecer, estou perguntando como usar o menino de fábrica para criar uma lista de usuários em um campo muitos-para-muitos de um modelo. Eu tentei o que foi sugerido nos documentos, e recebo um ManyRelatedManager, não uma lista, então factory_boy gera instâncias inutilizáveis.

Respostas:

4 para resposta № 1

Como apontado acima, o seu problema vem da mágica que eu coloquei no factory_boy: o self em um @post_generation Não é a instância de fábrica, mas o objeto real acabou de ser gerado.

Então, o product_contributors é de fato uma instância do Django "s" RelatedManager ", você pode acessar os itens com:

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