【问题标题】:Unable to access dict values indjango view无法在 django 视图中访问 dict 值
【发布时间】:2014-06-23 21:03:21
【问题描述】:

我想保存从 javascript 通过 ajax 传递给我的数据库的对象数组。这是我的视图代码:

data2 = json.loads(request.raw_get_data)
    for i in data2:
        print(key)
        obj = ShoppingCart(quantity = i.quantity , user_id = 3, datetime = datetime.now(), product_id = i.pk)
        obj.save()

    return render_to_response("HTML.html",RequestContext(request))

在第一行之后,我在字典中得到了这个: [{'model': 'Phase_2.product', 'fields': {'name': 'Bata', 'category': 2, 'quantity': 1, 'subcategory': 1, 'count': 2, 'price': 50}, 'imageSource': None, 'pk': 1}]

(目前数组中只有一个对象)

我希望能够访问数量、id 等各个字段,以便将数据保存到我的数据库中。当我调试此代码时,它在“i”上给出了一个名称错误。我也尝试访问这样的字段:data2[0].quantity,但它给出了这个错误:{AttributeError}dict object has no attribute quantity

修改后的代码:

for i in data2:
        name = i["fields"]["name"]
        obj = ShoppingCart(quantity = i["fields"]["quantity"] , user_id = 3, datetime = datetime.now(), product_id = i["fields"]["pk"])
        obj.save()

【问题讨论】:

    标签: python arrays loops object dictionary


    【解决方案1】:

    你可以试试:

    i['fields']['quantity']
    

    json.loads() 会返回一个字典,应该通过键访问。

    【讨论】:

      【解决方案2】:

      它可能会帮助您以正确的格式可视化返回的 dict:

      [
          {
           'model': 'Phase_2.product',
           'fields': {
                      'name': 'Bata',
                      'category': 2, 
                      'quantity': 1, 
                      'subcategory': 1, 
                      'count': 2, 
                      'price': 50
                     },
           'imageSource': None,
           'pk': 1
          }
      ]
      

      您的错误最可能的原因是您试图访问内部 'fields' 字典的值,就好像它们属于外部 i 字典一样。

      # Incorrect
      i["quantity"]
      # Gives KeyError
      
      # Correct
      i["fields"]["quantity"]
      

      编辑

      你的更新也有同样的问题:

      # Incorrect
      i["fields"]["pk"]
      
      # Correct
      i["pk"]
      

      "pk" 字段在外部字典中,而不是内部 "fields" 字典中。

      【讨论】:

      • 非常感谢!还有一个问题。当我在“for i in data2”中访问 i['fields']['quantity'] 时,我仍然得到同样的错误。但是当我这样做时:data2[0]['fields']['quantity'],它给出了正确的值。你能告诉我我做错了什么吗?
      • 问题和原来的一样。你这次访问“pk”不正确。
      • 不,但是当我这样做时它应该给我正确的值“i[”fields”][“name”],不是吗?它给出了一个错误。
      • 我确实将其更改为 i['pk']。它仍然给我同样的错误。
      • 您要么错误地复制了字典的格式,要么在某处打错字,要么有两个变量名为i。我通过您描述的方法访问您发布的字典没有问题。
      猜你喜欢
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多