diff --git a/django/library/forms.py b/django/library/forms.py index dc78d02..a56cfa8 100644 --- a/django/library/forms.py +++ b/django/library/forms.py @@ -9,4 +9,22 @@ class QuizForm(forms.ModelForm): class QuestionForm(forms.ModelForm): class Meta: model = QivipQuestion - fields = ['quiz_id', 'data'] \ No newline at end of file + fields = ['quiz_id', 'data'] + +from django import forms + +class QuizFilterForm(forms.Form): + search = forms.CharField(required=False, label="Suche", widget=forms.TextInput(attrs={ + 'class': 'flex flex-grow rounded-lg p-2' ,'placeholder': 'Suche ...', + })) + + + + + max_amout_questions = forms.IntegerField(required=False, 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={ + 'class': 'border-2 border-gray-300 rounded-lg p-2 w-full' + })) + diff --git a/django/library/views.py b/django/library/views.py index 37ffdaf..81c291b 100644 --- a/django/library/views.py +++ b/django/library/views.py @@ -7,18 +7,75 @@ from .models import QivipQuiz, QivipQuestion from .forms import QuizForm, QuestionForm import json from django.core.paginator import Paginator +from .models import QivipQuiz +from .forms import QuizFilterForm +from django.db.models import Count +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 + + 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') + if search: # Suche nach Namen + filter_quizzes = filter_quizzes.filter(name__icontains=search) + my_quizzes = my_quizzes.filter(name__icontains=search) + 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) + 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 + 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 + context = { + 'show_search': True, + 'quizzes': quizzes, + 'all_quizzes': all_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() - return render(request, 'library/overview_quiz.html', {'quizzes': quizzes, 'all_quizzes': all_quizzes}) + context = { + 'show_search': True, + 'quizzes': quizzes, + 'all_quizzes': all_quizzes, + 'form': form, + } + return render(request, 'library/overview_quiz.html', context) except: all_quizzes = QivipQuiz.objects.filter(status='öffentlich').filter(question__isnull=False).distinct() - return render(request, 'library/overview_quiz.html', {'quizzes': None, 'all_quizzes': all_quizzes}) - + context = { + 'show_search': True, + 'quizzes': None, + 'all_quizzes': all_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 80bb3b6..64437c0 100644 --- a/django/templates/library/overview_quiz.html +++ b/django/templates/library/overview_quiz.html @@ -1,9 +1,28 @@ {% extends 'base.html' %} - {% block content %} + + +
+ +