diff --git a/django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py b/django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py new file mode 100644 index 0000000..8d92ed4 --- /dev/null +++ b/django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.1.7 on 2025-04-11 16:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0044_remove_qivipquizfavorite_favorite_date_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='qivipquiz', + name='favorite_date', + ), + migrations.AddField( + model_name='qivipquizfavorite', + name='favorite_date', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py b/django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py new file mode 100644 index 0000000..e08ca9d --- /dev/null +++ b/django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.7 on 2025-04-11 16:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0045_remove_qivipquiz_favorite_date_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquizfavorite', + name='favorite_date', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/django/library/models.py b/django/library/models.py index b1769b0..1477a3d 100644 --- a/django/library/models.py +++ b/django/library/models.py @@ -39,7 +39,6 @@ class QivipQuiz(models.Model): credits=models.TextField(blank=True, editable=True) average_rating = models.FloatField(default=3.0) rating_count = models.IntegerField(default=0) - favorite_date=models.DateTimeField(auto_now=True) def __str__(self): return self.name @@ -48,7 +47,7 @@ class QivipQuizFavorite(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # Verknüpfung zu User quiz = models.ForeignKey(QivipQuiz, on_delete=models.CASCADE, related_name='favorites') # Verknüpfung zu Quiz favorite = models.BooleanField(default=False) # Favoritenstatus - + favorite_date = models.DateTimeField(null=True, blank=True) class Meta: unique_together = ('user', 'quiz') # Sicherstellen, dass es nur ein Favorit pro User und Quiz gibt diff --git a/django/library/views.py b/django/library/views.py index 565709e..7baeef4 100644 --- a/django/library/views.py +++ b/django/library/views.py @@ -1,3 +1,4 @@ +from django.utils import timezone import uuid from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render, redirect, get_object_or_404 @@ -19,7 +20,7 @@ def overview_quiz(request): # Filter form = QuizFilterForm(request.GET) try: - favorite_quizzes_data = QivipQuizFavorite.objects.filter(user=request.user, favorite=True) + favorite_quizzes_data = QivipQuizFavorite.objects.filter(user=request.user, favorite=True).order_by("-favorite_date") favorite_quiz_ids = favorite_quizzes_data.values_list('quiz', flat=True) favorite_quizzes = QivipQuiz.objects.filter(id__in=favorite_quiz_ids) except: @@ -31,7 +32,7 @@ def overview_quiz(request): # 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')) + favorite_quizzes = favorite_quizzes.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() @@ -137,7 +138,7 @@ def overview_quiz(request): # Pagination for favorite_quizzes - favorite_quizzes_paginator = Paginator(favorite_quizzes.order_by("-favorite_date"), 8) # 8 quizzes per page + favorite_quizzes_paginator = Paginator(favorite_quizzes, 8) # 8 quizzes per page try: favorite_quizzes = favorite_quizzes_paginator.page(request.GET.get('my_page', 1)) except: @@ -163,19 +164,22 @@ def favorite_quiz(request, pk): if favorite: favorite.favorite=not favorite.favorite - favorite.save() + if favorite.favorite==True: - quiz.save(update_fields=['favorite_date']) + favorite.favorite_date = timezone.now() + statement="Das Quiz '"+ favorite.quiz.name+ "' wurde erfolgreich zu den Favoriten hinzugefügt!" messages.success(request,statement ) else: + favorite.favorite_date = None + statement="Das Quiz '"+ favorite.quiz.name+ "' wurde erfolgreich von den Favoriten entfernt!" messages.error(request, statement) - + favorite.save() else: - QivipQuizFavorite.objects.create(user=request.user, quiz=quiz, favorite=True) + QivipQuizFavorite.objects.create(user=request.user, quiz=quiz, favorite=True, favorite_date=timezone.now()) return redirect(request.META.get('HTTP_REFERER', 'library:overview_quiz'))