Nav apraksta

views.py 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.shortcuts import render, redirect
  4. from django.views.generic import TemplateView
  5. from django.contrib import messages as flash_messages
  6. from django.db import transaction
  7. from . import models
  8. import json
  9. #import logging
  10. #logger = logging.getLogger('console')
  11. class FeedCategoryImportExcelView(TemplateView):
  12. template_name = 'feed_content/feed_category_import_excel.html'
  13. final_breadcrumb = 'Import'
  14. def get_view_title(self):
  15. return 'Import {0} from Excel'.format(self.get_object().name)
  16. def post(self, request, *args, **kwargs):
  17. try:
  18. viewset = self.viewset
  19. category = self.get_object()
  20. messages_json = request.POST.get('messages_json', '').strip()
  21. if messages_json == '':
  22. raise RuntimeError('No import data was specified.')
  23. messages = json.loads(messages_json)
  24. messages_to_import = []
  25. expected_day = 1
  26. for message in messages:
  27. day = int(message['day'])
  28. message_text = message['message_text'].strip()
  29. if day != expected_day:
  30. raise RuntimeError('Expected day {0} but got day {1}.'.format(expected_day, day))
  31. if message_text == '':
  32. raise RuntimeError('Message for day {0} is blank.'.format(day))
  33. messages_to_import.append({'day': day, 'message_text': message_text})
  34. expected_day += 1
  35. if not messages_to_import:
  36. raise RuntimeError('No import data was specified.')
  37. with transaction.atomic():
  38. models.FeedItem.objects.filter(feed_category=category).delete()
  39. for message in messages_to_import:
  40. models.FeedItem.objects.create(
  41. feed_category=category,
  42. day_number=message['day'],
  43. message_text=message['message_text']
  44. )
  45. flash_messages.add_message(request, flash_messages.SUCCESS, 'Import succeeded.');
  46. except Exception as e:
  47. flash_messages.add_message(request, flash_messages.ERROR, 'IMPORT FAILED: {0}'.format(e.message))
  48. return redirect(viewset.get_view_url(viewset.instance_breadcrumb_view_type, self, request.GET, self.get_object()))