fix_Bilder
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
from django.contrib import admin
|
||||
from .models import QivipQuiz, QivipQuestion, QivipQuizFavorite, QuizCategory
|
||||
from .models import QivipQuiz, QivipQuestion, QivipQuizFavorite, QuestionImage, QuizCategory, QuizImage
|
||||
|
||||
# Für das QivipQuiz Modell
|
||||
class QivipQuizAdmin(admin.ModelAdmin):
|
||||
@@ -23,8 +23,17 @@ class QuizCategoryAdmin(admin.ModelAdmin):
|
||||
class QivipQuizFavoriteAdmin(admin.ModelAdmin):
|
||||
list_display = ('user', 'favorite', 'quiz') # Welche Felder sollen in der Übersicht angezeigt werden
|
||||
|
||||
|
||||
class QuizImageAdmin(admin.ModelAdmin):
|
||||
list_display = ('image',)
|
||||
|
||||
class QuestionImageAdmin(admin.ModelAdmin):
|
||||
list_display = ('image',)
|
||||
|
||||
# Registrierung der Modelle im Admin
|
||||
admin.site.register(QivipQuiz, QivipQuizAdmin)
|
||||
admin.site.register(QivipQuestion, QivipQuestionAdmin)
|
||||
admin.site.register(QuizCategory, QuizCategoryAdmin)
|
||||
admin.site.register(QivipQuizFavorite, QivipQuizFavoriteAdmin)
|
||||
admin.site.register(QuizImage, QuizImageAdmin)
|
||||
admin.site.register(QuestionImage, QuestionImageAdmin)
|
||||
@@ -0,0 +1,38 @@
|
||||
# Generated by Django 5.1.7 on 2025-04-22 16:04
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('library', '0049_alter_qivipquestion_image'),
|
||||
]
|
||||
|
||||
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.SET_NULL, 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.SET_NULL, related_name='quizzes', to='library.QuizImage'),
|
||||
),
|
||||
]
|
||||
@@ -4,6 +4,15 @@ from django.utils.text import slugify
|
||||
import uuid
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
|
||||
class QuizImage(models.Model):
|
||||
image = models.ImageField(max_length=256,verbose_name="Bild", upload_to='quiz_images/', blank=True, null=True) # Bild speichern in media/quiz_images/
|
||||
|
||||
|
||||
class QuestionImage(models.Model):
|
||||
image = models.ImageField(verbose_name="Bild", upload_to="question_images/", blank=True, null=True)
|
||||
|
||||
|
||||
class QivipQuiz(models.Model):
|
||||
STATUS_VALUES = {
|
||||
"öffentlich": "Öffentlich",
|
||||
@@ -27,7 +36,15 @@ class QivipQuiz(models.Model):
|
||||
if value.strip() == "In dem Quiz geht es um ...":
|
||||
raise ValidationError("Bitte gib eine aussagekräftige Beschreibung ein.")
|
||||
|
||||
image = models.ImageField(max_length=256,verbose_name="Bild", upload_to='quiz_images/', blank=True, null=True) # Bild speichern in media/quiz_images/
|
||||
image = models.ForeignKey(
|
||||
QuizImage,
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL, # Bild bleibt erhalten, selbst wenn das Quiz gelöscht wird
|
||||
related_name="quizzes"
|
||||
)
|
||||
|
||||
|
||||
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quiz')
|
||||
#creator = models.ForeignKey(User, on_delete=models.SET_NULL,blank=True, null=True, related_name='creator_quiz')
|
||||
@@ -74,7 +91,14 @@ class QivipQuestion(models.Model):
|
||||
update_date = models.DateTimeField(auto_now=True)
|
||||
data = models.TextField()
|
||||
time_per_question = models.CharField(max_length=3, choices=list(TIME_VALUES.items()), default=30, help_text="Zeit pro Frage in Sekunden")
|
||||
image = models.ImageField(verbose_name="Bild", upload_to="question_images/", blank=True, null=True)
|
||||
image = models.ForeignKey(
|
||||
QuestionImage,
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name="questions"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.data[:50]
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from django.contrib import messages
|
||||
from .models import QivipQuiz, QivipQuestion, QivipQuizFavorite
|
||||
from .models import QivipQuiz, QivipQuestion, QivipQuizFavorite, QuestionImage, QuizImage
|
||||
from .forms import QuizForm, QuestionForm
|
||||
import json
|
||||
from django.core.paginator import Paginator
|
||||
@@ -200,7 +200,11 @@ def new_quiz(request):
|
||||
form = QuizForm(request.POST, request.FILES)
|
||||
if form.is_valid():
|
||||
quiz = form.save(commit=False)
|
||||
quiz.image = quiz_image
|
||||
|
||||
uploaded_file = request.FILES["quiz_image"]
|
||||
quiz_img = QuizImage.objects.create(image=uploaded_file)
|
||||
quiz.image = quiz_img
|
||||
|
||||
quiz.user_id = request.user
|
||||
#quiz.creator = request.user
|
||||
quiz.save()
|
||||
@@ -219,8 +223,10 @@ def edit_quiz(request, pk):
|
||||
form = QuizForm(request.POST, instance=quiz, files=request.FILES)
|
||||
if form.is_valid():
|
||||
try:
|
||||
quiz_image = request.FILES['quiz_image']
|
||||
quiz.image=quiz_image
|
||||
|
||||
uploaded_file = request.FILES["quiz_image"]
|
||||
quiz_img = QuizImage.objects.create(image=uploaded_file)
|
||||
quiz.image = quiz_img
|
||||
quiz.save()
|
||||
except Exception:
|
||||
pass
|
||||
@@ -518,7 +524,15 @@ def edit_question(request, pk):
|
||||
|
||||
question.data = json.dumps(json_data)
|
||||
question.time_per_question = request.POST.get('time_per_question', '30')
|
||||
question.image = question_image
|
||||
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()
|
||||
#return modified(request, question.quiz_id.pk)
|
||||
return redirect('library:detail_quiz', pk=question.quiz_id.pk)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
{% if form.instance.image %}
|
||||
<img src="{{ form.instance.image.url }}" style="max-width: 100px;" alt="Bild der Frage">
|
||||
<img src="{{ form.instance.image.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
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<div class="relative w-full h-full inset-0 bg-cover bg-center">
|
||||
<!-- Hintergrundbild -->
|
||||
<div class="absolute inset-0 bg-cover bg-center"
|
||||
style="background-image: url({{ quiz.image.url }});">
|
||||
style="background-image: url({{ quiz.image.image.url }});">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
<div class="relative w-full h-full inset-0 bg-cover bg-center">
|
||||
<!-- Hintergrundbild -->
|
||||
<div class="absolute inset-0 bg-cover bg-center"
|
||||
style="background-image: url({{ quiz.image.url }});">
|
||||
style="background-image: url({{ quiz.image.image.url }});">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
<div class="relative w-full h-full inset-0 bg-cover bg-center">
|
||||
<!-- Hintergrundbild -->
|
||||
<div class="absolute inset-0 bg-cover bg-center"
|
||||
style="background-image: url({{ quiz.image.url }});">
|
||||
style="background-image: url({{ quiz.image.image.url }});">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
{% if image %}
|
||||
<img src="{{ image.url }}" style="max-width: 500px;" alt="Bild der Frage">
|
||||
<img src="{{ image.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
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</div>
|
||||
|
||||
{% if image %}
|
||||
<img src="{{ image.url }}" style="max-width: 500px;" alt="Bild der Frage">
|
||||
<img src="{{ image.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
|
||||
|
||||
Reference in New Issue
Block a user