首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Django模型中存储调查问卷的答案

在Django模型中存储调查问卷的答案
EN

Stack Overflow用户
提问于 2020-06-08 04:44:20
回答 1查看 170关注 0票数 0

我有一个django模型,它应该存储用户对问卷的回答。有许多类型的问卷,但其中一种可以像这样简单(尽管许多更复杂):

代码语言:javascript
运行
复制
What is your name?
What is your age?
What is your height?
What is your age?

我想知道如何创建一个模型来存储表单中提交的数据。现在,我使用了一个简单的JSON字段:

代码语言:javascript
运行
复制
from django.contrib.postgres.fields import JSONField
data = JSONField(default=dict)

然而,当问卷变得更长时,这就变得困难了。做这件事最好的方法是什么?如果JSON字段是最好的方法,那么假设可能有不同类型的问题(输入字段、多项选择等),我应该如何构造json?谢谢!!

EN

Stack Overflow用户

发布于 2020-06-08 08:05:34

在postgres中处理JSONField时,主要要记住的是磁盘空间。因为,在JSON中,我们必须同时存储key和value,而在普通字段中,key已经定义,我们不必将其存储在每一行中。所以基本上,你可以优化的是关键,我认为它可以是一个问题编号的id,而不是完整的问题。

基本上,你可以有如下的问题模型:

代码语言:javascript
运行
复制
Question(models.Model):
    content = models.CharField(max_length=100)

您可以使用JSON数据,如下所示:

代码语言:javascript
运行
复制
{
    <question_id_1> : "Answer 1",
    <question_id_2> : "Answer 2"
}

这将节省大量的空间,虽然您必须在获取数据后进行映射,但它对数据库的压力更小,效率更高。因为你没有固定类型的答案类型,所以你可以将值保存在JSON中,然后根据question_type推断它的含义,例如,答案值是多选答案字段的id值,还是只是一个句子作为答案。为此,您可以有一个有问题的类型字段,这将在获取结果后帮助您。

您可以做的另一件事是不将其存储在JSON字段中,您可以有一个不同的表,其中您有外键问题,如下所示:

代码语言:javascript
运行
复制
Answer(models.Model):
    question = models.ForeignKey("Question", on_delete=models.CASCADE, related_name="answers")
    content = models.CharField(max_length=200)
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62251432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档