Package: django-fixture-magic
RequirementsThis package requires:Python 2.7, 3.6Django 1.8 - 2.1InstallationYou can get fixture-magic from pypi with:pip install django-fixture-magicThe development version can be installed with:pip install -e git://github.com/davedash/django-fixture-magic#egg=fixture-magicFor use in python3 install the following:pip install futurefixture-magic adds two commands tomanage.pytherefore you should add it to
yourINSTALLED_APPSinsettings.py:INSTALLED_APPS=(...'fixture_magic',...)UsageThere are four commands.dump_objectreturns the json representation of
a specific object as well as all its dependencies (as defined by ForeignKeys):./manage.py dump_object APP.MODEL PK1 PK2 PK3 ... > my_new_fixture.jsonOr:./manage.py dump_object APP.MODEL --query '{"pk__in": [PK1, PK2, PK3]}' > my_new_fixture.jsonOr you can get all objects with all dependencies by passing an asterisk:./manage.py dump_object APP.MODEL '*' > my_new_fixture.jsonYou can now safely loadmy_new_fixture.jsonin a test without foreign key i
errors.By default, fixture magic will dump related fixtures to your model in your fixture.
This can be disabled by passing the option--no-followtodump_object. This
is useful if your target database is already partially setup. Here is and example default output of dump_object:./manage.py dump_object APP.Book[{"model":"APP.Author","fields":{"pk":5,"name":"Mark Twain",}},{"model":"APP.Book","fields":{"pk":2,"title":"Tom Sawyer","author":5}}]Running with the--no-followoptions yields:./manage.py dump_object APP.Book –no-follow[{"model":"APP.Book","fields":{"pk":2,"title":"Tom Sawyer","author":5}}]Note:The above example assumes that an Author with an ID of 5 exists in the target database.The second command ismerge_fixtures.  This command takes several fixture
files and does a simple de-dupe operation (based on model and pk) and returns a
clean json file.  This is helpful if you have multiple json fixtures that might
have redundant data:./manage.py merge_fixtures fixture1.json fixture2.json fixture3.json ... \
> all_my_fixtures.jsonThe third command isreorder_fixtures.  This command takes a single file
and several model names (inapp.modelformat as they are specified in
fixture files).  This reorders your fixtures so the models you specifiy first
show up in the fixture first.  This is helpful if you tend to get foreign-key
errors when loading models:./manage.py reorder_fixtures fixture.json APP1.MODEL1 APP2.MODEL2 ... \
> ordered_fixture.jsonUnspecified models will be appended to the end.The fourth command iscustom_dump.  This reads a settingCUSTOM_DUMPS:## Fixture MagicCUSTOM_DUMPS={'addon':{# Initiate dump with: ./manage.py custom_dump addon id'primary':'addons.addon',# This is our reference model.'dependents':[# These are the attributes/methods of the model that we wish to dump.'current_version','current_version.files.all.0',],'order':('app1.model1','app2.model2',),'order_cond':{'app1.model1':lambdax:1ifx.get('fields').get('parent_model1')else0,'app2.model2':lambdax:-1*x.get('pk')},}}It runs the equivalent ofdump_objecton the dependents (which in turn pick
up the primary object).  The JSON dumps are then merged together.  Very handy
for dumping multi-dependent objects.dependents,orderandorder_condare
optional.dependents: Defines additional properties/methods to dump the return values
of. Magic will convert“current_version.files.all.0”toobject.current_version.files.all()[0]order: Specify an order in which objects should be dumped based on their
model class. In the above example, all app1.model1 objects will preceed any
app2.model2 objects, which will preceed any objects of any other model class.order_cond: Specify an order to dump objects of one or more particular model
classes. In the above example, all app1.model1 objects with a truthyself.parent_model1attribute will come after any other app1.model1 object that
does not have a truthy value for this attribute. A sort operation is called on
the list of all objects of that model type, with the value associated with a
model name being passed to the sort function as thekeykeyword argument.
Keep in mind that the model objects will have already been serialized to a
dictionary object prior to the sort operation.