django-tablib is a helper library for Django that allows Django models to be used to generate tablib datasets with introspection of the fields on the models if no headers are provided. If headers are provided they can reference any attribute, fields, properties, or methods on the model.
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 190 commits behind joshourisman:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
django_tablib
.gitignore
AUTHORS
LICENSE
README.rst
setup.py

README.rst

django-tablib: tablib for Django

django-tablib is a helper library for Django that allows Django models to be used to generate tablib datasets with introspection of the fields on the models if no headers are provided. If headers are provided they can reference any attribute, fields, properties, or methods on the model.

Overview

django_tablib.ModelDataset()
A wrapper around tablib.Dataset that handles the conversion of Django QuerySets to a format that tablib can work with in the model of Django's ModelForm and ModelAdmin.

Usage

Create a tablib Dataset from a Django model, automatically introspecting all fields from the model:

from django_tablib import ModelDataset
from myapp.models import MyModel

class MyModelDataset(ModelDataset):
    class Meta:
        model = MyModel

data = MyModelDataset()

Create a tablib Dataset from a Django model with a custom list of fields:

from django_tablib import ModelDataset
from myapp.models import MyModel

class MyModelDataset(ModelDataset):
    fields = [
        'id',
        'myfield1',
        'myfield2',
    ]
    class Meta:
        model = MyModel

data = MyModelDataset()

Create a tablib Dataset from a Django QuerySet:

from django_tablib import ModelDataset
from myapp.models import MyModel

class MyModelDataset(ModelDataset):
    class Meta:
        queryset = MyModel.objects.filter(is_awesome=True)

data = MyModelDataset()

Create a tablib Dataset from a Django model with a dictionary mapping custom headers to attributes of your Django objects:

from django_tablib import ModelDataset
from myapp.models import MyModel

class MyModelDataset(ModelDataset):
    fields = [
        'boring_field_name',
        'id',
        'some_other_field',
    ]
    headers = {
        'boring_field_name': 'Awesome Descriptive Column Header',
    }
    class Meta:
        model = MyModel

data = MyModelDataset()

Add a new row:

>>> data.append(MyModel(**values))

Add a new column:

>>> data.append(col=['header', 'value1', 'value2' ... 'valuen'])

Delete a row:

>>> del data[1]

For everything else see the tablib documentation!

Django Integration

django_tablib now provides a generic Django view to automatically export your querysets to an Excel spreadsheet. In your urls.py:

(r'^export/$', 'django_tablib.views.export', {
    'model': MyModel,
})

If you have many models to export you may prefer use the generic export view:

  1. Add the view to urlpatterns in urls.py:

    url(r'export/(?P<model_name>[^/]+)/$', "django_tablib.views.generic_export"),
    
  2. Create the settings.TABLIB_MODELS dictionary using lower-case model names in "app.model" format as keys and the permitted field lookups or None as values:

    TABLIB_MODELS = {
        'myapp.simple': None,
        'myapp.related': {'simple__title': ('exact', 'iexact')},
    }
    
  3. Open /export/myapp.simple or /export/myapp.related/?simple__title__iexact=test