struktur_library
This commit is contained in:
@@ -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, min_value=1, label="Maximale Anzahl an Fragen", widget=forms.NumberInput(attrs={
|
||||||
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'
|
'class': 'border-2 border-gray-300 rounded-lg p-2 w-full'
|
||||||
}))
|
}))
|
||||||
user = forms.CharField(required=False, label="von User", widget=forms.TextInput(attrs={
|
user = forms.CharField(required=False, label="von User", widget=forms.TextInput(attrs={
|
||||||
|
|||||||
@@ -14,68 +14,104 @@ from django.contrib.auth.models import User
|
|||||||
# Übersicht aller Quizze
|
# Übersicht aller Quizze
|
||||||
|
|
||||||
def overview_quiz(request):
|
def overview_quiz(request):
|
||||||
|
|
||||||
|
|
||||||
#Filter
|
#Filter
|
||||||
form = QuizFilterForm(request.GET)
|
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():
|
if form.is_valid():
|
||||||
search = form.cleaned_data.get('search')
|
search = form.cleaned_data.get('search')
|
||||||
username= form.cleaned_data.get('user')
|
username= form.cleaned_data.get('user')
|
||||||
max_amout_questions= form.cleaned_data.get('max_amout_questions')
|
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
|
if search: # Suche nach Namen
|
||||||
filter_quizzes = filter_quizzes.filter(name__icontains=search)
|
filter_other_quizzes = filter_other_quizzes.filter(name__icontains=search)
|
||||||
my_quizzes = my_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:
|
if max_amout_questions:
|
||||||
filter_quizzes = filter_quizzes.filter(max_amout_questions__lte=max_amout_questions)
|
filter_other_quizzes = filter_other_quizzes.filter(max_amout_questions__lte=max_amout_questions)
|
||||||
my_quizzes = my_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:
|
if username:
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(username=username) # Benutzer anhand des Namens holen
|
user = User.objects.get(username=username) # Benutzer anhand des Namens holen
|
||||||
filter_quizzes = filter_quizzes.filter(user_id=user.id)
|
filter_other_quizzes = filter_other_quizzes.filter(user_id=user.id)
|
||||||
my_quizzes = my_quizzes.filter(user_id=user.id) # Nach der user_id filtern
|
filter_my_quizzes = filter_my_quizzes.filter(user_id=user.id) # Nach der user_id filtern
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
filter_quizzes = QivipQuiz.objects.none() # Falls User nicht existiert, leere Query zurückgeben
|
filter_other_quizzes = QivipQuiz.objects.none() # Falls User nicht existiert, leere Query zurückgeben
|
||||||
my_quizzes = QivipQuiz.objects.none()
|
filter_my_quizzes = QivipQuiz.objects.none()
|
||||||
all_quizzes=filter_quizzes.exclude(user_id=request.user)
|
|
||||||
quizzes=my_quizzes
|
try:
|
||||||
#WICHTIG: HIER sind all_quizzes nicht alle Quizze sondern die herausgefilterten Quizze
|
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 = {
|
context = {
|
||||||
'show_search': True,
|
'show_search': True,
|
||||||
'quizzes': quizzes,
|
'filter_my_quizzes': filter_my_quizzes,
|
||||||
'all_quizzes': all_quizzes,
|
'filter_other_quizzes': filter_other_quizzes,
|
||||||
'form': form,
|
'form': form,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return render(request, 'library/overview_quiz.html', context)
|
return render(request, 'library/overview_quiz.html', context)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
quizzes = QivipQuiz.objects.filter(user_id=request.user)
|
filter_my_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_other_quizzes = QivipQuiz.objects.filter(status='öffentlich').exclude(user_id=request.user).filter(question__isnull=False).distinct()
|
||||||
context = {
|
context = {
|
||||||
'show_search': True,
|
'show_search': True,
|
||||||
'quizzes': quizzes,
|
'filter_my_quizzes': filter_my_quizzes,
|
||||||
'all_quizzes': all_quizzes,
|
'filter_other_quizzes': filter_other_quizzes,
|
||||||
'form': form,
|
'form': form,
|
||||||
}
|
}
|
||||||
return render(request, 'library/overview_quiz.html', context)
|
return render(request, 'library/overview_quiz.html', context)
|
||||||
|
|
||||||
except:
|
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 = {
|
context = {
|
||||||
'show_search': True,
|
'show_search': True,
|
||||||
'quizzes': None,
|
'filter_my_quizzes': None,
|
||||||
'all_quizzes': all_quizzes,
|
'filter_other_quizzes': filter_other_quizzes,
|
||||||
'form': form,
|
'form': form,
|
||||||
}
|
}
|
||||||
return render(request, 'library/overview_quiz.html', context)
|
return render(request, 'library/overview_quiz.html', context)
|
||||||
|
|
||||||
|
|
||||||
# Neues Quiz erstellen
|
# Neues Quiz erstellen
|
||||||
@login_required
|
@login_required
|
||||||
def new_quiz(request):
|
def new_quiz(request):
|
||||||
|
|||||||
@@ -2,20 +2,20 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="flex justify-end mr-2">
|
<div class="flex justify-end mr-2">
|
||||||
<a href="{% url 'library:new_quiz' %}" class="mt-2 p-2 shadow-md border-blue-600 border-2 rounded-md text-black ">Neues Quiz erstellen</a>
|
<a href="{% url 'library:new_quiz' %}" class="mt-2 p-2 shadow-md border-blue-600 border-2 rounded-md text-black ">Neues Quiz erstellen</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-end mr-2">
|
<div class="flex justify-end mr-2">
|
||||||
<a href="{% url 'library:overview_quiz' %}" class="mt-2 p-2 shadow-md border-blue-600 border-2 rounded-md text-black mb-12">Suche und Filter zurücksetzen</a>
|
<a href="{% url 'library:overview_quiz' %}" class="mt-2 p-2 shadow-md border-blue-600 border-2 rounded-md text-black ">Suche und Filter zurücksetzen</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="w-screen flex justify-center items-center">
|
<div class="w-screen flex justify-center items-center">
|
||||||
<div class="w-full m-4 border-blue-600 border-2 rounded-xl shadow-md p-6 lg:w-1/4">
|
<div class="w-full m-4 border-blue-600 border-2 rounded-xl shadow-md p-6 lg:w-1/4">
|
||||||
<form method="get" class="flex flex-col space-y-4">
|
<form method="get" class="flex flex-col space-y-4">
|
||||||
<h1 class="text-xl font-bold">Filter</h1>
|
<h1 class="text-xl font-bold">Filter</h1>
|
||||||
|
Minimale Anzahl an Fragen {{ form.min_amout_questions }}
|
||||||
Maximale Anzahl an Fragen {{ form.max_amout_questions }}
|
Maximale Anzahl an Fragen {{ form.max_amout_questions }}
|
||||||
von User {{ form.user }}
|
von User {{ form.user }}
|
||||||
<!-- Rendert die Form-Felder -->
|
<!-- Rendert die Form-Felder -->
|
||||||
<button type="submit" class="qp-a-button-small border-2 border-blue-600 text-black">Filtern</button>
|
<button type="submit" class="qp-a-button-small border-2 border-blue-600 text-black">Filtern</button>
|
||||||
</form>
|
</form>
|
||||||
@@ -26,11 +26,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
{% if quizzes %}
|
{% if filter_my_quizzes %}
|
||||||
<div class="text-center m-8 bg-blue-600 grid mx-8 h-8 place-items-center rounded-xl shadow-md ">
|
<div class="text-center m-8 bg-blue-600 grid mx-8 h-8 place-items-center rounded-xl shadow-md ">
|
||||||
<h1 class="flex px-4 font-bold text-white ">eigene Quiz</h1></div>
|
<h1 id="my-quizzes"class="flex px-4 font-bold text-white ">eigene Quiz</h1></div>
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 px-4 place-items-center ">
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 px-4 place-items-center ">
|
||||||
{% for quiz in quizzes %}
|
{% for quiz in filter_my_quizzes %}
|
||||||
<div class="bg-white w-full max-w-md rounded-lg p-4 shadow-md border-blue-600 border-2 rounded-xl h-80 ">
|
<div class="bg-white w-full max-w-md rounded-lg p-4 shadow-md border-blue-600 border-2 rounded-xl h-80 ">
|
||||||
<h2 class="text-lg font-bold break-words truncate"><a href="{% url 'library:edit_quiz' quiz.id %}">{{ quiz.name }}</a></h2>
|
<h2 class="text-lg font-bold break-words truncate"><a href="{% url 'library:edit_quiz' quiz.id %}">{{ quiz.name }}</a></h2>
|
||||||
<p class="text-sm text-gray-600 pt-11 h-54"><span class="break-words line-clamp-2">{{ quiz.description }} </span><br> Status: <span class="font-bold">{{ quiz.status }}</span>
|
<p class="text-sm text-gray-600 pt-11 h-54"><span class="break-words line-clamp-2">{{ quiz.description }} </span><br> Status: <span class="font-bold">{{ quiz.status }}</span>
|
||||||
@@ -54,15 +54,17 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if quizzes or all_quizzes %}
|
|
||||||
|
|
||||||
|
{% if filter_my_quizzes or filter_other_quizzes %}
|
||||||
<div class="text-center m-8 bg-blue-600 grid mx-8 h-8 place-items-center rounded-xl shadow-md">
|
<div class="text-center m-8 bg-blue-600 grid mx-8 h-8 place-items-center rounded-xl shadow-md">
|
||||||
<h1 class="flex px-4 font-bold text-white ">Quiz von anderen Nutzer</h1></div>
|
<h1 id="other-quizzes" class="flex px-4 font-bold text-white ">Quiz von anderen Nutzer</h1></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if all_quizzes %}
|
{% if filter_other_quizzes %}
|
||||||
|
|
||||||
|
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 px-4 place-items-center">
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 px-4 place-items-center">
|
||||||
{% for quiz in all_quizzes %}
|
{% for quiz in filter_other_quizzes %}
|
||||||
|
|
||||||
<div class="h-80 bg-white w-full max-w-md rounded-lg p-4 shadow-md border-blue-600 border-2 rounded-xl ">
|
<div class="h-80 bg-white w-full max-w-md rounded-lg p-4 shadow-md border-blue-600 border-2 rounded-xl ">
|
||||||
<h2 class="text-lg font-bold break-words truncate">{{ quiz.name }}</h2>
|
<h2 class="text-lg font-bold break-words truncate">{{ quiz.name }}</h2>
|
||||||
@@ -89,7 +91,7 @@
|
|||||||
|
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% elif not quizzes %}
|
{% elif not filter_my_quizzes %}
|
||||||
<div class="text-center font-bold">Es wurde kein passendes Quiz gefunden.</div>
|
<div class="text-center font-bold">Es wurde kein passendes Quiz gefunden.</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user