Uploadfunktion!

This commit is contained in:
ben8
2025-04-22 17:52:34 +02:00
parent 1a4b9e0d6b
commit 50cd95daf1
5 changed files with 46 additions and 4 deletions

View File

@@ -4,7 +4,7 @@ from .models import QivipQuiz, QivipQuestion
class QuizForm(forms.ModelForm): class QuizForm(forms.ModelForm):
class Meta: class Meta:
model = QivipQuiz model = QivipQuiz
fields = ['name', 'description','image', 'status', 'category','difficulty','credits'] fields = ['name', 'description', 'status', 'category','difficulty','credits']
class QuestionForm(forms.ModelForm): class QuestionForm(forms.ModelForm):
class Meta: class Meta:

View File

@@ -193,10 +193,14 @@ def favorite_quiz(request, pk):
# Neues Quiz erstellen # Neues Quiz erstellen
@login_required @login_required
def new_quiz(request): def new_quiz(request):
if request.method == 'POST': if request.method == 'POST':
quiz_image = request.FILES.get('quiz_image', None)
form = QuizForm(request.POST, request.FILES) form = QuizForm(request.POST, request.FILES)
if form.is_valid(): if form.is_valid():
quiz = form.save(commit=False) quiz = form.save(commit=False)
quiz.image = quiz_image
quiz.user_id = request.user quiz.user_id = request.user
#quiz.creator = request.user #quiz.creator = request.user
quiz.save() quiz.save()
@@ -214,7 +218,16 @@ def edit_quiz(request, pk):
if request.method == 'POST': if request.method == 'POST':
form = QuizForm(request.POST, instance=quiz, files=request.FILES) form = QuizForm(request.POST, instance=quiz, files=request.FILES)
if form.is_valid(): if form.is_valid():
try:
quiz_image = request.FILES['quiz_image']
quiz.image=quiz_image
quiz.save()
except Exception:
pass
if 'reset_image' in request.POST:
quiz.image = None
form.save() form.save()
return redirect('library:detail_quiz', pk=pk) return redirect('library:detail_quiz', pk=pk)
#return modified(request, pk) #return modified(request, pk)
@@ -228,7 +241,12 @@ def edit_quiz(request, pk):
def delete_quiz(request, pk): def delete_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)
if request.method == 'POST': if request.method == 'POST':
if quiz.image:
quiz.image = None # Entfernt das Bild aus der Datenbank, aber löscht es nicht
quiz.save() # Speichere die Änderungen in der Datenbank
quiz.delete() quiz.delete()
return redirect('library:overview_quiz') return redirect('library:overview_quiz')
return render(request, 'library/delete_confirmation.html', {'object': quiz}) return render(request, 'library/delete_confirmation.html', {'object': quiz})
@@ -254,6 +272,7 @@ def detail_quiz(request, pk):
@login_required @login_required
def copy_quiz(request, pk): def copy_quiz(request, pk):
original_quiz = get_object_or_404(QivipQuiz, pk=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)
@@ -264,11 +283,10 @@ def copy_quiz(request, pk):
new_quiz.pk = None # Setzt die ID auf None, damit Django es als neues Objekt erkennt 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.uuid = uuid.uuid4() # Neue UUID generieren
new_quiz.user_id = request.user # Neuer Besitzer ist der aktuelle User new_quiz.user_id = request.user # Neuer Besitzer ist der aktuelle User
new_quiz.name += " - Kopie" # Optional: Name anpassen new_quiz.name += " - Kopie"
new_quiz.base_quiz_id = pk new_quiz.base_quiz_id = pk
new_quiz.rating_count = 0 new_quiz.rating_count = 0
new_quiz.average_rating = 3.0 new_quiz.average_rating = 3.0
#new_quiz.creator = original_quiz.creator or request.user
new_quiz.save() # Speichern als neues Objekt new_quiz.save() # Speichern als neues Objekt
# Optional: Beschreibung anpassen # Optional: Beschreibung anpassen
# Alle zugehörigen Fragen kopieren # Alle zugehörigen Fragen kopieren
@@ -400,6 +418,8 @@ def new_question(request):
@login_required @login_required
def edit_question(request, pk): def edit_question(request, pk):
question = get_object_or_404(QivipQuestion, pk=pk, quiz_id__user_id=request.user) question = get_object_or_404(QivipQuestion, pk=pk, quiz_id__user_id=request.user)
if 'reset_ques_image' in request.POST:
question.image = None
if question.quiz_id.user_id != request.user: if question.quiz_id.user_id != request.user:
return redirect('library:question_list') return redirect('library:question_list')

View File

@@ -5,6 +5,20 @@
<form method="post" enctype="multipart/form-data"> <form method="post" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form.as_p }} {{ form.as_p }}
{% if form.instance.image %}
<img src="{{ form.instance.image.url }}" style="max-width: 100px;" alt="Bild der Frage">
<label for="reset_image">
<input type="checkbox" name="reset_image" id="reset_image">
Bild zurücksetzen
</label>
{% endif %}
<div>
<label class="font-bold" for="quiz_image">Bild:</label>
<input value="form.instance.image.url" class="bg-blue-200 p-2 m-2 rounded-lg border-2 border-blue-400" type="file" name="quiz_image" id="quiz_image">
</div>
<div class="flex justify-center space-x-3"> <div class="flex justify-center space-x-3">
<a href="{% if object.quiz_id %}{% url 'library:detail_quiz' object.quiz_id.id %}{% else %}{% url 'library:overview_quiz' %}{% endif %}" <a href="{% if object.quiz_id %}{% url 'library:detail_quiz' object.quiz_id.id %}{% else %}{% url 'library:overview_quiz' %}{% endif %}"
class="inline-flex items-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"> class="inline-flex items-center px-4 py-2 border border-gray-300 shadow-sm text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">

View File

@@ -26,6 +26,10 @@
{% if image %} {% if image %}
<img src="{{ image.url }}" style="max-width: 500px;" alt="Bild der Frage"> <img src="{{ image.url }}" style="max-width: 500px;" alt="Bild der Frage">
<label for="reset_image">
<input type="checkbox" name="reset_ques_image" id="reset_ques_image">
Bild zurücksetzen
</label>
{% endif %} {% endif %}
<div> <div>
<label class="font-bold" for="question_image">Bild:</label> <label class="font-bold" for="question_image">Bild:</label>

View File

@@ -26,6 +26,10 @@
{% if image %} {% if image %}
<img src="{{ image.url }}" style="max-width: 500px;" alt="Bild der Frage"> <img src="{{ image.url }}" style="max-width: 500px;" alt="Bild der Frage">
<label for="reset_image">
<input type="checkbox" name="reset_ques_image" id="reset_ques_image">
Bild zurücksetzen
</label>
{% endif %} {% endif %}
<div> <div>
<label class="font-bold" for="question_image">Bild:</label> <label class="font-bold" for="question_image">Bild:</label>