Favoritenfunktion! #55

This commit is contained in:
ben8
2025-04-11 18:18:34 +02:00
parent 04ce8104fe
commit 2a7e39bbd0
9 changed files with 220 additions and 12 deletions

View File

@@ -19,20 +19,22 @@ def overview_quiz(request):
# Filter
form = QuizFilterForm(request.GET)
try:
favorite_quizzes = QivipQuizFavorite.objects.filter(user=request.user, favorite=True)
favorite_quiz_ids = favorite_quizzes.values_list('quiz', flat=True)
favorite_quizzes_data = QivipQuizFavorite.objects.filter(user=request.user, favorite=True)
favorite_quiz_ids = favorite_quizzes_data.values_list('quiz', flat=True)
favorite_quizzes = QivipQuiz.objects.filter(id__in=favorite_quiz_ids)
except:
favorite_quizzes_data = QivipQuizFavorite.objects.none()
favorite_quizzes = QivipQuizFavorite.objects.none()
favorite_quiz_ids = favorite_quizzes.none()
favorite_quizzes = QivipQuiz.objects.none()
# Initialize querysets
if request.user.is_authenticated:
filter_my_quizzes = QivipQuiz.objects.filter(user_id=request.user).annotate(max_amout_questions=Count('questions'))
favorite_quizzes = QivipQuiz.objects.filter(id__in=favorite_quiz_ids).annotate(max_amout_questions=Count('questions'))
filter_other_quizzes = QivipQuiz.objects.exclude(user_id=request.user)
else:
favorite_quizzes = QivipQuiz.objects.none()
filter_my_quizzes = QivipQuiz.objects.none()
filter_other_quizzes = QivipQuiz.objects.all()
@@ -40,11 +42,49 @@ def overview_quiz(request):
filter_other_quizzes = filter_other_quizzes.annotate(max_amout_questions=Count('questions'))
filter_other_quizzes = filter_other_quizzes.filter(max_amout_questions__gte=1, status='öffentlich')
if form.is_valid():
search = form.cleaned_data.get('search')
username= form.cleaned_data.get('user')
max_amout_questions= form.cleaned_data.get('max_amout_questions')
min_amout_questions= form.cleaned_data.get('min_amout_questions')
filters = {}
if username:
try:
user = User.objects.get(username=username)
filters['user_id'] = user.id
except User.DoesNotExist:
favorite_quizzes = QivipQuiz.objects.none()
filter_my_quizzes = QivipQuiz.objects.none()
filter_other_quizzes=QivipQuiz.objects.none()
if search:
filters['name__icontains'] = search
if min_amout_questions:
filters['max_amout_questions__gte'] = min_amout_questions
if max_amout_questions:
filters['max_amout_questions__lte'] = max_amout_questions
try:
filter_other_quizzes = filter_other_quizzes.filter(**filters)
except:
filter_other_quizzes=QivipQuiz.objects.none()
try:
filter_my_quizzes = filter_my_quizzes.filter(**filters)
except:
filter_my_quizzes=QivipQuiz.objects.none()
try:
favorite_quizzes = favorite_quizzes.filter(**filters)
except:
favorite_quizzes=QivipQuiz.objects.none()
"""
if search: # Suche nach Namen
filter_other_quizzes = filter_other_quizzes.filter(name__icontains=search)
filter_my_quizzes = filter_my_quizzes.filter(name__icontains=search)
@@ -73,9 +113,9 @@ def overview_quiz(request):
filter_other_quizzes=filter_other_quizzes.exclude(user_id=request.user)
except:
filter_other_quizzes=filter_other_quizzes
"""
# Pagination for my quizzes
my_quizzes_paginator = Paginator(filter_my_quizzes.order_by('-creation_date'), 8) # 8 quizzes per page
try:
@@ -90,6 +130,19 @@ def overview_quiz(request):
except:
other_quizzes = other_quizzes_paginator.page(1)
# Pagination for favorite_quizzes
favorite_quizzes_paginator = Paginator(favorite_quizzes.order_by("-favorite_date"), 8) # 8 quizzes per page
try:
favorite_quizzes = favorite_quizzes_paginator.page(request.GET.get('my_page', 1))
except:
favorite_quizzes = favorite_quizzes_paginator.page(1)
context = {
'show_search': True,
'favorite_quiz_ids': favorite_quiz_ids,
@@ -100,23 +153,32 @@ def overview_quiz(request):
}
return render(request, 'library/overview_quiz.html', context)
# Neues Quiz erstellen
@login_required
def favorite_quiz(request, pk):
quiz= get_object_or_404(QivipQuiz, pk=pk)
favorite = QivipQuizFavorite.objects.filter(user=request.user, quiz=quiz).first()
if favorite:
favorite.favorite=not favorite.favorite
print(favorite.favorite)
favorite.save()
if favorite.favorite==True:
quiz.save(update_fields=['favorite_date'])
statement="Das Quiz '"+ favorite.quiz.name+ "' wurde erfolgreich zu den Favoriten hinzugefügt!"
messages.success(request,statement )
else:
statement="Das Quiz '"+ favorite.quiz.name+ "' wurde erfolgreich von den Favoriten entfernt!"
messages.error(request, statement)
else:
QivipQuizFavorite.objects.create(user=request.user, quiz=quiz, favorite=True)
return redirect('library:overview_quiz')
return redirect(request.META.get('HTTP_REFERER', 'library:overview_quiz'))
# Neues Quiz erstellen
@login_required