]> git.0d.be Git - django-panik-combo.git/blob - panikombo/views.py
4541dab97eb448fedf502854f6977c551d6e63a0
[django-panik-combo.git] / panikombo / views.py
1 from django.core.urlresolvers import reverse
2 from django.db.models import Q
3 from django.http import Http404, JsonResponse
4 from django.views.generic.edit import UpdateView
5 import django_select2.views
6
7 from emissions.models import SoundFile, Episode
8 from .models import Topik
9
10 class SoundFilesView(django_select2.views.AutoResponseView):
11     def get(self, request, *args, **kwargs):
12         terms = kwargs.get('term', request.GET.get('term', ''))
13         queryset = SoundFile.objects.all()
14         for term in terms.split():
15             queryset = queryset.filter(podcastable=True).filter(Q(title__icontains=term) |
16                     Q(episode__title__icontains=term) |
17                     Q(episode__emission__title__icontains=term))
18         def fmt(soundfile):
19             return '%s - %s - %s' % (soundfile.episode.emission.title,
20                     soundfile.episode.title,
21                     soundfile.title or soundfile.id)
22
23         return JsonResponse({
24             'results': [
25                 {
26                     'text': fmt(x),
27                     'id': x.pk,
28                 }
29                 for x in queryset
30                 ],
31             'more': False
32         })
33
34
35 soundfiles = SoundFilesView.as_view()
36
37
38 class EpisodesView(django_select2.views.AutoResponseView):
39     def get(self, request, *args, **kwargs):
40         terms = kwargs.get('term', request.GET.get('term', ''))
41         queryset = Episode.objects.all()
42         for term in terms.split():
43             queryset = queryset.filter(Q(title__icontains=term) |
44                     Q(emission__title__icontains=term))
45         def fmt(episode):
46             return '%s - %s' % (episode.emission.title, episode.title)
47
48         return JsonResponse({
49             'results': [
50                 {
51                     'text': fmt(x),
52                     'id': x.pk,
53                 }
54                 for x in queryset
55                 ],
56             'more': False
57         })
58
59
60 episodes = EpisodesView.as_view()
61
62
63 class TopikEdit(UpdateView):
64     model = Topik
65
66     def get_form_class(self):
67         from .forms import TopikEditForm
68         return TopikEditForm
69
70     def get_success_url(self):
71         return reverse('combo-manager-page-view', kwargs={'pk': self.object.page.id})
72
73 topik_edit = TopikEdit.as_view()