passion_retro/quiz/models.py
2025-09-12 11:11:44 +02:00

57 lines
No EOL
2.3 KiB
Python

from django.db import models
from users.models import User
class Quiz(models.Model):
id = models.AutoField(primary_key=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quizzes')
name = models.CharField(max_length=155)
description = models.TextField(default="")
image = models.ImageField(upload_to='quiz_images/', default='', blank=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
class Question(models.Model):
id = models.AutoField(primary_key=True)
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='questions')
question = models.CharField(max_length=255)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.question
class Choice(models.Model): # Renommé au singulier
id = models.AutoField(primary_key=True)
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='choices')
choice = models.CharField(max_length=255)
is_correct = models.BooleanField(default=False)
def __str__(self):
return self.choice
class UserQuiz(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_quizzes')
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='user_quizzes') # Ajouté
score = models.IntegerField(default=0)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.user.username} - {self.quiz.name}"
class UserAnswer(models.Model):
id = models.AutoField(primary_key=True)
user_quiz = models.ForeignKey(UserQuiz, on_delete=models.CASCADE, related_name='user_answers')
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='user_answers')
choice = models.ForeignKey(Choice, on_delete=models.CASCADE, related_name='user_answers')
def __str__(self):
return f"{self.user_quiz.user.username} - {self.question.question}"
class Meta:
unique_together = ('user_quiz', 'question') # Empêche qu'un utilisateur réponde plusieurs fois à la même question.