Django-seed uses the faker library to generate test data for your Django models. This has been \"hard-forked\" from django_faker in order to support newer versions of Python and Django
Django-seed allows you to write code to generate models, and seed your
database with one simple manage.py
command!
Installation
To install django-seed, use pip:
pip install django-seed
Or to install from source:
python setup.py install
Configuration
Add it to your installed apps in settings.py
:
INSTALLED_APPS = (
...
'django_seed',
)
Usage
Note: When seeding models with Foreign Keys, you need to make sure that those models are seeded first. For example, if a model in app [A]{.title-ref} has a foreign key to a model in app [B]{.title-ref}, you must seed app [B]{.title-ref} first.
Using with command
With django-seed, you can seed your database with test data from the
command line using the manage.py seed
command.
Ex: Seed 15 of each model for the app api
:
$ python manage.py seed api --number=15
That\'s it! Now you have 15 of each model seeded into your database.
Should you need, you can also specify what value a particular field
should have. For example, if you want to seed 15 of MyModel
, but you
need my_field
to be the same on all of them, you can do it like this:
$ python manage.py seed api --number=15 --seeder "MyModel.my_field" "1.1.1.1"
This is the command equivalent to doing it in Python:
seeder.add_entity(MyModel, 10, {
'my_field': '1.1.1.1',
})
Using with code
django-seed provides methods to easily seed test databases for your
Django models. To seed your database with Model instances, import
Seed
, get a seeder
instance, and use the [add_entity]{.title-ref}
method.
Ex: seeding 5 Game
and 10 Player
objects:
from django_seed import Seed
seeder = Seed.seeder()
from myapp.models import Game, Player
seeder.add_entity(Game, 5)
seeder.add_entity(Player, 10)
inserted_pks = seeder.execute()
The seeder uses the name and column type to populate the Model with
relevant data. If django-seed misinterprets a column name or column type
and AttributeError(field) is thrown, you can still specify a custom
function to be used for populating a particular column, by adding a
third argument to the add_entity()
method:
seeder.add_entity(Player, 10, {
'score': lambda x: random.randint(0, 1000),
'nickname': lambda x: seeder.faker.email(),
})
seeder.execute()
Django-seed does not populate auto-incremented primary keys, instead
seeder.execute()
returns the list of inserted PKs, indexed by class:
print inserted_pks
{
<class 'faker.django.tests.Player'>: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
<class 'faker.django.tests.Game'>: [1, 2, 3, 4, 5]
}
You may specify a different locale by passing it in the constructor of the seeder. Defaults to [settings.LANGUAGE_CODE]{.title-ref}
seeder = Seed.seeder(locale='sv_SE')
seeder.faker.city() # 'Västerås'
Localization
Seed.seeder()
can take a locale as an argument, to return localized
data. You can find all possible locales in faker\'s
documentation
In order to apply localization, do the next:
seeder = Seed.seeder('it_IT')
Tests
To run django tests in a django environment, first make sure you have the packages from [requirement-test.txt]{.title-ref} installed, then run the following:
$ python runtests.py
or if you have django_seed
in INSTALLED_APPS:
$ python manage.py test django_seed
License
MIT. See LICENSE for more details.