Django викторина приложение хранение ответов пользователей

Я создаю приложение Django для викторин, в котором будут ежемесячные викторины. Предположим, будет викторина за июль и викторина за август. Теперь предположим, что у нас есть пользователь по имени "Sovit". Допустим, в каждом тесте 42 вопроса, поэтому я хочу хранить каждый ответ, который выбрал пользователь, где-то в базе данных. Например, для июльского теста все 42 ответа должны быть сохранены где-то, и то же самое для августовского. Сейчас я думаю о том, чтобы иметь JSON-файл, связанный с пользователем, а затем хранить ответы каждого теста в нем. Это поможет мне получить данные в формате JSON для анализа данных. Но мне не очень нравится этот метод хранения ответов. Что может быть не так с этой конструкцией? Есть ли какой-нибудь другой метод, который я могу попробовать?

текущие модели :

class Quiz(models.Model):

    id = models.AutoField(primary_key=True)
    quiz_name = models.CharField(max_length=500)
    month = models.CharField(max_length=250,null=True,blank=True)
    year = models.CharField(max_length=250,null=True,blank=True)


    def __str__(self):
        return self.quiz_name+"-"+str(self.month)+"-"+str(self.year)

    def save(self,*args,**kwargs):
        if not self.quiz_name:
            self.quiz_name = self.quiz_name+"-"+str(self.month)+"-"+str(self.year)
        super(Quiz,self).save(*args,**kwargs)

    
class Question(models.Model):

    id = models.AutoField(primary_key=True)
    question = models.CharField(max_length=500)
    quiz = models.ForeignKey(Quiz,on_delete=models.CASCADE)
    month = models.CharField(max_length=250,null=True,blank=True)
    year = models.CharField(max_length=250,null=True,blank=True)

    def __str__(self):
        return self.question+"-"+str(self.month)+"-"+str(self.year)


    

class Answers(models.Model):
    id = models.AutoField(primary_key=True)
    answer = models.CharField(max_length=500)
    score = models.IntegerField()

    def __str__(self):
        return self.answer


class UserQuizAnswer(models.Model):
    options = (
        (0,0),(1,1),(2,2),(3,3)
    )
    id = models.AutoField(primary_key=True)
    question = models.ForeignKey(Question,on_delete=models.CASCADE,null=True,blank=True)
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    selcted_index = models.IntegerField(choices=options)


    def __str__(self):
        return self.user.username + "-" + str(uuid.uuid4())[:10]


class StudentFile(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.TextField(null=True,blank=True)
    student = models.ForeignKey(User,on_delete=models.CASCADE)
    student_netid = models.IntegerField(null=True,blank=True)
    student_email = models.EmailField(null=True,blank=True)
    file = models.FileField(upload_to="Student/Files/",null=True,blank=True)
    month = models.CharField(max_length=250,null=True,blank=True)
    year = models.CharField(max_length=250,null=True,blank=True)

Во-первых, вам не нужны поля месяц и год в модели вопроса (вы уже храните эту информацию в модели викторины). Я думаю, что вы забыли связать модели ответов с моделями вопросов.

Для хранения упакованных данных можно использовать поле JSONField

Вернуться на верх