inital checkin

This commit is contained in:
2026-03-14 06:12:56 -05:00
commit 5f2a61ea75
35 changed files with 1401 additions and 0 deletions

80
raffle/views.py Normal file
View 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)