57 lines
No EOL
2.3 KiB
Python
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. |