inital checkin
This commit is contained in:
80
raffle/views.py
Normal file
80
raffle/views.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.contrib.auth import login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.views.generic import CreateView, ListView, DetailView, UpdateView, DeleteView, View
|
||||
from django.urls import reverse_lazy
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
||||
from django.http import JsonResponse
|
||||
from .models import Item, Favorite
|
||||
from .forms import CustomUserCreationForm
|
||||
|
||||
class RegisterView(CreateView):
|
||||
form_class = CustomUserCreationForm
|
||||
template_name = 'registration/register.html'
|
||||
success_url = reverse_lazy('item_list')
|
||||
|
||||
def form_valid(self, form):
|
||||
response = super().form_valid(form)
|
||||
login(self.request, self.object)
|
||||
return response
|
||||
|
||||
class AuctioneerRequiredMixin(UserPassesTestMixin):
|
||||
def test_func(self):
|
||||
return self.request.user.is_authenticated and self.request.user.is_auctioneer
|
||||
|
||||
class ItemListView(LoginRequiredMixin, ListView):
|
||||
model = Item
|
||||
template_name = 'raffle/item_list.html'
|
||||
context_object_name = 'items'
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
favorites_only = self.request.GET.get('favorites')
|
||||
if favorites_only == '1':
|
||||
return qs.filter(favorited_by__user=self.request.user)
|
||||
return qs
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
user_favorites = Favorite.objects.filter(user=self.request.user).values_list('item_id', flat=True)
|
||||
context['user_favorites'] = list(user_favorites)
|
||||
return context
|
||||
|
||||
class ItemCreateView(AuctioneerRequiredMixin, CreateView):
|
||||
model = Item
|
||||
fields = ['item_number', 'title', 'description', 'picture']
|
||||
template_name = 'raffle/item_form.html'
|
||||
success_url = reverse_lazy('item_list')
|
||||
|
||||
class ItemUpdateView(AuctioneerRequiredMixin, UpdateView):
|
||||
model = Item
|
||||
fields = ['item_number', 'title', 'description', 'picture']
|
||||
template_name = 'raffle/item_form.html'
|
||||
success_url = reverse_lazy('item_list')
|
||||
|
||||
class ItemDeleteView(AuctioneerRequiredMixin, DeleteView):
|
||||
model = Item
|
||||
template_name = 'raffle/item_confirm_delete.html'
|
||||
success_url = reverse_lazy('item_list')
|
||||
|
||||
class ItemDetailView(AuctioneerRequiredMixin, DetailView):
|
||||
model = Item
|
||||
template_name = 'raffle/item_detail.html'
|
||||
context_object_name = 'item'
|
||||
|
||||
class ToggleFavoriteView(LoginRequiredMixin, View):
|
||||
def post(self, request, pk):
|
||||
try:
|
||||
item = Item.objects.get(pk=pk)
|
||||
favorite, created = Favorite.objects.get_or_create(user=request.user, item=item)
|
||||
if not created:
|
||||
favorite.delete()
|
||||
is_favorite = False
|
||||
else:
|
||||
is_favorite = True
|
||||
|
||||
# Count how many favorited
|
||||
count = item.favorited_by.count()
|
||||
return JsonResponse({'status': 'success', 'is_favorite': is_favorite, 'count': count})
|
||||
except Item.DoesNotExist:
|
||||
return JsonResponse({'status': 'error', 'message': 'Item not found'}, status=404)
|
||||
Reference in New Issue
Block a user