This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

Why fork

This is a fork of django-jsonfield. I need to use django-jsonfield with jsonfield. Unfortunately, both have been using the same package name jsonfield, so I have to maintain a fork.

Difference from upstream

  • Rename package name from jsonfield to dj_jsonfield.


I had a serious need for a JSON field for django. There were a couple out there, but none packaged up nicely on bitbucket/github that were usable with pip install -e.

So I took the code from David Cramer’s blog, and packaged it up.


To use, just install the package, and then use the field:

from django.db import models
import dj_jsonfield

class MyModel(models.Model):
    the_json = dj_jsonfield.JSONField()

You can assign any JSON-encodable object to this field. It will be JSON-encoded before being stored in the database as a text value and it will be turned back into a python list/dict/string upon retrieval from the database.

There is also a TypedJSONField, that allows you to define data types that must be included within each object in the array. More documentation to follow.


If no default is provided, and null=True is not passed in to the field constructor, then a default of {} will be used.

Supported django versions

All versions of Django from 1.8 onwards are tested, however, if you are using Postgres, I highly recommend that you consider using the django.contrib.postgres module’s JSONField instead.


jsonify templatetag

This allows you to convert a python data structure into JSON within a template:

{% load jsonify %}

var foo = {{ bar|jsonify|safe }};

Note that you must only use the “safe” filter when you use the jsonify filter within a <script> tag (which is parsed like a CDATA section).

If you use it in some other places like in an HTML attribute, then you must not use the safe filter so that its output is properly escaped:

<div data-foo="{{ bar|jsonify }}">

The above rules are important to avoid XSS attacks with unsafe strings stored in the converted data structure.



Fix issue with Postgres JSONB fields. Limit XSS attacks with jsonify template tag.


Add support for Django 1.8 and 1.9 (without warnings). Remove support for Django < 1.8 as none of those releases are supported upstream anyway.

With this version, JSONField no longer decodes assigned string values as JSON. Instead it assumes that any value that you assign is the decoded value which will be JSON-encoded before storage in the database. This explains the bump to version 1.0 as it’s a backwards incompatible change.


Allow passing decoder_kwargs as an argument to a field. This dict will be passed as kwargs to the json.loads() calls when loading data that is a string.

You may also set this as a global value in settings.JSONFIELD_DECODER_KWARGS.

A new dict is created for each field: so if this value is altered after field definition, it shouldn’t affect already attached fields.


Allow passing an argument of encoder_class to a field, which will result in that object (or the object located at that path, for instance core.utils.JSONEncoder) being used as the cls argument when serializing objects.

You may also set this as a global value in settings.JSONFIELD_ENCODER_CLASS


Bump version number to get around uploading issues.


No longer hit the db to work out db_type.


Cache the result of db_type. Handle incoming data from multiple select widget better.


Finally strip out non-required files.


Remove freezegun workarounds. Fix broken build.


Fixes for mutable defaults: we serialize and then deserialize in this case, so you can still use default={}.


Remove support for storing data using Postgres’ 9.2’s JSON data type, as you cannot currently query against this!

Remove support for django < 1.3.


Add LICENSE file. Added TypedJSONField.


Allow {{ variable|jsonify }} to work with querysets.


Prevent circular import problem with django 1.3.1 and gargoyle.


Better handle null=True and blank=True: it should make sense what they do now.


Allow for ‘{}’ and ‘[]’, and make them not appear to be None.


Ensure the version number file is installed with the package.


Store the version number in one place only, now.


Oops. Packaging error prevented install from pypi. Added README.rst to manifest.


Converting to string does nothing, as serializing a model instance with a JSONField would have a string version of that field, instead of it embedded inline. (Back to pre 0.8 behaviour).

Added better querying support: (field__contains={'key':'value','key2':'value2'} works.)

Removed JSONTableWidget from package.


(Many thanks to IanLewis for these features)

Supports django 1.2

Supports callable and json serializable objects as default

Implemented get_db_prep_value()

Add tests and test runner.

Removed JSONTableWidget from README.


Don’t fail when trying to install before django is installed.


First time I tagged releases.


Allow for passing in a function to use for processing unknown data types.

Convert date/time objects nicely to/from ISO strings (YYYY-mm-dd HH:MM:SS TZNAME). This is actually a bit tricky, as we don’t know if we are expecting a date/time object. We may parse objects as we go, but there could be some performance issues with this. I’m tempted to say “only do this on TypedJSONField()”

Release History

Release History


This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
dj_jsonfield-1.0.0-py3-none-any.whl (15.8 kB) Copy SHA256 Checksum SHA256 py3 Wheel Oct 17, 2016
dj-jsonfield-1.0.0.tar.gz (10.7 kB) Copy SHA256 Checksum SHA256 Source Oct 17, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting