Kopie eines Quizzes (Datenbank)
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import uuid
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import User
|
||||
@@ -26,7 +27,6 @@ def overview_quiz(request):
|
||||
filter_my_quizzes = QivipQuiz.objects.none()
|
||||
|
||||
filter_other_quizzes = QivipQuiz.objects.annotate(max_amout_questions=Count('question'))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -67,13 +67,14 @@ def overview_quiz(request):
|
||||
except:
|
||||
filter_other_quizzes=filter_other_quizzes
|
||||
|
||||
# Anzahl der Quiz pro Seite für Swiper
|
||||
|
||||
print("kein Filter ,form_valid")
|
||||
|
||||
filter_other_quizzes = filter_other_quizzes.filter(max_amout_questions__gte=1).filter(status='öffentlich')
|
||||
|
||||
context = {
|
||||
'show_search': True,
|
||||
'filter_my_quizzes': filter_my_quizzes,
|
||||
'filter_other_quizzes': filter_other_quizzes,
|
||||
'filter_my_quizzes': filter_my_quizzes.order_by('-creation_date'),
|
||||
'filter_other_quizzes': filter_other_quizzes.order_by('-creation_date'),
|
||||
'form': form,
|
||||
}
|
||||
|
||||
@@ -91,6 +92,7 @@ def new_quiz(request):
|
||||
if form.is_valid():
|
||||
quiz = form.save(commit=False)
|
||||
quiz.user_id = request.user
|
||||
quiz.creator = request.user
|
||||
quiz.save()
|
||||
form.save_m2m() # Speichert die Many-to-Many Beziehungen (Tags)
|
||||
return redirect('library:detail_quiz', pk=quiz.pk)
|
||||
@@ -106,12 +108,15 @@ def edit_quiz(request, pk):
|
||||
if request.method == 'POST':
|
||||
form = QuizForm(request.POST, instance=quiz, files=request.FILES)
|
||||
if form.is_valid():
|
||||
|
||||
form.save()
|
||||
return redirect('library:detail_quiz', pk=quiz.pk)
|
||||
return redirect('library:detail_quiz', pk=pk)
|
||||
#return modified(request, pk)
|
||||
|
||||
else:
|
||||
form = QuizForm(instance=quiz)
|
||||
return render(request, 'library/form.html', {'form': form})
|
||||
|
||||
|
||||
# Quiz löschen
|
||||
@login_required
|
||||
def delete_quiz(request, pk):
|
||||
@@ -122,9 +127,9 @@ def delete_quiz(request, pk):
|
||||
return render(request, 'library/delete_confirmation.html', {'object': quiz})
|
||||
|
||||
# Quiz anzeigen
|
||||
@login_required
|
||||
def detail_quiz(request, pk):
|
||||
quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
|
||||
#quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
|
||||
quiz = get_object_or_404(QivipQuiz, pk=pk)
|
||||
questions = QivipQuestion.objects.filter(quiz_id=quiz)
|
||||
|
||||
# Parse JSON data for each question
|
||||
@@ -137,6 +142,63 @@ def detail_quiz(request, pk):
|
||||
'questions': questions
|
||||
}
|
||||
return render(request, 'library/detail_quiz.html', context)
|
||||
"""
|
||||
def modified(request, pk):
|
||||
|
||||
original_quiz = get_object_or_404(QivipQuiz, pk=pk)
|
||||
words=original_quiz.modified_description.split()
|
||||
word_exist=0
|
||||
print(original_quiz.creator.username)
|
||||
print(request.user.username)
|
||||
|
||||
for word in words:
|
||||
|
||||
if word==request.user.username or word+","==request.user.username:
|
||||
word_exist=1
|
||||
|
||||
|
||||
if word_exist==0 and len(words)!=0 and request.user.username!=original_quiz.creator.username:
|
||||
original_quiz.modified_description +=", "+ request.user.username
|
||||
|
||||
|
||||
elif word_exist==0 and request.user.username!=original_quiz.creator.username:
|
||||
original_quiz.modified_description +=" "+ request.user.username
|
||||
|
||||
original_quiz.save()
|
||||
|
||||
return redirect('library:detail_quiz', pk=pk)
|
||||
|
||||
"""
|
||||
|
||||
@login_required
|
||||
def copy_quiz(request, pk):
|
||||
original_quiz = get_object_or_404(QivipQuiz, pk=pk)
|
||||
|
||||
|
||||
# Quiz kopieren (ohne ID, damit ein neues Objekt erstellt wird)
|
||||
|
||||
# Quiz kopieren (ohne ID, damit ein neues Objekt erstellt wird)
|
||||
|
||||
new_quiz = original_quiz # Kopie erstellen (aber Achtung: Noch gleiche Referenz!)
|
||||
new_quiz.pk = None # Setzt die ID auf None, damit Django es als neues Objekt erkennt
|
||||
new_quiz.uuid = uuid.uuid4() # Neue UUID generieren
|
||||
new_quiz.user_id = request.user # Neuer Besitzer ist der aktuelle User
|
||||
new_quiz.name += " - Kopie" # Optional: Name anpassen
|
||||
new_quiz.base_quiz_id = pk
|
||||
#new_quiz.creator = original_quiz.creator or request.user
|
||||
new_quiz.save() # Speichern als neues Objekt
|
||||
# Optional: Beschreibung anpassen
|
||||
# Alle zugehörigen Fragen kopieren
|
||||
questions = QivipQuestion.objects.filter(quiz_id=pk)
|
||||
for question in questions:
|
||||
question.uuid = uuid.uuid4()
|
||||
question.pk = None # Setze pk auf None, damit es als neues Objekt gespeichert wird
|
||||
question.quiz_id = original_quiz # Verknüpfe mit dem neuen Quiz
|
||||
question.data = question.data # `data`-Feld wird explizit übernommen # Verknüpfe mit dem neuen Quiz
|
||||
question.save()
|
||||
|
||||
return redirect('library:detail_quiz', pk=new_quiz.pk)
|
||||
|
||||
|
||||
# Übersicht aller Fragen
|
||||
@login_required
|
||||
@@ -212,6 +274,7 @@ def new_question(request):
|
||||
question.data = json.dumps(json_data)
|
||||
question.quiz_id = quiz
|
||||
question.save()
|
||||
#return modified(request, pk=quiz.pk)
|
||||
return redirect('library:detail_quiz', pk=quiz.pk)
|
||||
else:
|
||||
# Initialize empty question data for new questions
|
||||
@@ -340,7 +403,9 @@ def edit_question(request, pk):
|
||||
|
||||
question.data = json.dumps(json_data)
|
||||
question.save()
|
||||
#return modified(request, question.quiz_id.pk)
|
||||
return redirect('library:detail_quiz', pk=question.quiz_id.pk)
|
||||
|
||||
else:
|
||||
template_name = f'library/question/question_{question_type}.html'
|
||||
context = {
|
||||
@@ -351,6 +416,7 @@ def edit_question(request, pk):
|
||||
|
||||
return render(request, template_name, context)
|
||||
|
||||
|
||||
# Frage löschen
|
||||
@login_required
|
||||
def delete_question(request, pk):
|
||||
|
||||
Reference in New Issue
Block a user