Skip to content
NoSQL Admin for Django
Latest commit f0b3dcb Mar 25, 2012 @pydanny TODO on tests
Failed to load latest commit information.
examples making the wiring behave better Mar 18, 2012
nosqladmin TODO on tests Mar 25, 2012
.gitignore boilerplate Mar 14, 2012
CHANGELOG boilerplate Mar 15, 2012
LICENSE.txt boilerplate Mar 15, 2012 More boilerplate Mar 14, 2012
README.rst Minor correction Mar 24, 2012 Adding the ideas Mar 14, 2012 readme driven development Mar 14, 2012



Many NoSQL databases, mostly the Document based ones, translate into Python as a list of dictionaries, right? So why do us developers try to staple document databases into Django's traditional style relational introspection and tools? It's like we're trying to add object impedance mismatch to something that avoids it in the first place.

Taking lessons learned from django-mongonaut, django-nosql-admin is an introspection tool for NoSQL databases. Our original test case is MongoDB, but if this works we'll invite authorship of interfaces for other NoSQL databases.


  • Display the results of lists of dictionaries

  • features:

    • Define a collection
    • Only show ObjectId by default
    • Can add search fields which attempt to search
    • Can add list fields which try to display
    • Define which collections are displayed.

Sample file:

from nosqladmin.mongodb import MongoAdmin

from django import forms # in theory can be from any widget library

class ProfileAdmin(MongoAdmin):

    collection_name = 'example_blog.Profile'
    search_fields = ['username']
    list_fields = ['username']

    def has_view_permission(self, request):
        return True

class ArticleAdmin(MongoAdmin):

    collection_name = 'example_blog.Article'
    search_fields = ['title',]
    list_fields = ['title','create_date']
    form_template = {


Sample integration:

# list of tuples that have the module name and then the class.
# Done this way to make importing possible
NOSQLADMINS = [("mongoadmin", "ProfileAdmin"), ("mongoadmin", "ArticleAdmin")]
Something went wrong with that request. Please try again.