Skip to content

Commit ab3731d

Browse files
Fix CSV Export Returns 500 Error (#1267)
* Fix CSV Export Returns 500 Error * refactor minor fixes * fix logging usage --------- Co-authored-by: Mario Behling <[email protected]>
1 parent 54f1945 commit ab3731d

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

app/eventyay/orga/forms/export.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,7 @@ def _build_question_fields(self):
7979
def clean(self):
8080
data = super().clean()
8181
if data.get('export_format') == 'csv' and 'data_delimiter' in self.fields and not data.get('data_delimiter'):
82-
self.add_error(
83-
'data_delimiter',
84-
forms.ValidationError(_('Please select a delimiter for your CSV export.')),
85-
)
82+
data['data_delimiter'] = 'comma'
8683
return data
8784

8885
def get_object_attribute(self, obj, attribute):
@@ -137,7 +134,7 @@ def csv_export(self, data):
137134
for row in data:
138135
for key, value in row.items():
139136
if isinstance(value, list):
140-
row[key] = delimiter.join(value)
137+
row[key] = delimiter.join(str(item) for item in value if item is not None)
141138

142139
output = StringIO()
143140
writer = csv.DictWriter(output, fieldnames=data[0].keys())

app/eventyay/orga/forms/schedule.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import logging
12
from django import forms
3+
from django.db.models import Prefetch
24
from django.utils.functional import cached_property
35
from django.utils.translation import gettext_lazy as _
46
from i18nfield.forms import I18nModelForm
@@ -14,6 +16,9 @@
1416
from eventyay.base.models.submission import Submission, SubmissionStates
1517

1618

19+
logger = logging.getLogger(__name__)
20+
21+
1722
class ScheduleReleaseForm(I18nHelpText, I18nModelForm):
1823
default_renderer = InlineFormRenderer
1924

@@ -177,9 +182,13 @@ def get_queryset(self):
177182
queryset = self.event.submissions
178183
if 'all' not in target:
179184
queryset = queryset.filter(state__in=target)
185+
queryset = queryset.prefetch_related(
186+
Prefetch('slots', queryset=TalkSlot.objects.select_related('room', 'schedule'))
187+
)
188+
180189
return (
181-
queryset.prefetch_related('tags')
182-
.select_related('submission_type', 'track')
190+
queryset.prefetch_related('tags', 'speakers')
191+
.select_related('submission_type', 'track', 'event')
183192
.prefetch_related('resources')
184193
.order_by('code')
185194
)
@@ -188,10 +197,19 @@ def get_answer(self, question, obj):
188197
return question.answers.filter(submission=obj).first()
189198

190199
def _get_speaker_ids_value(self, obj):
191-
return list(obj.speakers.all().values_list('code', flat=True))
200+
codes = []
201+
for code in obj.speakers.all().values_list('code', flat=True):
202+
if not code:
203+
logger.warning(
204+
"Speaker for submission %s is missing a code.",
205+
getattr(obj, 'id', obj),
206+
)
207+
else:
208+
codes.append(code)
209+
return codes
192210

193211
def _get_speaker_names_value(self, obj):
194-
return list(obj.speakers.all().values_list('fullname', flat=True))
212+
return [name for name in obj.speakers.all().values_list('fullname', flat=True) if name]
195213

196214
def _get_room_value(self, obj):
197215
slot = obj.slot

0 commit comments

Comments
 (0)