Filter_library

This commit is contained in:
nik8
2025-03-17 18:28:12 +01:00
parent 9d71f2bbf3
commit a3331543f2
4 changed files with 126 additions and 10 deletions

View File

@@ -9,4 +9,22 @@ class QuizForm(forms.ModelForm):
class QuestionForm(forms.ModelForm):
class Meta:
model = QivipQuestion
fields = ['quiz_id', 'data']
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'
}))

View File

@@ -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):