我有一个django模型,它应该存储用户对问卷的回答。有许多类型的问卷,但其中一种可以像这样简单(尽管许多更复杂):
What is your name?
What is your age?
What is your height?
What is your age?我想知道如何创建一个模型来存储表单中提交的数据。现在,我使用了一个简单的JSON字段:
from django.contrib.postgres.fields import JSONField
data = JSONField(default=dict)然而,当问卷变得更长时,这就变得困难了。做这件事最好的方法是什么?如果JSON字段是最好的方法,那么假设可能有不同类型的问题(输入字段、多项选择等),我应该如何构造json?谢谢!!
发布于 2020-06-08 08:05:34
在postgres中处理JSONField时,主要要记住的是磁盘空间。因为,在JSON中,我们必须同时存储key和value,而在普通字段中,key已经定义,我们不必将其存储在每一行中。所以基本上,你可以优化的是关键,我认为它可以是一个问题编号的id,而不是完整的问题。
基本上,你可以有如下的问题模型:
Question(models.Model):
content = models.CharField(max_length=100)您可以使用JSON数据,如下所示:
{
<question_id_1> : "Answer 1",
<question_id_2> : "Answer 2"
}这将节省大量的空间,虽然您必须在获取数据后进行映射,但它对数据库的压力更小,效率更高。因为你没有固定类型的答案类型,所以你可以将值保存在JSON中,然后根据question_type推断它的含义,例如,答案值是多选答案字段的id值,还是只是一个句子作为答案。为此,您可以有一个有问题的类型字段,这将在获取结果后帮助您。
您可以做的另一件事是不将其存储在JSON字段中,您可以有一个不同的表,其中您有外键问题,如下所示:
Answer(models.Model):
question = models.ForeignKey("Question", on_delete=models.CASCADE, related_name="answers")
content = models.CharField(max_length=200)https://stackoverflow.com/questions/62251432
复制相似问题