1+ import logging
12from django import forms
3+ from django .db .models import Prefetch
24from django .utils .functional import cached_property
35from django .utils .translation import gettext_lazy as _
46from i18nfield .forms import I18nModelForm
1416from eventyay .base .models .submission import Submission , SubmissionStates
1517
1618
19+ logger = logging .getLogger (__name__ )
20+
21+
1722class 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