/ / post_generation з фабричним хлопчиком дає ManyRelatedManager, коли я хотів список - python, django, factory-boy

post_generation з заводським хлопцем дає ManyRelatedManager, коли я хотів перерахувати - 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 замість того, щоб тести не працювали. Що я мав робити, як я дотримувався "Загальних рецептів" тут?

Просто для уточнення, я запитую, як використовувати хлопчика-фабрику, щоб створити список користувачів у полі-до-багатьох в моделі. Я спробував те, що було запропоновано в документах, і я отримаю ManyRelatedManager, не список, так factory_boy генерує непридатні для використання екземпляри.

Відповіді:

4 для відповіді № 1

Як зазначалося вище, ваша проблема походить від магії, яку я поставив у factory_boy: self в @post_generation це не заводський примірник, а реальний об'єкт, що просто згенерований.

Таким чином, product_contributors дійсно примірник "RelatedManager" Django, ви можете отримати доступ до елементів за допомогою:

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