Bewertung_fix und Veröffentlichungszeit
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
from django.contrib import admin
|
||||
from .models import QivipQuiz, QivipQuestion, QivipQuizFavorite, QuestionImage, QuizCategory, QuizImage
|
||||
from .models import QivipQuiz, QivipQuestion, QivipQuizFavorite, QuestionImage, QuizCategory, QuizImage, QuizRating
|
||||
|
||||
# Für das QivipQuiz Modell
|
||||
class QivipQuizAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'user_id', 'status', 'category', 'creation_date', 'update_date') # Welche Felder sollen in der Übersicht angezeigt werden
|
||||
list_display = ('name','published_at', 'user_id', 'status', 'category', 'creation_date', 'update_date') # Welche Felder sollen in der Übersicht angezeigt werden
|
||||
search_fields = ('name', 'user_id__username', 'category__name') # Suchfelder
|
||||
list_filter = ('status', 'category') # Filteroptionen
|
||||
# Für das QivipQuestion Modell
|
||||
|
||||
18
django/library/migrations/0055_qivipquiz_published_at.py
Normal file
18
django/library/migrations/0055_qivipquiz_published_at.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.7 on 2025-06-26 16:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('library', '0054_qivipquestion_credits'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='qivipquiz',
|
||||
name='published_at',
|
||||
field=models.DateTimeField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 5.1.7 on 2025-06-27 12:35
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('library', '0055_qivipquiz_published_at'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterUniqueTogether(
|
||||
name='quizrating',
|
||||
unique_together=set(),
|
||||
),
|
||||
]
|
||||
@@ -3,7 +3,7 @@ from django.contrib.auth.models import User
|
||||
from django.utils.text import slugify
|
||||
import uuid
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
from django.utils import timezone
|
||||
|
||||
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/
|
||||
@@ -59,6 +59,10 @@ class QivipQuiz(models.Model):
|
||||
credits=models.TextField(blank=True, editable=True)
|
||||
average_rating = models.FloatField(default=3.0)
|
||||
rating_count = models.IntegerField(default=0)
|
||||
published_at = models.DateTimeField(null=True, blank=True) # manuell gesetzt, wenn veröffentlicht
|
||||
|
||||
def is_published(self):
|
||||
return self.published_at is not None and self.published_at <= timezone.now()
|
||||
def __str__(self):
|
||||
|
||||
return self.name
|
||||
@@ -111,9 +115,22 @@ class QuizRating(models.Model):
|
||||
rating = models.IntegerField(choices=[(i, str(i)) for i in range(1, 6)])
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('quiz', 'participant_id')
|
||||
#class Meta:
|
||||
#unique_together = ('quiz', 'participant_id')
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
# Update quiz average rating (immer, auch bei Updates)
|
||||
quiz = self.quiz
|
||||
total_ratings = quiz.ratings.count()
|
||||
avg_rating = quiz.ratings.aggregate(models.Avg('rating'))['rating__avg']
|
||||
quiz.average_rating = round(avg_rating, 1) if avg_rating else 3.0
|
||||
quiz.rating_count = total_ratings
|
||||
quiz.save()
|
||||
|
||||
|
||||
"""
|
||||
def save(self, *args, **kwargs):
|
||||
is_new = self.pk is None
|
||||
super().save(*args, **kwargs)
|
||||
@@ -125,7 +142,7 @@ class QuizRating(models.Model):
|
||||
avg_rating = quiz.ratings.aggregate(models.Avg('rating'))['rating__avg']
|
||||
quiz.average_rating = round(avg_rating, 1) if avg_rating else 3.0
|
||||
quiz.rating_count = total_ratings
|
||||
quiz.save()
|
||||
quiz.save()"""
|
||||
|
||||
class QuizCategory(models.Model):
|
||||
name = models.CharField(max_length=100, unique=True)
|
||||
|
||||
@@ -318,10 +318,11 @@ def favorite_quiz(request, pk):
|
||||
if favorite:
|
||||
favorite.favorite=not favorite.favorite
|
||||
|
||||
|
||||
|
||||
|
||||
if favorite.favorite==True:
|
||||
favorite.favorite_date = timezone.now()
|
||||
favorite.favorite_date = timezone.now()
|
||||
favorite.save()
|
||||
else:
|
||||
favorite.favorite_date = None
|
||||
@@ -347,10 +348,19 @@ def new_quiz(request):
|
||||
|
||||
|
||||
form = QuizForm(request.POST, request.FILES)
|
||||
|
||||
|
||||
|
||||
if form.is_valid():
|
||||
quiz = form.save(commit=False)
|
||||
status = form.cleaned_data.get('status')
|
||||
|
||||
if status == 'öffentlich' and not quiz.published_at:
|
||||
quiz.published_at = timezone.now()
|
||||
|
||||
try:
|
||||
quiz_image=request.FILES['quiz_image']
|
||||
|
||||
imagequiz=QuizImage.objects.create(image=quiz_image)
|
||||
quiz.image=imagequiz
|
||||
|
||||
@@ -359,6 +369,8 @@ def new_quiz(request):
|
||||
|
||||
|
||||
quiz.user_id = request.user
|
||||
|
||||
|
||||
#quiz.creator = request.user
|
||||
quiz.save()
|
||||
#form.save_m2m() # Speichert die Many-to-Many Beziehungen (Tags)
|
||||
@@ -373,9 +385,14 @@ def new_quiz(request):
|
||||
def edit_quiz(request, pk):
|
||||
quiz = get_object_or_404(QivipQuiz, pk=pk, user_id=request.user)
|
||||
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 'reset_image' in request.POST:
|
||||
quiz.image = None
|
||||
|
||||
@@ -388,7 +405,12 @@ def edit_quiz(request, pk):
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
quiz = form.save(commit=False)
|
||||
|
||||
# Beispiel: Status aus dem Formular holen
|
||||
status = form.cleaned_data.get('status')
|
||||
if status == 'öffentlich' and not quiz.published_at:
|
||||
quiz.published_at = timezone.now()
|
||||
|
||||
form.save()
|
||||
for img in QuizImage.objects.all():
|
||||
@@ -466,6 +488,7 @@ def copy_quiz(request, pk):
|
||||
new_quiz.base_quiz_id = pk
|
||||
new_quiz.rating_count = 0
|
||||
new_quiz.average_rating = 3.0
|
||||
new_quiz.published_at = timezone.now()
|
||||
new_quiz.save() # Speichern als neues Objekt
|
||||
# Optional: Beschreibung anpassen
|
||||
# Alle zugehörigen Fragen kopieren
|
||||
|
||||
Reference in New Issue
Block a user