Generate (factory_boy) Model Factory for each model of your Django app
- 1.0.4 fix has_choices property for Django 3.0
- 1.0.3 Remove useless print statements
- 1.0.2 Add
PointFieldFaker
to supportPointField
. Refactor the way modules are imported on generated factories - 1.0.1 Add more accurate fakers for
BigIntegerField
,IntegerField
,PositiveIntegerField
,PositiveSmallIntegerField
andSmallIntegerField
- 1.0.0 Init project
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 :
- model_factories/app_label_foo/base/model_foo containing the
ModelFooFactoryBase
class definition generated from the modelModelFoo
. This file should not be manually edited since it would be overriden each time the commandgenerate_factories
is run. - model_factories/app_label_foo/model_foo containing the
ModelFooFactory
class which simply extendsModelFooFactoryBase
. This file is generated once but not overriden when you run thegenerate_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
- Improve documentation
- Write unit tests
- validate compatibility with previous versions of Django and Python
If you are having issues, please let us know or submit a pull request.
The project is licensed under the MIT License.