Spaces:
Runtime error
Runtime error
from django.http import JsonResponse, HttpResponse | |
from django.views.decorators.csrf import csrf_exempt | |
from .models import Game, Registration | |
from django.db.models import Q | |
import json | |
import pandas as pd # Import pandas for Excel file creation | |
from django.utils import timezone | |
def get_games(request): | |
""" | |
API to fetch games based on gender, including common games. | |
""" | |
gender = request.GET.get('gender') # Get gender from query params | |
games = Game.objects.filter(Q(gender=gender) | Q(gender='common')).values('id', 'name') | |
return JsonResponse(list(games), safe=False) | |
def register(request, game_name): | |
""" | |
API to handle registration using game name and gender from form data. | |
""" | |
if request.method == 'POST': | |
try: | |
# Parse JSON data from the request body | |
data = json.loads(request.body) | |
gender = data.get('gender') # Get gender from the request body | |
# Construct the full game name with gender suffix | |
full_game_name = f"{game_name}_{gender}" | |
# Fetch the game by full name | |
game = Game.objects.get(name=full_game_name) | |
# Create a new registration | |
registration = Registration.objects.create( | |
name=data.get('name'), | |
email=data.get('email'), | |
enrollment=data.get('enrollment'), | |
age=data.get('age'), | |
gender=gender, | |
department=data.get('department'), | |
semester=data.get('semester'), | |
game=game # Associate the registration with the selected game | |
) | |
# Return success response | |
return JsonResponse({ | |
'status': 'success', | |
'message': 'Registration successful!', | |
'game': game.name, | |
'gender': game.get_gender_display() | |
}, status=201) | |
except Game.DoesNotExist: | |
return JsonResponse({ | |
'status': 'error', | |
'message': f'Game "{full_game_name}" not found!' | |
}, status=404) | |
except Exception as e: | |
return JsonResponse({ | |
'status': 'error', | |
'message': str(e) | |
}, status=400) | |
return JsonResponse({ | |
'status': 'error', | |
'message': 'Invalid request method. Only POST is allowed.' | |
}, status=405) | |
def get_filtered_registrations(request): | |
""" | |
API to fetch filtered registrations based on department, game, gender, and division. | |
""" | |
# Get filter parameters from the request | |
department = request.GET.get('department') | |
game_name = request.GET.get('game_name') # Changed from game_id to game_name | |
gender = request.GET.get('gender') | |
division = request.GET.get('division') # Add this field if needed | |
# Build the query using Q objects | |
query = Q() | |
if department: | |
query &= Q(department=department) | |
if game_name: | |
# Check for both male and female versions of the game | |
game_name_male = f"{game_name}_Male" | |
game_name_female = f"{game_name}_Female" | |
query &= Q(game__name__in=[game_name_male, game_name_female]) | |
if gender: | |
query &= Q(gender=gender) | |
if division: | |
query &= Q(division=division) # Add this field if needed | |
# Fetch filtered registrations | |
registrations = Registration.objects.filter(query).values( | |
'name', 'email', 'enrollment', 'age', 'gender', 'department', 'semester', 'game__name', 'registration_date' | |
) | |
return JsonResponse(list(registrations), safe=False) | |
def download_excel(request): | |
""" | |
API to download filtered registrations as an Excel file. | |
""" | |
# Get filter parameters from the request | |
department = request.GET.get('department') | |
game_name = request.GET.get('game_name') # Filter by game name | |
gender = request.GET.get('gender') | |
# Build the query using Q objects | |
query = Q() | |
if department: | |
query &= Q(department=department) | |
if game_name: # Filter by game name | |
query &= Q(game__name__icontains=game_name) # case-insensitive match on game name | |
if gender: | |
query &= Q(gender=gender) | |
# Fetch filtered registrations | |
registrations = Registration.objects.filter(query).values( | |
'name', 'email', 'enrollment', 'age', 'gender', 'department', 'semester', 'game__name', 'registration_date' | |
) | |
# Convert queryset to DataFrame | |
df = pd.DataFrame(list(registrations)) | |
# Remove the registration date column | |
df = df.drop(columns=['registration_date']) | |
# Replace game names (e.g., "football_Female" => "Football") | |
df['game__name'] = df['game__name'].str.replace('_', ' ').str.replace(r'(.*)(Male|Female)$', r'\1', regex=True).str.title() | |
# Create Excel file in memory | |
excel_file = HttpResponse(content_type='application/vnd.ms-excel') | |
excel_file['Content-Disposition'] = 'attachment; filename=registrations.xlsx' | |
df.to_excel(excel_file, index=False) | |
return excel_file | |