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