| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from django.shortcuts import render, redirect
- from django.views.generic import TemplateView
- from django.contrib import messages as flash_messages
- from django.db import transaction
- from . import models
- import json
- #import logging
- #logger = logging.getLogger('console')
- class FeedCategoryImportExcelView(TemplateView):
- template_name = 'feed_content/feed_category_import_excel.html'
- final_breadcrumb = 'Import'
- def get_view_title(self):
- return 'Import {0} from Excel'.format(self.get_object().name)
- def post(self, request, *args, **kwargs):
- try:
- viewset = self.viewset
- category = self.get_object()
- messages_json = request.POST.get('messages_json', '').strip()
- if messages_json == '':
- raise RuntimeError('No import data was specified.')
- messages = json.loads(messages_json)
- messages_to_import = []
- expected_day = 1
- for message in messages:
- day = int(message['day'])
- message_text = message['message_text'].strip()
- if day != expected_day:
- raise RuntimeError('Expected day {0} but got day {1}.'.format(expected_day, day))
- if message_text == '':
- raise RuntimeError('Message for day {0} is blank.'.format(day))
- messages_to_import.append({'day': day, 'message_text': message_text})
- expected_day += 1
- if not messages_to_import:
- raise RuntimeError('No import data was specified.')
- with transaction.atomic():
- models.FeedItem.objects.filter(feed_category=category).delete()
- for message in messages_to_import:
- models.FeedItem.objects.create(
- feed_category=category,
- day_number=message['day'],
- message_text=message['message_text']
- )
- flash_messages.add_message(request, flash_messages.SUCCESS, 'Import succeeded.');
- except Exception as e:
- flash_messages.add_message(request, flash_messages.ERROR, 'IMPORT FAILED: {0}'.format(e.message))
- return redirect(viewset.get_view_url(viewset.instance_breadcrumb_view_type, self, request.GET, self.get_object()))
|