Skip to content
This repository

A complete library to create dynamic model instances for testing purposes.

branch: master

Django Dynamic Fixture

Build Status

Latest version: 1.7.0 (2014/03/26)

A complete library to create dynamic model instances for testing purposes.


  • It is a TERRIBLE practice to use STATIC data in tests.
  • Create dynamic fixture for each model is boring and it produces a lot of replicated code.
  • It is a bad idea to use uncontrolled data in tests, like bizarre random data.

Basic Example of Usage

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=255)

class Book(models.Model):
    name = models.CharField(max_length=255)
    authors = models.ManyToManyField(Author)
from django.test import TestCase
from django_dynamic_fixture import G

class SearchingBooks(TestCase):
    def test_search_book_by_author(self):
        author1 = G(Author)
        author2 = G(Author)
        book1 = G(Book, authors=[author1])
        book2 = G(Book, authors=[author2])
        books = Book.objects.search_by_author(
        self.assertTrue(book1 in books)
        self.assertTrue(book2 not in books)


pip install django-dynamic-fixture


1. Download zip file
2. Extract it
3. Execute in the extracted directory: python install

Development version

pip install -e


# or use the development version


pip install django-dynamic-fixture --upgrade --no-deps


Legacy: Django 1.2, 1.3 - Python: 2.7

Django 1.4 with Python 2.7 Django 1.5 with Python 2.7 Django 1.6 with Python 2.7 or 3.3

Comparison with another fixture tools

  • We tried to use another fixture tools in a big Django project but the experience was not satisfactory.
  • Either they are incomplete, or bugged or it produces erratic tests, because they use random and uncontrolled data.
  • Also, the syntax of others tools is too verbose, which polutes the tests.
  • Complete, lean and practice documentation.
  • It is hard to debug tests with another tools.
  • List of other tools: or
  • The core of the tool is the algorithm, it is not the data generation as all other tools. That mean you can change the data generation logic as you want.


  • Highly customizable: you can customize fields recursively
  • Deal with unique=True
  • Deal with cyclic dependencies (including self references)
  • Deal with many to many relationship (common M2M or M2M with additional data, i.e. through='table')
  • Deal with custom fields (specially if the custom field inherit of a django field)
  • It is supported for parallel tests
  • Deal with auto calculated attributes
  • It is easy to debug errors

Other goodies

  • Nose plugin that enable a setup for the entire suite (unittest2 includes only setups for class and module)
  • Nose plugin to count how many queries are executed by test
  • Command to count how many queries are executed to save any kind of model instance
  • FileSystemDjangoTestCase that facilitate to create tests for features that use filesystem.

Documentation links


Something went wrong with that request. Please try again.