class Book(models.Model): name = models.CharField() class BookFactory(factory.DjangoModelFactory): name = factory.FuzzyText() class Meta: model = "libraries.Book" # create a singular record book = BookFactory.create() # create multiple books = BookFactory.create_batch(100)
class Author(models.Model): name = models.CharField() class Topic(models.Model): slug = models.CharField(unqiue=True) name = models.CharField() class Book(models.Model): title = models.CharField() author = models.ForeignKey(Author) topics = models.ManyToMany( Topic, related_name="books" ) sequel = models.ForeignKey( "Book", null=True, on_delete=models.SET_NULL )
class TopicFactory(factory.DjangoModelFactory): slug = factory.Faker("word") name = factory.Faker("word")
class TopicFactory(factory.DjangoModelFactory): slug = factory.Faker("word") name = factory.LazyAttribute( lambda topic: topic.slug.capitalize() )
TOPICS = { topic["slug"]: topic["name"] for topic in json.loads( Path("test_data/topics.json").read_text() ) } class TopicFactory(factory.DjangoModelFactory): slug = factory.fuzzy.FuzzyChoice(TOPICS.keys()) name = factory.LazyAttribute( lambda topic: TOPICS[topic.slug] ) class Meta: model = Topic django_get_or_create = ("slug",)
class BookFactory(factory.DjangoModelFactory): @factory.postgeneration def topics(self, create, extracted, **kwargs): if not create or not extracted: return self.topics.set(extracted) BookFactory.create(topics=TopicFactory.create_batch(3))
class BookFactory(factory.DjangoModelFactory): @factory.post_generation def topics(self, create, extracted, **kwargs): if not create or not extracted: return if not extracted: extracted = TopicFactory.create_batch( random.randint(1, 3) ) self.topics.set(extracted) BookFactory.create() # gets 1-3 topics BookFactory.create(topics=[TopicFactory.create()]) # 1 topic BookFactory.create(topics=[]) # oops, 1-3 topics
class BookFactory(factory.DjangoModelFactory): @factory.post_generation def topics(self, create, extracted, **kwargs): if not create or ( isinstance(extracted, list | tuple) and len(extracted) == 0 ): return if not extracted: ... # create topics self.topics.set(extracted) class Params: no_topics = factory.Trait(topics=[]) BookFactory.create(topics=[]) BookFactory.create(no_topics=True) class NoTopicsBookFactory(BookFactory): no_topics = True NoTopicsBookFactory.create()
class BookFactory(factory.DjangoModelFactory): sequel = factory.Maybe( factory.Faker("pybool"), yes_declaration=SubFactory( BookFactory, sequel=factory.SubFactory(BookFactory) ), no_declaration=None ) class Params: has_sequel = factory.Trait( sequel=factory.SubFactory( "libraries.factories.BookFactory", ) ) BookFactory.create() BookFactory.create(has_sequel=True, sequel__has_sequel=True) BookFactory.create(has_sequel=False)