diff options
| author | Étienne Loks <etienne.loks@peacefrogs.net> | 2013-04-23 00:27:33 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2013-04-23 00:27:33 +0200 |
| commit | 2860fd0cf740783bfe666ba969c023ccbce9ef5e (patch) | |
| tree | 3385139362f098ea3de5148356a59eb12de2abe5 | |
| parent | bb5d66ee68c4119c78d7a054180cce71be359fe4 (diff) | |
| download | Chimère-2860fd0cf740783bfe666ba969c023ccbce9ef5e.tar.bz2 Chimère-2860fd0cf740783bfe666ba969c023ccbce9ef5e.zip | |
Allow generalization of CSV export
| -rw-r--r-- | chimere/admin.py | 20 | ||||
| -rw-r--r-- | chimere/utils.py | 10 |
2 files changed, 19 insertions, 11 deletions
diff --git a/chimere/admin.py b/chimere/admin.py index c36fd26..d492a4c 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -84,14 +84,18 @@ def export_to_shapefile(modeladmin, request, queryset): return response export_to_shapefile.short_description = _(u"Export to Shapefile") -def export_to_csv(modeladmin, request, queryset): - u""" - Export data to CSV - """ - filename, result = CSVManager.export(queryset) - response = HttpResponse(result, mimetype='text/csv') - response['Content-Disposition'] = 'attachment; filename=%s' % filename - return response +def _export_to_csv(cols=[]): + def func(modeladmin, request, queryset): + u""" + Export data to CSV + """ + filename, result = CSVManager.export(queryset, cols=cols) + response = HttpResponse(result, mimetype='text/csv') + response['Content-Disposition'] = 'attachment; filename=%s' % filename + return response + return func + +export_to_csv = _export_to_csv() export_to_csv.short_description = _(u"Export to CSV") def managed_modified(modeladmin, request, queryset): diff --git a/chimere/utils.py b/chimere/utils.py index f5bc44f..028da06 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -554,10 +554,11 @@ class CSVManager(ImportManager): return (new_item, updated_item, msg) @classmethod - def export(cls, queryset): + def export(cls, queryset, cols=[]): dct = {'description':unicode(datetime.date.today()), 'data':[]} cls_name = queryset.model.__name__.lower() - cols = list(cls.COLS) + if not cols: + cols = list(cls.COLS) for pm in queryset.model.all_properties(): cols.append((pm.name, pm.getAttrName(), pm.getAttrName()+'_set')) header = [col[0] for col in cols] @@ -568,7 +569,10 @@ class CSVManager(ImportManager): if callable(attr): data.append(attr(item)) else: - data.append(getattr(item, attr)) + v = getattr(item, attr) + if v == None: + v = '' + data.append(v) dct['data'].append(data) filename = unicode_normalize(settings.PROJECT_NAME + dct['description']\ + '.csv') |
