2012-03-22 4 views
2

Я использую App Engine, SDK 1.6.3 с Python 2.7.App Engine - AttributeError: объект 'function' не имеет атрибута 'id'

Я создал модель, как это:

class MyModel(db.Model): 
    name = db.StringProperty() 
    website = db.StringProperty() 

я могу перебирать и видеть все, кроме ключевых идентификаторов. Например, в интерактивной оболочке я могу запустить это:

from models import * 
list = MyModel.all() 
for p in list: 
    print(p.name) 

и печатает имя каждой сущности. Но когда я запускаю это:

from models import * 
list = MyModel.all() 
for p in list: 
    print(p.key.id) [or p.key.name or p.key.app] 

Я получаю AttributeError:

Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/admin/__init__.py", line 317, in post 
    exec(compiled_code, globals()) 
    File "<string>", line 4, in <module> 
AttributeError: 'function' object has no attribute 'id' 

Может кто-нибудь пожалуйста, помогите мне ??

ответ

7

ключ() и id() являются методами экземпляра. Попробуйте с скобкой:

for p in list: 
     print(p.key().id()) 

См documentation.

+0

Awesome; благодаря! Я не могу поверить, что все было так просто ... –

1

key() is a method и id() is also a method.
Таким образом, вы должны были бы сделать:

from models import MyModel 
lst = MyModel.all() 
for p in lst: 
    print(p.key().id()) 

Другие ноты:

  1. стараются избегать, когда это возможно, from [something] import *. Это может вызвать проблемы с отлаживанием пространства имен.
  2. Не теневые встроенные модули с именами переменных. Например. list не должен использоваться.
Смежные вопросы