Generate (factory_boy) Model Factory for each model of your Django app
PointFieldFaker
to support PointField
. Refactor the way modules are imported on generated factoriesBigIntegerField
, IntegerField
, PositiveIntegerField
, PositiveSmallIntegerField
and SmallIntegerField
This Django app generates factory_boy Model Factories from your installed apps, so you need to have factory_boy installed.
Install using pip
:
pip install django_factory_generator
Add factory_generator
to your INSTALLED_APPS
settings.
INSTALLED_APPS = (
...
'factory_generator',
...
)
Generate factories with a single command line:
python manage.py generate_factories
This will create a model_factories
directory with the following structure :
|__ model_factories/
|__ app_label_foo/
|__ __init__.py
|__ model_foo.py
|__ model_bar.py
|__ base/
|__ __init__.py
|__ model_foo.py
|__ model_bar.py
Each model results in two generated files :
ModelFooFactoryBase
class definition generated from the model ModelFoo
. This file should not be manually edited since it would be overriden each time the command generate_factories
is run.ModelFooFactory
class which simply extends ModelFooFactoryBase
. This file is generated once but not overriden when you run the generate_factories
command again.This structure gives you the ability to override the ModelFactory that was automatically generated. You can then edit the ModelFooFactory
to change / edit the base fields that were generated.
You can then import your model factories the following way:
# app_label/tests.py
from django.test import TestCase
from model_factories.app_label import ModelFooFactory, ModelBarFactory
class FooTests(TestCase):
def test_model_factory(self):
modelfoo = ModelFooFactory(
foo='bar',
)
modelbar = ModelBarFactory(
bar='baz',
)
# Run your tests here
Here are all the settings you can use, with their default value :
FACTORY_NORMALIZE_FIELD_MAP = {}
FACTORY_FIELD_FAKER_MAP = {}
FACTORY_IGNORE_FIELDS = []
FACTORY_ROOT_DIR = 'model_factories'
FACTORY_IGNORE_NON_EDITABLE_FIELDS = True
If you are having issues, please let us know or submit a pull request.
The project is licensed under the MIT License.