/ / post_generation s továrenským chlapcom dáva ManyRelatedManager, keď som chcel zoznam - python, django, factory-boy

post_generation s továrni chlapec dáva ManyRelatedManager, keď som chcel zoznam - python, django, factory-boy

Ja som jasne, že som numpty, priznám sa, že na samom začiatku. Ja používam nasledujúcu továreň

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)

Keď to vytvorím PDS=DataSheetFactory(product_contributors= (<tuple of users>)) Očakávam zoznam používateľov v teréne product_contributors, ale dostanem django.db.models.fields.related.ManyRelatedManager namiesto toho, takže testy nebudú fungovať, čo som mal robiť, keď som nasledoval "spoločné recepty" tu?

Len na objasnenie, pýtam sa, ako používať chlapca z továrne na vytvorenie zoznamu používateľov v poli typu model od mnohých k mnohým. Skúšal som, čo bolo navrhnuté v dokumentoch, a dostanem ManyRelatedManager, nie zoznam factory_boy generuje nepoužiteľné inštancie.

odpovede:

4 pre odpoveď č. 1

Ako bolo uvedené vyššie, váš problém pochádza z mágie, ktorú som dal do továrne: self v @post_generation isn "t továreň inštancie, ale skutočný objekt práve vygenerovaný.

Takže product_contributors je skutočne inštanciou Django "RelatedManager", môžete pristupovať k položkám s:

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