我正在创建一个Django测试应用程序,其中将有每月测试。所以,假设七月有一个测验,八月份有一个测验。现在让我们假设我们有一个名为"Sovit“的用户。现在假设每个测验有42个问题。因此,我想存储用户在数据库中选择的每个响应。因此,就像7月份的测试一样,所有42个响应都必须存储在某个地方,8月份同样如此。现在,我正在考虑有一个与用户关联的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)发布于 2022-07-13 23:42:10
首先,您不需要在问题模型中的字段月份和年(您已经将此信息存储在测验模型中)。我想你忘了问题模型的链接答案了。
要实现UserQuizAnswer,可以使用JSONField存储打包的数据
https://stackoverflow.com/questions/72972071
复制相似问题