actions: add column containing id of objects for objectdata

This commit is contained in:
Benjamin Dauvergne 2013-09-26 11:54:56 +02:00
parent 26cdba197b
commit ce45ccac9c
2 changed files with 18 additions and 4 deletions

View File

@ -3,6 +3,7 @@ import csv
from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponse
from django.core import exceptions
from . import models
@ -10,6 +11,8 @@ from . import models
def export_as_csv_generator(queryset):
header = ['time', 'tag', 'message']
tags = set(models.Tag.objects.filter(objectdata__journal__in=queryset).values_list('name', flat=True))
for tag in list(tags):
tags.add('%s__id' % tag)
tags |= set(models.Tag.objects.filter(stringdata__journal__in=queryset).values_list('name', flat=True))
extra_headers = map(lambda s: s.encode('utf-8'), sorted(tags))
yield header+extra_headers
@ -20,9 +23,15 @@ def export_as_csv_generator(queryset):
'message': unicode(journal).encode('utf-8'),
}
for stringdata in journal.stringdata_set.all():
row[stringdata.tag.name.encode('utf-8')] = stringdata.content.encode('utf-8')
row_name = stringdata.tag.name.encode('utf-8')
row[row_name] = stringdata.content.encode('utf-8')
for objectdata in journal.objectdata_set.all():
row[objectdata.tag.name.encode('utf-8')] = str(objectdata.object_id)
row_name = objectdata.tag.name.encode('utf-8')
row[row_name+'__id'] = str(objectdata.object_id)
if objectdata.content_object is None:
row[row_name] = '<deleted>'
else:
row[row_name] = unicode(objectdata.content_object).encode('utf-8')
yield row
def export_as_csv(modeladmin, request, queryset):

View File

@ -45,7 +45,12 @@ class JournalTestCase(TestCase):
def test_export_as_csv(self):
qs = models.Journal.objects.all()
l = list(actions.export_as_csv_generator(qs))
assert l[0] == ['time', 'tag', 'message', 'group', 'user', 'user1', 'user2']
self.assertEquals(set(l[0]), set(['time', 'tag', 'message', 'group', 'group__id', 'user', 'user__id', 'user1', 'user1__id', 'user2', 'user2__id']))
l = list(actions.export_as_csv_generator(qs[:5]))
assert l[0] == ['time', 'tag', 'message', 'user']
self.assertEquals(set(l[0]), set(['time', 'tag', 'message', 'user', 'user__id']))
for user in self.users:
user.delete()
qs = models.Journal.objects.all()
l = list(actions.export_as_csv_generator(qs))
self.assertEquals(l[1]['user'], '<deleted>')