解析 - 使用REST API将新的PFObject设置为另一个新的PFObject键的值

时间:2014-07-01 05:40:25

标签: python ios rest parse-platform

使用iOS Parse SDK,我可以成功创建新的PFObject A并将其设置为另一个新PFOBject B的值:

PFObject * objectA = [PFObject objectWithClassName:@"objectA"];
[objectA setValue:@"Test Text" forKey:@"text"];

PFObject * objectB = [PFObject objectWithClassName:@"objectB"];
[objectB setValue:objectA forKey:@"objectA"];

当我执行[PFObject saveAll:(NSArray*)objects]时,Parse将为objectId生成objectA,并将其设置为objectB上的键中的指针值。

如何使用REST API (PYTHON)执行此操作。从文档中可以看出,在将指针作为值传递给我的类objectB的键时,我必须提供以下内容:

{"__type": "Pointer", 
"className": "objectA", 
"objectId":objectA.get('objectId')}

但是,当我创建新的objectA时,objectId尚未存在。

这是我的python代码:

def generateFakeMessages():
    messageFactory = MessageFactory(retrieveUsers())

    appKeys = {
       "X-Parse-Application-Id": "XXXX",
       "X-Parse-REST-API-Key": "XXXX",
       "Content-Type": "application/json"}

    mList = []
    objectA = messageFactory.fakeMessage()
    arrayOfObjectBs = messageFactory.fakeRecipients()

    mList.append({
             "method": "POST",
             "path": "/1/classes/testMessageClass",
             "body": objectA
           })
    for objectB in arrayOfObjectBs:
        objectB['objectAPointer'] = {
                "__type": "Pointer",
                "className": "testMessageClass",
                "objectId": objectA.get('objectId')
                }
        mList.append({
             "method": "POST",
             "path": "/1/classes/recipients",
             "body": objectB
               })

    requests = {"requests":mList}
    connection = httplib.HTTPSConnection('api.parse.com', 443)
    connection.connect()
    connection.request('POST', '/1/batch', json.dumps(requests), appKeys)
    result = json.loads(connection.getresponse().read())
    print result

2 个答案:

答案 0 :(得分:0)

根据this question on the Parse forumsaveAll:在后​​台使用batches,如果它确定对象图中有未保存的子项,则批量处理它们,然后使用该结果能够正确地拯救父母。

要自己使用REST API执行此操作,您需要自行完成批处理。批次每批限制为50次创建/更新/删除操作。

如果您有50个objectA个实例,每个实例都有objectB引用它,您可以分两批进行。

答案 1 :(得分:0)

这是使用批次的更正代码。而不是为

设置指针表示
objectB['message']

我设置了实际的对象。 Parse对上传的依赖性进行了排序。

def generateFakeMessages():
    messageFactory = MessageFactory(retrieveUsers())

    appKeys = {
       "X-Parse-Application-Id": "XXXX",
       "X-Parse-REST-API-Key": "XXXX",
       "Content-Type": "application/json"}

    mList = []
    objectA = messageFactory.fakeMessage()
    arrayOfObjectBs = messageFactory.fakeRecipients()

    mList.append({
             "method": "POST",
             "path": "/1/classes/testMessageClass",
             "body": objectA
           })
    for objectB in arrayOfObjectBs:
        objectB['message'] = fakeMessage
        mList.append({
             "method": "POST",
             "path": "/1/classes/recipients",
             "body": objectB
               })


    requests = {"requests":mList}
    connection = httplib.HTTPSConnection('api.parse.com', 443)
    connection.connect()
    connection.request('POST', '/1/batch', json.dumps(requests), appKeys)
    result = json.loads(connection.getresponse().read())
    print result