【问题标题】:How to save frontend (react) JSON data in django particular table?如何在 django 特定表中保存前端(反应)JSON 数据?
【发布时间】:2019-03-12 09:48:17
【问题描述】:

前端(React)给了我这种类型的 json 数据:

{
    "question": [{
            "id": '0',
            "title": 'Click to write the question text',
            "choice": ['Click to write Choice 1', 'Click to write Choice 2', 'Click to write Choice 3'],
            "answerType": 'singleAnswer',
            "answerStyle": 'vertical',
        },
        {
            "id": '1',
            "title": 'Click to write the question text',
            "choice": ['Click to write Choice 1', 'Click to write Choice 2', 'Click to write Choice 3'],
            "answerType": 'singleAnswer',
            "answerStyle": 'horizontal',
        },
        {
            "id": '2',
            "title": 'Click to write the question text',
            "choice": ['Click to write Choice 1', 'Click to write Choice 2', 'Click to write Choice 3'],
            "answerType": 'multipleAnswer',
            "answerStyle": 'horizontal',
        },
    ]
}

我需要将它保存在我的 Django 中的 SQLite 数据库中。

  • 如何保存choice 字段?
  • 如果我分别制作Question和Choice模型,如何在选择表中一一保存json选择?如何在前端取回这些数据?
  • 我应该如何设计我的模型?我应该在我的 API 视图中写些什么?

【问题讨论】:

  • 您好,欢迎来到 SO。您可能没有意识到,但是您提出问题的方式基本上是要求我们设计和实现此功能,这完全超出了 SO 的范围。请注意,您的前两个问题(如何保存和检索数据)在 Django 非常全面的文档中有答案(全部或部分),而最后一个问题(实际上是最后两个问题 - 这是两个问题合二为一)真的取决于您的应用程序的要求和您自己的设计选择,因此我们无法真正回答它们。
  • nb:删除了 reactjs 和 javascript 标签,因为问题实际上是关于 Django 的(客户端是 react 应用程序的事实在这里完全无关紧要)。
  • 抱歉标签。实际上我已经设计了数据库并为这个设计制作了 api。但问题是当前端给我一个数据时它只给出问题,因为我将问题和选择模型分开。而且我的api也不一样。我为问题制作了一个 api,为选择制作了另一个 api,为响应或投票制作了另一个 api。但问题是前端给了我这种数据格式。那么我是否需要先加载数据并按部分分隔数据,然后将数据保存在特定表中?我是一名初级开发人员。我的知识有点有限。
  • 您可能应该将您提供的信息添加到问题中。是的,如果你不能在前端正确地分离它,那么 django 视图会做一些解析 json 的工作是有道理的。
  • @iftekharprolific 请编辑您的问题以添加这些详细信息。 wrt / react客户端发送给您的内容与您的模型设计方式之间的区别,这是一个非常常见的情况(不仅适用于rest API)-您的模型表示关系数据库模式,几乎从来没有“用户”(在最一般的定义中——这里的反应应用程序是你的 API 的“用户”)查看这些数据,所以你不能指望一对一的映射。作为开发人员,您的工作是在业务视图和数据库实现之间进行转换。

标签: python django


【解决方案1】:

这是一个非常广泛的问题,在某种程度上取决于您应用程序的其余部分的设计和使用情况。

这个问题有几种方法,我将尝试简单地解决:

  1. 如果您确实单独保存选择 (related normalization SO question),您将拥有一个 1 to many 模型,甚至可能是 many to many 模型。你可以阅读更多关于它here

  2. 您可以将它们保存为问题模型(非规范化)中的单个(字符串)列,并在客户端或根据您提供的 json 在 django 中连接数组。您可以使用custom fields 进行此类操作

  3. 鉴于始终有相同数量的选择(或至少包含,例如最多 4 个选择),您也可以避免为每个选择添加一列,再次使用自定义字段,甚至 custom model save method

选择一种方法将影响您将数据返回给客户端的方式。 此外,您应该考虑如何查找问题和选项,以及是否需要能够查找单个选项。 您还考虑,如果您将来需要另一个模型,例如 Answer 与这些相同的选择相关,您将遇到类似的问题,并且可能直接的方法是 1(标准化为 QuestionsChoices )。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2021-02-19
  • 2021-02-22
  • 1970-01-01
  • 2019-07-20
  • 2012-08-08
  • 2022-08-23
相关资源
最近更新 更多