sinnvolleres_speichern

This commit is contained in:
ben8
2025-04-23 16:11:08 +02:00
parent a021e7561a
commit 0c8a8d3062
6 changed files with 147 additions and 43 deletions

View File

@@ -0,0 +1,24 @@
# Generated by Django 5.1.7 on 2025-04-23 12:04
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('library', '0050_questionimage_quizimages_alter_qivipquestion_image_and_more'),
]
operations = [
migrations.AlterField(
model_name='qivipquestion',
name='image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='library.questionimage'),
),
migrations.AlterField(
model_name='qivipquiz',
name='image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='quizzes', to='library.quizimage'),
),
]

View File

@@ -0,0 +1,29 @@
# Generated by Django 5.1.7 on 2025-04-23 12:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('library', '0051_alter_qivipquestion_image_alter_qivipquiz_image'),
]
operations = [
migrations.AlterField(
model_name='qivipquestion',
name='image',
field=models.ImageField(blank=True, null=True, upload_to='question_images/', verbose_name='Bild'),
),
migrations.AlterField(
model_name='qivipquiz',
name='image',
field=models.ImageField(blank=True, max_length=256, null=True, upload_to='quiz_images/', verbose_name='Bild'),
),
migrations.DeleteModel(
name='QuestionImage',
),
migrations.DeleteModel(
name='QuizImage',
),
]

View File

@@ -0,0 +1,38 @@
# Generated by Django 5.1.7 on 2025-04-23 13:15
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('library', '0052_alter_qivipquestion_image_alter_qivipquiz_image_and_more'),
]
operations = [
migrations.CreateModel(
name='QuestionImage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(blank=True, null=True, upload_to='question_images/', verbose_name='Bild')),
],
),
migrations.CreateModel(
name='QuizImage',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.ImageField(blank=True, max_length=256, null=True, upload_to='quiz_images/', verbose_name='Bild')),
],
),
migrations.AlterField(
model_name='qivipquestion',
name='image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='questions', to='library.questionimage'),
),
migrations.AlterField(
model_name='qivipquiz',
name='image',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='quizzes', to='library.quizimage'),
),
]

View File

@@ -40,7 +40,7 @@ class QivipQuiz(models.Model):
QuizImage,
null=True,
blank=True,
on_delete=models.SET_NULL, # Bild bleibt erhalten, selbst wenn das Quiz gelöscht wird
on_delete=models.PROTECT,
related_name="quizzes"
)
@@ -95,7 +95,7 @@ class QivipQuestion(models.Model):
QuestionImage,
null=True,
blank=True,
on_delete=models.SET_NULL,
on_delete=models.PROTECT,
related_name="questions"
)

View File

@@ -197,20 +197,18 @@ def new_quiz(request):
if request.method == 'POST':
form = QuizForm(request.POST, request.FILES)
try:
uploaded_file = request.FILES["quiz_image"]
quiz_img = QuizImage.objects.create(image=uploaded_file)
except Exception:
pass
if form.is_valid():
quiz = form.save(commit=False)
try:
quiz.image = quiz_img
except Exception:
quiz_image=request.FILES['quiz_image']
imagequiz=QuizImage.objects.create(image=quiz_image)
quiz.image=imagequiz
except:
pass
quiz.user_id = request.user
#quiz.creator = request.user
@@ -229,19 +227,27 @@ def edit_quiz(request, pk):
if request.method == 'POST':
form = QuizForm(request.POST, instance=quiz, files=request.FILES)
if form.is_valid():
try:
uploaded_file = request.FILES["quiz_image"]
quiz_img = QuizImage.objects.create(image=uploaded_file)
quiz.image = quiz_img
quiz.save()
except Exception:
pass
if 'reset_image' in request.POST:
quiz.image = None
try:
quiz_image=request.FILES['quiz_image']
imagequiz=QuizImage.objects.create(image=quiz_image)
quiz.image=imagequiz
except:
pass
form.save()
for img in QuizImage.objects.all():
try:
img.delete()
except:
pass
return redirect('library:detail_quiz', pk=pk)
#return modified(request, pk)
@@ -254,11 +260,19 @@ def edit_quiz(request, pk):
def delete_quiz(request, pk):
quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
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()
for img in QuizImage.objects.all():
try:
img.delete()
img.image.delete(save=False)
except:
pass
for img in QuestionImage.objects.all():
try:
img.delete()
img.image.delete(save=False)
except:
pass
return redirect('library:overview_quiz')
return render(request, 'library/delete_confirmation.html', {'object': quiz})
@@ -309,6 +323,7 @@ def copy_quiz(request, pk):
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()
messages.success(request, "Quiz wurde erfolgreich kopiert!")
@@ -349,7 +364,6 @@ def new_question(request):
if request.method == 'POST':
question_text = request.POST.get('question', '')
question_image = request.FILES.get('question_image', None)
# Handle different question types
if question_type == 'true_false':
@@ -389,17 +403,10 @@ def new_question(request):
question = QivipQuestion()
question.data = json.dumps(json_data)
question.quiz_id = quiz
if request.method == 'POST':
try:
question_image = request.FILES['question_image']
except Exception:
pass
try:
if question_image:
question_img = QuestionImage.objects.create(image=question_image) # Erstelle das QuestionImage-Objekt
question.image = question_img # Weise es dem Bildfeld zu
question.save()
question_image=request.FILES['question_image']
imagequestion=QuestionImage.objects.create(image=question_image)
question.image=imagequestion
except:
pass
@@ -500,7 +507,9 @@ def edit_question(request, pk):
if request.method == 'POST':
question_text = request.POST.get('question', '')
try:
question_image = request.FILES['question_image']
question_image=request.FILES['question_image']
imagequestion=QuestionImage.objects.create(image=question_image)
question.image=imagequestion
except Exception:
pass
@@ -545,16 +554,14 @@ def edit_question(request, pk):
question.data = json.dumps(json_data)
question.time_per_question = request.POST.get('time_per_question', '30')
try:
if question_image:
question_img = QuestionImage.objects.create(image=question_image) # Erstelle das QuestionImage-Objekt
question.image = question_img # Weise es dem Bildfeld zu
question.save()
except:
pass
question.save()
for img in QuestionImage.objects.all():
try:
img.delete()
except:
pass
#return modified(request, question.quiz_id.pk)
return redirect('library:detail_quiz', pk=question.quiz_id.pk)
@@ -582,5 +589,10 @@ def delete_question(request, pk):
if request.method == 'POST':
question.delete()
for img in QuestionImage.objects.all():
try:
img.delete()
except:
pass
return redirect('library:detail_quiz', pk=question.quiz_id.pk)
return render(request, 'library/delete_confirmation.html', {'object': question})