Filter_library
This commit is contained in:
@@ -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'
|
||||
}))
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user