django-tablib is a helper library for Django that allows tablib datasets to be generated from Django models.
- 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.
The below examples are all based on this model: :
from django.db import models
class MyModel(models.Model):
myfield1 = models.TextField()
myfield2 = models.TextField()
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
# This dataset will have the fields 'id', 'myfield1' and 'myfield2'.
data = MyModelDataset()
Create a tablib Dataset from a Django model, including only certain, desired fields: :
from django_tablib import ModelDataset
from myapp.models import MyModel
class MyModelDataset(ModelDataset):
class Meta:
model = MyModel
fields = ['id', 'myfield1']
# This dataset will have the fields 'id', and 'myfield1'.
data = MyModelDataset()
Create a tablib Dataset from a Django model, excluding certain, undesired fields: :
from django_tablib import ModelDataset
from myapp.models import MyModel
class MyModelDataset(ModelDataset):
class Meta:
model = MyModel
exclude = ['myfield2']
# This dataset will have the fields 'id', and 'myfield1'.
data = MyModelDataset()
Create a tablib Dataset from a Django model declaratively specifying the fields to be used: :
from django_tablib import ModelDataset, Field
from myapp.models import MyModel
class MyModelDataset(ModelDataset):
myfield1 = Field()
myfield2 = Field()
class Meta:
model = MyModel
# This dataset will have the fields 'id', 'myfield1' and 'myfield2'.
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)
# This dataset will have the fields 'id', 'myfield1' and 'myfield2'.
data = MyModelDataset()
Create a tablib Dataset from a Django model declaratively specifying fields and their headers: :
from django_tablib import ModelDataset, Field
from myapp.models import MyModel
class MyModelDataset(ModelDataset):
myfield1 = Field(header='No More Boring Field Names!')
class Meta:
model = MyModel
# This dataset will have the fields 'id',
# 'No More Boring Field Names' and 'myfield2'.
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_tablib.views.export
django_tablib 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, })
- django_tablib.views.generic_export
If you have many models to export you may prefer use the generic export view:
Add the view to
urlpatterns
inurls.py
:url(r'export/(?P<model_name>[^/]+)/$', "django_tablib.views.generic_export"),
Create the
settings.TABLIB_MODELS
dictionary using lower-case model names in "app.model" format as keys and the permitted field lookups orNone
as values:TABLIB_MODELS = { 'myapp.simple': None, 'myapp.related': {'simple__title': ('exact', 'iexact')}, }
- Open
/export/myapp.simple
or/export/myapp.related/?simple__title__iexact=test
- django_tablib.admin.TablibAdmin
For easy exporting of your models directly from the Django admin, django_tablib now provides a ModelAdmin subclass giving you a button to export to Excel straight from the change list:
from django.contrib import admin from django_tablib.admin import TablibAdmin from myapp.models import MyModel class MyModelAdmin(TablibAdmin): formats = ['xls', 'json', 'yaml', 'csv', 'html',] admin.site.register(MyModel, MyModelAdmin)
You can also customize which fields from
MyModel
are used by supplying aheaders
list:from django.contrib import admin from django_tablib.admin import TablibAdmin from myapp.models import MyModel class MyModelAdmin(TablibAdmin): formats = ['xls', 'json', 'yaml', 'csv', 'html',] headers = ['field_one', 'field_two',] admin.site.register(MyModel, MyModelAdmin)
That's it!
django-tablib supports Django 1.8 and 1.9. 1.10 support is experimental. Older versions might work, but have not been actively tested.