diff --git a/django/library/forms.py b/django/library/forms.py index a56cfa8..e23cc6e 100644 --- a/django/library/forms.py +++ b/django/library/forms.py @@ -19,9 +19,11 @@ class QuizFilterForm(forms.Form): })) + min_amout_questions = forms.IntegerField(required=False, min_value=1, label="Minimale Anzahl an Fragen", widget=forms.NumberInput(attrs={ + 'class': 'border-2 border-gray-300 rounded-lg p-2 w-full' + })) - - max_amout_questions = forms.IntegerField(required=False, label="Maximale Anzahl an Fragen", widget=forms.NumberInput(attrs={ + max_amout_questions = forms.IntegerField(required=False, min_value=1, label="Maximale Anzahl an Fragen", widget=forms.NumberInput(attrs={ 'class': 'border-2 border-gray-300 rounded-lg p-2 w-full' })) user = forms.CharField(required=False, label="von User", widget=forms.TextInput(attrs={ diff --git a/django/library/views.py b/django/library/views.py index 81c291b..1c0fe62 100644 --- a/django/library/views.py +++ b/django/library/views.py @@ -14,68 +14,104 @@ from django.contrib.auth.models import User # Übersicht aller Quizze def overview_quiz(request): - - + #Filter form = QuizFilterForm(request.GET) - # GET statt POST für URL-Parameter + + try: + + filter_my_quizzes = QivipQuiz.objects.filter(user_id=request.user).annotate(max_amout_questions=Count('question')) + except: + filter_my_quizzes = QivipQuiz.objects.none() + + filter_other_quizzes = QivipQuiz.objects.annotate(max_amout_questions=Count('question')) - my_quizzes = QivipQuiz.objects.filter(user_id=request.user).annotate(max_amout_questions=Count('question')) - filter_quizzes = QivipQuiz.objects.annotate(max_amout_questions=Count('question')) # Frageanzahl berechnen + + 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') if search: # Suche nach Namen - filter_quizzes = filter_quizzes.filter(name__icontains=search) - my_quizzes = my_quizzes.filter(name__icontains=search) + filter_other_quizzes = filter_other_quizzes.filter(name__icontains=search) + filter_my_quizzes = filter_my_quizzes.filter(name__icontains=search) + + if min_amout_questions: + filter_other_quizzes = filter_other_quizzes.filter(max_amout_questions__gte=min_amout_questions) + try: + filter_my_quizzes =filter_my_quizzes.filter(max_amout_questions__gte=min_amout_questions) + except: + filter_my_quizzes = QivipQuiz.objects.none() + if max_amout_questions: - filter_quizzes = filter_quizzes.filter(max_amout_questions__lte=max_amout_questions) - my_quizzes = my_quizzes.filter(max_amout_questions__lte=max_amout_questions) + filter_other_quizzes = filter_other_quizzes.filter(max_amout_questions__lte=max_amout_questions) + try: + filter_my_quizzes =filter_my_quizzes.filter(max_amout_questions__lte=max_amout_questions) + except: + filter_my_quizzes = QivipQuiz.objects.none() + if username: try: user = User.objects.get(username=username) # Benutzer anhand des Namens holen - filter_quizzes = filter_quizzes.filter(user_id=user.id) - my_quizzes = my_quizzes.filter(user_id=user.id) # Nach der user_id filtern + filter_other_quizzes = filter_other_quizzes.filter(user_id=user.id) + filter_my_quizzes = filter_my_quizzes.filter(user_id=user.id) # Nach der user_id filtern except User.DoesNotExist: - filter_quizzes = QivipQuiz.objects.none() # Falls User nicht existiert, leere Query zurückgeben - my_quizzes = QivipQuiz.objects.none() - all_quizzes=filter_quizzes.exclude(user_id=request.user) - quizzes=my_quizzes - #WICHTIG: HIER sind all_quizzes nicht alle Quizze sondern die herausgefilterten Quizze + filter_other_quizzes = QivipQuiz.objects.none() # Falls User nicht existiert, leere Query zurückgeben + filter_my_quizzes = QivipQuiz.objects.none() + + try: + filter_other_quizzes=filter_other_quizzes.exclude(user_id=request.user) + except: + filter_other_quizzes=filter_other_quizzes + + my_paginator = Paginator(filter_my_quizzes, 3) # 3 Quiz pro Seite + my_page_number = request.GET.get('my_page') + filter_my_quizzes = my_paginator.get_page(my_page_number) + + # Paginator für fremde Quizze + other_paginator = Paginator(filter_other_quizzes, 3) # 3 Quiz pro Seite + other_page_number = request.GET.get('other_page') + filter_other_quizzes = other_paginator.get_page(other_page_number) + + + context = { 'show_search': True, - 'quizzes': quizzes, - 'all_quizzes': all_quizzes, + 'filter_my_quizzes': filter_my_quizzes, + 'filter_other_quizzes': filter_other_quizzes, 'form': form, } + + return render(request, 'library/overview_quiz.html', context) try: - quizzes = QivipQuiz.objects.filter(user_id=request.user) - all_quizzes = QivipQuiz.objects.filter(status='öffentlich').exclude(user_id=request.user).filter(question__isnull=False).distinct() + filter_my_quizzes = QivipQuiz.objects.filter(user_id=request.user) + filter_other_quizzes = QivipQuiz.objects.filter(status='öffentlich').exclude(user_id=request.user).filter(question__isnull=False).distinct() context = { 'show_search': True, - 'quizzes': quizzes, - 'all_quizzes': all_quizzes, + 'filter_my_quizzes': filter_my_quizzes, + 'filter_other_quizzes': filter_other_quizzes, 'form': form, } return render(request, 'library/overview_quiz.html', context) except: - all_quizzes = QivipQuiz.objects.filter(status='öffentlich').filter(question__isnull=False).distinct() + filter_other_quizzes = QivipQuiz.objects.filter(status='öffentlich').filter(question__isnull=False).distinct() context = { 'show_search': True, - 'quizzes': None, - 'all_quizzes': all_quizzes, + 'filter_my_quizzes': None, + 'filter_other_quizzes': filter_other_quizzes, 'form': form, } return render(request, 'library/overview_quiz.html', context) + # Neues Quiz erstellen @login_required def new_quiz(request): diff --git a/django/templates/library/overview_quiz.html b/django/templates/library/overview_quiz.html index 8145a01..f3a2bef 100644 --- a/django/templates/library/overview_quiz.html +++ b/django/templates/library/overview_quiz.html @@ -2,20 +2,20 @@ {% block content %} -
{{ quiz.description }}
Status: {{ quiz.status }}
@@ -54,15 +54,17 @@
{% endif %}