https://github.com/allenling/django-easy-fixture
easy to create a django fixture
https://github.com/allenling/django-easy-fixture
Last synced: 3 months ago
JSON representation
easy to create a django fixture
- Host: GitHub
- URL: https://github.com/allenling/django-easy-fixture
- Owner: allenling
- License: mit
- Created: 2016-08-24T02:31:57.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-07-11T09:25:52.000Z (almost 7 years ago)
- Last Synced: 2025-02-23T08:19:49.987Z (3 months ago)
- Language: Python
- Homepage:
- Size: 42 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.txt
Awesome Lists containing this project
README
django-easy-fixture
===================
.. figure:: https://travis-ci.org/allenling/django-easy-fixture.svg?branch=masterpython2.7, python3.5
1.8<= Django <= 1.10
**install: pip install django-easy-fixture**
That is a easy, simple tool to help you to fill your fixture dict with some spam datas
Make your fixture dict to be a completely available django fixture that **you do not have to worry about any unqiue, unqie_together, just pk**
**The pk must be defined by you!**
**Just support all the fields defined by Django, and do not support any customization field.**
**Maybe** support the customization field in the future.
1. get a fixture dict
---------------------.. code-block:: python
# in template.py
fixtures_template={'auth.User': [{'pk': 1}]}# in other.py
from easy_fixture.easy_fixture import EasyFixture
from template import fixtures_templateef = EasyFixture(fixtures_template)
fixtures_dict = ef.output()2. use as a django app command
------------------------------.. code-block:: python
# in template.py
fixtures_template = {'auth.User': [{'pk': 1}]}# in your settings.py
INSTALLED_APPS = ('other apps',
'easy_fixture',
)
run make_fixture command
.. code-block:: pythonpython manage.py make_fixture template.fixtures_template > /path/to/fixture.json
Must pass the module path and fixture variable, like module.to.fixture.Variable_name
**do not support old style**
.. code-block:: python
python manage.py make_fixture template > /path/to/fixture.json
3. use in test
--------------In your testCase, call EasyFixture.load_into_testcase in your setUpTestData, setUpClass, setUp or anywhere you want to load your fixture data.
.. code-block:: python
FIXTURE_DICT = {'auth.User': [{'pk': 1}]}
class MyTestCase(TestCase):
@classmethod
def setUpTestData(cls):
ef = EasyFixture(FIXTURE_DICT)
ef.load_into_testcase()
TestCase.setUpTestData()
def tes_what_you_want(self):
pass**deprecated**
.. code-block:: python
from easy_fixture.easy_fixture import FixtureFileGen
class MyCase(TestCase):
fixtures = FixtureFileGen(['my.fixture.template.module'])4. how to loaddata to db
------------------------Creating a temp file, and call loaddata command for now.
And, maybe we could simply
1. disable database constraint check
2. call serializers.deserialize to deserialize fixture datas, and save all objects
3. check constraint after we have save all objects
4. finally, reset database sequence
.. code-block:: python
# disable database constraint check
with connection.constraint_checks_disabled():
# save objects
objects = serializers.deserialize(ser_fmt, fixture_data, using=self.using, ignorenonexistent=self.ignore)
for obj in objects:
obj.save()
# check constraints
connection.check_constraints(table_names=table_names)
# reset sequence
sequence_sql = connection.ops.sequence_reset_sql(no_style(), self.models)