gulasch-r0mstore/roms/views.py

129 lines
3.3 KiB
Python

from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
from django.contrib.auth import get_user_model
from django.db.models import Q
from taggit.models import Tag
from dal import autocomplete
from roms.models import Rom
from roms.forms import RomCreateForm, RomUpdateForm
class RomList(ListView):
template_name = 'roms/list.html'
context_object_name = 'roms'
def get_queryset(self):
tag = self.kwargs.get('tag', None)
queryset = Rom.objects.all().filter(approved = True)
if tag != None:
queryset = queryset.filter(tags__slug = tag)
return queryset
def get_context_data(self, **kwargs):
context = super(RomList, self).get_context_data(**kwargs)
context['filter_tag'] = self.kwargs.get('tag', None)
context['tags'] = Tag.objects.all()
return context
class RomDetailView(DetailView):
pk_url_kwarg = 'id'
template_name = 'roms/details.html'
context_object_name = 'rom'
def get_queryset(self):
queryset = Rom.objects.all().filter(Q(approved = True) | Q(user__id = self.request.user.id))
return queryset
class RomCreateView(LoginRequiredMixin, CreateView):
model = Rom
form_class = RomCreateForm
template_name = 'roms/create.html'
def form_valid(self, form):
res = super(RomCreateView, self).form_valid(form)
self.object.user = self.request.user
self.object.save()
return res
class RomUpdateView(LoginRequiredMixin, UpdateView):
model = Rom
pk_url_kwarg = 'id'
form_class = RomUpdateForm
template_name = 'roms/update.html'
def get_queryset(self):
return Rom.objects.filter(user__id = self.request.user.id)
class TagAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
# Don't forget to filter out results depending on the visitor !
if not self.request.user.is_authenticated():
return Tag.objects.none()
qs = Tag.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
class RomListJson(ListView):
def get_queryset(self):
tag = self.kwargs.get('tag', None)
queryset = Rom.objects.all().filter(approved = True)
if tag != None:
queryset = queryset.filter(tags__slug = tag)
return queryset
def render_to_response(self, context, **response_kwargs):
queryset = self.get_queryset()
filter_tag = self.kwargs.get('tag', '')
json = {
'filter_tag' : filter_tag,
'tags': {},
'roms' : {},
}
for tag in Tag.objects.all():
json['tags'][tag.slug] = tag.name
for rom in queryset:
json['roms'][rom.id] = rom.name
return JsonResponse(json, **response_kwargs, safe=False)
class RomDetailViewJson(DetailView):
pk_url_kwarg = 'id'
def get_queryset(self):
queryset = Rom.objects.all().filter(approved = True)
return queryset
def render_to_response(self, context, **response_kwargs):
rom = self.get_object()
return JsonResponse(rom.to_json(), **response_kwargs, safe=False)