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 № 1Como 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()