2013-10-18 13 views
1

问题: 我有一个数据库有3个外键,每天我都必须按照以下规则收集用户输入;Django1.5 - python2.7 - 如何显示和更新具有3个外键的数据库

  1. 如果在db中已经有数据存在,那么检索并显示数据。数据将导致多行,但每行基于3个外键(产品,分支,merge_version)和date_created(auto_add = True)进行唯一查询

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

  3. 如果用户单击一个提交按钮,则应使用以下规则在数据库中更新数据;

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

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

当我点击提交,只有最后一行数据被保存,因为request.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']} 

如果我有个人的每一行提交按钮,我得到下面的request.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?

+0

是否有任何Django专家来回答我的问题? – Sakthi

+0

仍然没有人提供有关此设计问题的帮助? – Sakthi

回答

1

基本上问题出在发送帖子请求的客户端。数据在客户端没有正确打包!

创建此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" 
    ] 
} 

我建议改变这对加密钥(主键)称为产品的一个更平,而所有的阵列值与一个特定的产品。 所以它看起来像这样!

{ 
    "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" 
     ] 
    } 
} 
相关问题