def test_event_formset_valid(self): formset = EventFormSet(data=self.formset_data()) self.assertTrue(formset.is_valid())
def event_admin_list(request, ev_type): ev_type_abbreviation = 'EV' if ev_type == 'events' else 'CL' ev_type_text = 'workshop' if ev_type == 'events' else 'class' queryset = Event.objects.filter( event_type__event_type=ev_type_abbreviation, date__gte=timezone.now() ).order_by('date') events = True if queryset.count() > 0 else False show_past = False if request.method == 'POST': if "past" in request.POST: queryset = Event.objects.filter( event_type__event_type=ev_type_abbreviation, date__lte=timezone.now() ).order_by('date') events = True if queryset.count() > 0 else False show_past = True eventformset = EventFormSet(queryset=queryset) elif "upcoming" in request.POST: queryset = queryset show_past = False eventformset = EventFormSet(queryset=queryset) else: eventformset = EventFormSet(request.POST) if eventformset.is_valid(): if not eventformset.has_changed(): messages.info(request, "No changes were made") else: for form in eventformset: if form.has_changed(): if 'DELETE' in form.changed_data: messages.success( request, mark_safe( '{} <strong>{}</strong> has been deleted!'.format( ev_type_text.title(), form.instance, ) ) ) ActivityLog.objects.create( log='{} {} (id {}) deleted by admin user {}'.format( ev_type_text.title(), form.instance, form.instance.id, request.user.username ) ) else: for field in form.changed_data: messages.success( request, mark_safe( "<strong>{}</strong> updated for " "<strong>{}</strong>".format( field.title().replace("_", " "), form.instance)) ) ActivityLog.objects.create( log='{} {} (id {}) updated by admin ' 'user {}: field_changed: ' '{}'.format( ev_type_text.title(), form.instance, form.instance.id, request.user.username, field.title().replace("_", " ") ) ) form.save() for error in form.errors: messages.error(request, mark_safe("{}".format(error))) eventformset.save() return HttpResponseRedirect( reverse('studioadmin:{}'.format(ev_type),) ) else: messages.error( request, mark_safe( "There were errors in the following fields:\n{}".format( '\n'.join( ["{}".format(error) for error in eventformset.errors] ) ) ) ) else: eventformset = EventFormSet(queryset=queryset) return render( request, 'studioadmin/admin_events.html', { 'eventformset': eventformset, 'type': ev_type, 'events': events, 'sidenav_selection': ev_type, 'show_past': show_past, } )
def event_admin_list(request, ev_type): if ev_type == 'events': ev_type_text = 'event' events = Event.objects.select_related('event_type').filter( event_type__event_type='EV', date__gte=timezone.now() - timedelta(hours=1) ).order_by('date') else: ev_type_text = 'class' events = Event.objects.select_related('event_type').filter( date__gte=timezone.now() - timedelta(hours=1) ).exclude(event_type__event_type='EV').order_by('date') show_past = False if request.method == 'POST': if "past" in request.POST: show_past = True events, eventformset = _get_past_events(ev_type, request) elif "upcoming" in request.POST: show_past = False eventformset = EventFormSet(queryset=events) else: eventformset = EventFormSet(request.POST) if eventformset.is_valid(): if not eventformset.has_changed(): messages.info(request, "No changes were made") else: for form in eventformset: if form.has_changed(): if 'DELETE' in form.changed_data: messages.success( request, mark_safe( '{} <strong>{}</strong> has been deleted!'.format( ev_type_text.title(), form.instance, ) ) ) ActivityLog.objects.create( log='{} {} (id {}) deleted by admin user {}'.format( ev_type_text.title(), form.instance, form.instance.id, request.user.username ) ) else: for field in form.changed_data: messages.success( request, mark_safe( "<strong>{}</strong> updated for " "<strong>{}</strong>".format( field.title().replace("_", " "), form.instance)) ) ActivityLog.objects.create( log='{} {} (id {}) updated by admin user {}: field_changed: {}'.format( ev_type_text.title(), form.instance, form.instance.id, request.user.username, field.title().replace("_", " ") ) ) form.save() eventformset.save() return HttpResponseRedirect( reverse('studioadmin:{}'.format(ev_type),) ) else: # pragma: no cover # currently only boolean fields, this is left here in case of # future additional fields messages.error( request, mark_safe( "There were errors in the following fields:\n{}".format( '\n'.join( [ "{}".format(error) for error in eventformset.errors ] ) ) ) ) else: page = request.GET.get('page') # only past is paginated if page: show_past = True events, eventformset = _get_past_events(ev_type, request) else: eventformset = EventFormSet(queryset=events) non_deletable_events = Booking.objects.select_related('event').filter(event__in=events).distinct().values_list('event__id', flat=True) return TemplateResponse( request, 'studioadmin/admin_events.html', { 'eventformset': eventformset, 'type': ev_type, 'events': events, 'sidenav_selection': ev_type, 'show_past': show_past, 'non_deletable_events': non_deletable_events } )