Django1.5 python2.7如何显示和更新具有3个外键的数据库

2024-09-29 23:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

问题: 我有一个有3个外键的数据库,每天我都要用以下规则收集用户输入

  1. 如果数据库中已经存在今天日期的数据,则检索并显示数据。数据将产生多行,但每行都是根据3个外键(product、branch、merge\u version)和创建日期(auto\u add=True)唯一查询的。

  2. 如果查询没有返回任何内容,请使用类实例创建一个对象并显示空行

  3. 如果用户只需点击一个提交按钮,则数据库中的数据将按以下规则更新:

    • 对于提交的每一行,验证数据库中是否已经存在现有行,如果存在行,则更新该行,否则创建新行

我尝试在for循环中为每个产品创建多个表单实例,并将字典发送到模板页面,它显示的行没有任何问题。你知道吗

当我单击submit时,只保存最后一行数据,因为请求.POST返回以下输出

    QueryDict: {u'build_date': [u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'2013-10-11', u'
    2013-10-11'], u'cln': [u'5555', u'2222', u'2222', u'2222', u'2222', u'2222', u'2222', u'090909'], u'logs': [u'no logs', u'no logs', u'no logs', u'no logs', u'no logs', u'n
    o logs', u'no logs', u'no logs'], u'rpmt_status': [u'R', u'R', u'R', u'R', u'R', u'R', u'R', u'R'], u'rpmt_result': [u'F', u'F', u'F', u'F', u'F', u'F', u'F', u'F'], u'com
    ments': [u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg', u'hghjg'], u'cbs_other_bugs': [u'666', u'666', u'666', u'666', u'666', u'666', u'666', u'666
    '], u'build_num': [u'12345', u'4444', u'8888', u'8888', u'8888', u'8888', u'8888', u'080808'], u'cbs_merge_blocker': [u'76767', u'76767', u'76767', u'76767', u'76767', u'7
    6767', u'76767', u'76767'], u'csrfmiddlewaretoken': [u'8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw'], u'cbs_waived': [u'89898', u'89898', u'89898', u'89898', u'89898', u'89898', u'89
    898', u'89898']}

如果我有一个单独的提交按钮为每一行我得到下面请求.POST你知道吗

        QueryDict: {u'build_date': [u'2013-10-11'], u'cln': [u'23423'], u'logs': [u'no logs'], u'rpmt_status': [u'R'], u'rpmt_result': [u'F'], u'comments': [u'hghjg'], u'cbs_other_bugs': [u'666'], u'build_num': [u'12345'], u'cbs_merge_blocker': [u'76767'], u'csrfmiddlewaretoken': [u'8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw'], u'cbs_waived': [u'89898']}

但是我想用一个提交按钮保存整个数据库。 请告诉我哪里出错了? 或者除了使用ModelForm之外,还有什么更好的方法来处理这种情况?你知道吗


Tags: 数据实例no用户build数据库规则merge
1条回答
网友
1楼 · 发布于 2024-09-29 23:27:39

基本上,问题出在发送post请求的客户端。客户端数据未正确打包!你知道吗

创建这个json数据的javascript没有遵循服务器端预期的数据交换格式。你知道吗

解决方法是用适当的字典格式打包数据。旧的数据格式就是这样

{
    "build_date": [
        "2013-10-11",
        "2013-10-11",
        "2013-10-11",
        "2013-10-11",
        "2013-10-11",
        "2013-10-11",
        "2013-10-11",
        "2013-10-11"
    ],
    "build_num": [
        "12345",
        "4444",
        "8888",
        "8888",
        "8888",
        "8888",
        "8888",
        "080808"
    ],
    "cbs_merge_blocker": [
        "76767",
        "76767",
        "76767",
        "76767",
        "76767",
        "76767",
        "76767",
        "76767"
    ],
    "cbs_other_bugs": [
        "666",
        "666",
        "666",
        "666",
        "666",
        "666",
        "666",
        "666"
    ],
    "cbs_waived": [
        "89898",
        "89898",
        "89898",
        "89898",
        "89898",
        "89898",
        "89898",
        "89898"
    ],
    "cln": [
        "5555",
        "2222",
        "2222",
        "2222",
        "2222",
        "2222",
        "2222",
        "090909"
    ],
    "comments": [
        "hghjg",
        "hghjg",
        "hghjg",
        "hghjg",
        "hghjg",
        "hghjg",
        "hghjg",
        "hghjg"
    ],
    "csrfmiddlewaretoken": [
        "8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw"
    ],
    "logs": [
        "no logs",
        "no logs",
        "no logs",
        "no logs",
        "no logs",
        "no logs",
        "no logs",
        "no logs"
    ],
    "rpmt_result": [
        "F",
        "F",
        "F",
        "F",
        "F",
        "F",
        "F",
        "F"
    ],
    "rpmt_status": [
        "R",
        "R",
        "R",
        "R",
        "R",
        "R",
        "R",
        "R"
    ]
}

我建议将此更改为添加一个更高级别的键(主键),称为product,并且所有数组值都与一个特定的产品相关。 所以看起来像这样!你知道吗

{
   "product1":{
      "build_date":[
         "2013-10-11"
      ],
      "cln":[
         "23423"
      ],
      "comments":[
         "hghjg"
      ],
      "cbs_merge_blocker":[
         "76767"
      ],
      "rpmt_status":[
         "R"
      ],
      "logs":[
         "no logs"
      ],
      "cbs_other_bugs":[
         "666"
      ],
      "csrfmiddlewaretoken":[
         "8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw"
      ],
      "build_num":[
         "12345"
      ],
      "cbs_waived":[
         "89898"
      ],
      "rpmt_result":[
         "F"
      ]
   },
   "product2":{
      "build_date":[
         "2013-10-11"
      ],
      "cln":[
         "23423"
      ],
      "comments":[
         "hghjg"
      ],
      "cbs_merge_blocker":[
         "76767"
      ],
      "rpmt_status":[
         "R"
      ],
      "logs":[
         "no logs"
      ],
      "cbs_other_bugs":[
         "666"
      ],
      "csrfmiddlewaretoken":[
         "8sNCLiUu23tvqLe1QHdJp1c5sQJmhevw"
      ],
      "build_num":[
         "12345"
      ],
      "cbs_waived":[
         "89898"
      ],
      "rpmt_result":[
         "F"
      ]
   }
}

相关问题 更多 >

    热门问题