Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Configuration models for Django allowing config management with auditing.

Project Description

Part of edX code.



This app allows other apps to easily define a configuration model that can be hooked into the admin site to allow configuration management with auditing.


Add config_models to your INSTALLED_APPS list.


Create a subclass of ConfigurationModel, with fields for each value that needs to be configured:

class MyConfiguration(ConfigurationModel):
    frobble_timeout = IntField(default=10)
    frazzle_target = TextField(defalut="debug")

This is a normal django model, so it must be synced and migrated as usual.

The default values for the fields in the ConfigurationModel will be used if no configuration has yet been created.

Register that class with the Admin site, using the ConfigurationAdminModel:

from django.contrib import admin

from config_models.admin import ConfigurationModelAdmin, ConfigurationModelAdmin)

Use the configuration in your code:

def my_view(self, request):
    config = MyConfiguration.current()
    fire_the_missiles(config.frazzle_target, timeout=config.frobble_timeout)

Use the admin site to add new configuration entries. The most recently created entry is considered to be current.


The current ConfigurationModel will be cached in the configuration django cache, or in the default cache if configuration doesn’t exist. The configuration and default caches are specified in the django CACHES setting. The caching can be per-process, per-machine, per-cluster, or some other strategy, depending on the cache configuration.

You can specify the cache timeout in each ConfigurationModel by setting the cache_timeout property.

You can change the name of the cache key used by the ConfigurationModel by overriding the cache_key_name function.


ConfigurationModels are just django models, so they can be extended with new fields and migrated as usual. Newly added fields must have default values and should be nullable, so that rollbacks to old versions of configuration work correctly.


The full documentation is at


The code in this repository is licensed under the AGPL 3.0 unless otherwise noted.

Please see LICENSE.txt for details.

How To Contribute

Contributions are very welcome.

Please read How To Contribute for details.

Even though they were written with edx-platform in mind, the guidelines should be followed for Open edX code in general.

Reporting Security Issues

Please do not report security issues in public. Please email

Mailing List and IRC Channel

You can discuss this code in the edx-code Google Group or in the #edx-code IRC channel on Freenode.

Change Log


[0.1.9] - 2017-08-07


  • Updated Django REST Framework dependency to 3.6 as we were not actually compatible with 3.2.

[0.1.8] - 2017-06-19


  • Support for Django 1.11.

[0.1.7] - 2017-06-19

  • Unreleased version number

[0.1.6] - 2017-06-01


  • Support for Django 1.10.

[0.1.1] - [0.1.5] - 2017-06-01


  • Add quality testing to travis run.
  • Add encrypted password for package PyPI.


  • Remove the quality condition on deployment.
  • Remove the version combos known to fail.


  • Allow for lower versions of djangorestframework, to be compatible with edx-platform.
  • Constrict DRF to version that works.
  • Update versions of requirements via pip-compile.
  • Use different test target - test-all instead of validate.


  • Fix name and supported versions.

[0.1.0] - 2016-10-06


  • First release on PyPI.

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(28.0 kB) Copy SHA256 Hash SHA256
Wheel py2.py3 Aug 7, 2017
(34.1 kB) Copy SHA256 Hash SHA256
Source None Aug 7, 2017

Supported By

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 Google Google Cloud Servers DreamHost DreamHost Log Hosting