You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.2 KiB

from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import redirect
from django.views import View
from django.views.generic import ListView, UpdateView, CreateView
from django.views.generic.detail import SingleObjectMixin
from aggregator.forms import AggregationSourceForm, AggregationSourceEditForm
from aggregator.models import AggregationSource
from cabinet.utils import CabinetViewMixin
class AggregationSourceListView(CabinetViewMixin, ListView):
template_name = 'cabinet/aggregator/source_list.html'
title = 'Aggregation source list'
sidebar_section = 'aggregator'
def get_queryset(self):
return AggregationSource.objects.filter(owner=self.request.user)
class AggregationSourceCreateView(CabinetViewMixin, CreateView):
template_name = 'cabinet/aggregator/source_form.html'
title = 'Create aggregation source'
sidebar_section = 'aggregator'
form_class = AggregationSourceForm
def form_valid(self, form):
form.instance.owner = self.request.user
form.instance.chat_id = form.cleaned_data['chat_id']
form.save()
return redirect('cabinet:aggregator:edit', pk=form.instance.pk)
class AggregationSourceUpdateView(CabinetViewMixin, UpdateView):
template_name = 'cabinet/aggregator/source_form.html'
title = 'Configure aggregation source'
sidebar_section = 'aggregator'
form_class = AggregationSourceEditForm
context_object_name = 'source'
def get_queryset(self):
return AggregationSource.objects.filter(owner=self.request.user)
def form_valid(self, form):
if 'chat_id' in form.cleaned_data:
form.instance.chat_id = form.cleaned_data['chat_id']
form.save()
return redirect('cabinet:aggregator:edit', pk=form.instance.pk)
class AggregationSourceDeleteView(LoginRequiredMixin, SingleObjectMixin, View):
def get_queryset(self):
return AggregationSource.objects.filter(owner=self.request.user)
def post(self, request, *args, **kwargs):
source = self.get_object()
messages.success(self.request, 'Source "{}" was successfully deleted'.format(source.title))
source.delete()
return redirect('cabinet:aggregator:index')