sinnvolleres_speichern
This commit is contained in:
@@ -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'),
|
||||
),
|
||||
]
|
||||
@@ -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',
|
||||
),
|
||||
]
|
||||
@@ -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'),
|
||||
),
|
||||
]
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
|
||||
@@ -197,21 +197,19 @@ 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=request.FILES['quiz_image']
|
||||
imagequiz=QuizImage.objects.create(image=quiz_image)
|
||||
quiz.image=imagequiz
|
||||
|
||||
quiz.image = quiz_img
|
||||
except Exception:
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
quiz.user_id = request.user
|
||||
#quiz.creator = request.user
|
||||
quiz.save()
|
||||
@@ -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()
|
||||
imagequestion=QuestionImage.objects.create(image=question_image)
|
||||
question.image=imagequestion
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -501,6 +508,8 @@ def edit_question(request, pk):
|
||||
question_text = request.POST.get('question', '')
|
||||
try:
|
||||
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()
|
||||
for img in QuestionImage.objects.all():
|
||||
try:
|
||||
img.delete()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
question.save()
|
||||
#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})
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
|
||||
{% if form.instance.image %}
|
||||
<img src="{{ form.instance.image.image.url }}" style="max-width: 100px;" alt="Bild der Frage">
|
||||
<label for="reset_image">
|
||||
@@ -14,7 +15,7 @@
|
||||
{% 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">
|
||||
<input class="bg-blue-200 p-2 m-2 rounded-lg border-2 border-blue-400" type="file" name="quiz_image" id="quiz_image">
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user