def user_blocks_view(request, user_id): user = get_object_or_404(User, id=user_id) if request.method == 'POST': userblockformset = UserBlockFormSet( request.POST, instance=user, user=user ) if userblockformset.is_valid(): if not userblockformset.has_changed(): messages.info(request, "No changes were made") else: for form in userblockformset: if form.has_changed(): block = form.save(commit=False) if 'DELETE' in form.changed_data: messages.success( request, mark_safe( 'Block <strong>{}</strong> has been ' 'deleted! Any bookings made with this ' 'block have been changed to unpaid. ' 'Please inform user {} ({})'.format( block, block.user.username, block.user.email ) ) ) ActivityLog.objects.create( log='Block {} (id {}) deleted by admin user {}'.format( form.instance, form.instance.id, request.user.username) ) block.delete() else: new = False if form.instance.id else True msg = 'created' if new else 'updated' messages.success( request, 'Block for {} has been {}'.format( block.block_type.event_type, msg ) ) block.save() ActivityLog.objects.create( log='Block id {} ({}), user {}, {}' ' by admin user {}'.format( block.id, block.block_type, block.user.username, msg, request.user.username ) ) userblockformset.save(commit=False) return HttpResponseRedirect( reverse('studioadmin:user_blocks_list', kwargs={'user_id': user.id} ) ) else: messages.error( request, mark_safe( "There were errors in the following fields:\n{}".format( '\n'.join( ["{}".format(error) for error in userblockformset.errors] ) ) ) ) else: queryset = Block.objects.filter( user=user).order_by('-start_date') userblockformset = UserBlockFormSet( instance=user, queryset=queryset, user=user ) template = 'studioadmin/user_block_list.html' return TemplateResponse( request, template, { 'userblockformset': userblockformset, 'user': user, 'sidenav_selection': 'users' } )