import csv
from django.http import HttpResponse
def prep_field(obj, field):
""" Returns the field as a unicode string. If the field is a callable, it
attempts to call it first, without arguments.
"""
if '__' in field:
bits = field.split('__')
field = bits.pop()
for bit in bits:
obj = getattr(obj, bit, None)
if obj is None:
return ""
attr = getattr(obj, field)
output = attr() if callable(attr) else attr
return unicode(output).encode('utf-8') if output else ""
def export_csv_action(description="Export as CSV", fields=None, exclude=None, header=True):
""" This function returns an export csv action. """
def export_as_csv(modeladmin, request, queryset):
""" Generic csv export admin action.
Based on http://djangosnippets.org/snippets/2712/
"""
opts = modeladmin.model._meta
field_names = [field.name for field in opts.fields]
labels = []
if exclude:
field_names = [f for f in field_names if f not in exclude]
elif fields:
field_names = [field for field, _ in fields]
labels = [label for _, label in fields]
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s.csv' % (
unicode(opts).replace('.', '_')
)
writer = csv.writer(response)
if header:
writer.writerow(labels if labels else field_names)
for obj in queryset:
writer.writerow([prep_field(obj, field) for field in field_names])
return response
export_as_csv.short_description = description
return export_as_csv
## Example Usage
from django.contrib import admin
class ExampleModelAdmin(admin.ModelAdmin):
raw_id_fields = ('field1',)
list_display = ('field1', 'field2', 'field3',)
actions = [
export_csv_action("Export Sepecial Report",
fields=[
('field1', 'label1'),
('foreign_key1__foreign_key2__name', 'label2'),
('field3', 'label3'),
],
header=True
),
]
admin.site.register(ExampleMode, ExampleModelAdmin)
Comments
This snippet is very good. Vous pouvez acheter une cigarette electronique sur internet.
#
it's a very good snippet, working very well, good job. veuillez consulter Boutique de cigarette electronique
#
Partez en [HTML_REMOVED]s[HTML_REMOVED]jour linguistique [HTML_REMOVED] Malte[HTML_REMOVED] avec AILS séjour linguistique ;)
#
Great snipper, I used it on my site to acheter une cigarette electronique en ligne works great !
#
Fumer sans risque ? Visitez notre boutique cigarette électronique pour obtenir le nécessaire. Optez pour une cigarette electronique eRoll et du e-liquide saveur régulier par exemple en découvrant nos gammes de produits.
#