Sto usando factory_boy per creare fixture di prova. Ho due semplici fabbriche, supportate dai modelli SQLAlchemy (semplificato di seguito).Evitare duplicati con factory_boy factory
Mi piacerebbe essere in grado di chiamare AddressFactory.create()
più volte, e farlo creare un Country
se non esiste già, altrimenti voglio riutilizzare il record esistente.
class CountryFactory(factory.Factory):
FACTORY_FOR = Country
cc = "US"
name = "United States"
class AddressFactory(factory.Factory):
FACTORY_FOR = Address
name = "Joe User"
city = "Seven Mile Beach"
country = factory.SubFactory(CountryFactory, cc="KY", name="Cayman Islands")
La mia domanda è: come posso configurare queste fabbriche in modo che factory_boy non tenta di creare un nuovo Paese ogni volta che si crea un indirizzo?
Hai un'occhiata a [factory.alchemy] (https://github.com/rbarrois/factory_boy/blob/master/factory /alchemy.py)? – javex
Non sai a cosa ti riferisci in quel collegamento; non c'è niente in quel file specifico che sembra utile. Ho esaminato i documenti per factory_boy e lo SQLAlchemy factory in particolare, ma non ho visto nulla sul riutilizzo dei record. Fondamentalmente cercando una funzionalità di tipo "trova o crea". –
Dopo una ricerca più approfondita, la risposta breve è che non puoi farlo. C'è il supporto per [get-or-create con i modelli Django] (https://factoryboy.readthedocs.org/en/latest/orms.html#factory.django.DjangoModelFactory.FACTORY_DJANGO_GET_OR_CREATE), ma non SQLAlchemy. Sto lasciando questa domanda aperta perché spero di aggiungere il supporto SQLAlchemy per questo uno di questi giorni se nessuno mi picchia. –