Django在json对象的视图中查询MongoDB ObjectIds

时间:2016-11-26 03:45:12

标签: python django mongodb mongoengine

我目前正致力于在Python Django中查询MongoDB对象,并且如果需要其他属性,则可以毫无困难地创建查询。

但是我需要修改我的查询以专门过滤ObjectIds,返回一个或没有找到的对象。

从我的Javascript中我将json数据传递给我的Django views.py,这是目前的样子:

def update(request):
   #AJAX data
   line = json.loads(request.body)

   _id = line['_id']
   print("OBJECT_ID: %s" % (_id))
   another_id = line['another_id']
   print("ANOTHER_ID: %s" % (another_id))

*不要混淆another_id,有些对象具有相同的another_id,不幸的是必须保持这样。这就是我无法查询更新的原因,因为它会更新所有重复项。这就是我需要ObjectId的原因。

在这里查看打印出来的内容:

{u'$oid': u'582fc95bb7abe7943f1a45b2'}
ANOTHER_ID: LTJ1277

因此我在views.py中添加了这样的查询:

    try:
       Line.objects(_id=_id).update(set__geometry=geometry, set__properties=properties)
       print("Edited: " + another_id)
    except:
       print("Unedited.")

但它没有返回任何对象。

  

所以我想知道查询本身是否无法将json正文中的$oid识别为"_id" : ObjectId("582fc95bb7abe7943f1a45b2")

*编辑:

from bson.objectid import ObjectId

我使用以下内容编辑了views.py

    _id = line['_id']
    print("VALUES: %s" % (_id.get('$oid')))

    try:
    Line.objects(_id=ObjectId(_id.get('$oid'))).update(set__geometry=geometry, set__properties=properties)

输出:

VALUES: 582fc95bb7abe7943f1a498c

没有运气。仍然没有查询/没有找到。

1 个答案:

答案 0 :(得分:2)

根据此Using MongoDB with Django参考网站:

  

请注意,要访问唯一对象ID,请使用" id"而不是" _id"。

我尝试修改以下代码:

Line.objects(_id=ObjectId(_id.get('$oid'))).update(set__geometry=geometry, set__properties=properties)

Line.objects(id=ObjectId(_id.get('$oid'))).update(set__geometry=geometry, set__properties=properties)

......现在它运作正常。将此问题留给可能需要此问题的其他人。