Python Parse模块在执行Query.filter或Query.get时出错

时间:2013-10-10 09:38:22

标签: python parse-platform

使用www.parse.com并按照说明操作:

https://github.com/dgrtwo/ParsePy

Python 2.7.3(默认,2012年8月1日,05:14:39)

我创建了一个名为testClass

的类
class testClass(Object):
    """Create a Test Class Object"""
    testId = ''
    def __init__(self,param):
        logging.info("testClass() New testClass object created()")
        print 'testClass() New testClass object created()'
        self.testId = param

我可以使用:

在Parse中创建新对象
def testClassFromParse(param):
    try:
        testObj = testClass(param)
        testObj.save()
        hello = testClass.Query.filter(objectId='TQysq4uOp6')
        print type(hello)
        print hello
    except Exception,e:
        print traceback.format_exc()
        print 'testClassFromParse() Error'

每次执行时,我的新行都是在Parse Dashboard中成功创建的,但是当我想根据示例使用testId或objectId检索Object时,我得到:

testClass() New testClass object created()
<class 'parse_rest.query.Queryset'>


File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 58, in get
    return self.filter(**kw).get()
  File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 142, in get
    results = self._fetch()
  File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 117, in _fetch
    return self._manager._fetch(**options)
  File "/usr/local/lib/python2.7/dist-packages/parse_rest/query.py", line 41, in _fetch
    return [klass(**it) for it in klass.GET(uri, **kw).get('results')]
TypeError: __init__() got an unexpected keyword argument 'objectId'

testClassFromParse() Error

我可以确认通过我的Dashboard objectId存在。 还尝试使用不同的属性:testID,但结果相同。

任何想法,如何检索对象然后访问其元素?

由于

1 个答案:

答案 0 :(得分:3)

问题是您为替换内置的__init__定义了testClass Object方法。如documentation中所述,应该将Parse对象创建为:

class GameScore(Object):
    pass

欢迎您向类中添加额外的特定于应用程序的方法,但如果替换__init__方法(就像使用__init__(self, param)一样),则无法再构建对象从Parse获得一个值。

在类中设置testId的正确方法是将其作为命名参数提供:

class testClass(Object):
    pass

testObj = testClass(testId=param)

现在,假设您在初始化类时确实需要一些行为:例如,在您的__init__中,您需要提供testId,并且您每次都要记录一条消息对象已创建。您可以通过编写__init__方法然后在完成后调用超类的__init__方法来执行此操作:

class testClass(Object):
    """Create a Test Class Object"""
    def __init__(self, **kwargs):
        logging.info("testClass() New testClass object created()")
        print 'testClass() New testClass object created()'

        assert "testId" in kwargs

        Object.__init__(self, **kwargs)