2009-03-16 23 views
6

Tôi không thể tập luyện cách bạn có thể lấy các đối tượng từ Kho lưu trữ Công cụ ứng dụng của Google bằng cách sử dụng get_by_id. Đây là mô hìnhphương thức get_by_id trên Lớp mô hình trong Google App Engine Datastore

from google.appengine.ext import db 

class Address(db.Model): 
    description = db.StringProperty(multiline=True) 
    latitude = db.FloatProperty() 
    longitdue = db.FloatProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

Tôi có thể tạo chúng, đặt chúng và truy xuất chúng bằng gql.

address = Address() 
address.description = self.request.get('name') 
address.latitude = float(self.request.get('latitude')) 
address.longitude = float(self.request.get('longitude')) 
address.put() 

Một lưu địa chỉ có giá trị cho

>> address.key() 
aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw 
>> address.key().id() 
14 

tôi có thể tìm thấy chúng sử dụng phím

from google.appengine.ext import db 
address = db.get('aglndWVzdGJvb2tyDQsSB0FkZHJlc3MYDQw') 

Nhưng không thể tìm thấy chúng bằng id

>> from google.appengine.ext import db 
>> address = db.Model.get_by_id(14) 

Các địa chỉ là Không, khi tôi thử

>> Address.get_by_id(14) 
AttributeError: type object 'Address' has no attribute 'get_by_id' 

Tôi có thể tìm bằng id bằng cách nào?

EDIT: Hóa ra tôi là một thằng ngốc và đang cố gắng tìm một Mô hình địa chỉ trong một hàm có tên Địa chỉ. Cảm ơn câu trả lời của bạn, tôi đã đánh dấu Brandon là câu trả lời chính xác như anh ấy đã nhận được đầu tiên và đã chứng minh rằng tất cả nên hoạt động.

Trả lời

22

Tôi chỉ cố gắng nó trên shell.appspot.com và có vẻ như để làm việc tốt: Phím

Google Apphosting/1.0 
Python 2.5.2 (r252:60911, Feb 25 2009, 11:04:42) 
[GCC 4.1.0] 

>>> class Address(db.Model): 
    description = db.StringProperty(multiline=True) 
    latitude = db.FloatProperty() 
    longitdue = db.FloatProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

>>> addy = Address() 
>>> addyput = addy.put() 
>>> addyput.id() 
136522L 
>>> Address.get_by_id(136522) 
<__main__.Address object at 0xa6b33ae3bf436250> 
+0

cảm ơn vì đã kiểm tra nó .. tôi sẽ điều tra thêm – tarn

+2

sẽ +2 nếu tôi có thể cũng làm cho tôi biết về vỏ công cụ ứng dụng – tarn

+0

điều này hoàn toàn hoạt động – Neelesh

6

Một của ứng dụng là danh sách (hiện vật, id_or_name) tuples - cho đơn vị gốc, luôn luôn chỉ có một yếu tố dài. Do đó, chỉ một ID không xác định được thực thể - cũng cần có loại thực thể. Khi bạn gọi db.Model.get_by_id (x), bạn đang yêu cầu thực thể có khóa (Model, x). Những gì bạn muốn là gọi Address.get_by_id (x), tìm nạp thực thể có khóa (Address, x).

0

Bạn nên sử dụng loại dài trong get_by_id ("ở đây"). Loại Int phải có thông báo lỗi.

+0

Mặc dù đây có thể không phải là câu trả lời cho câu hỏi này nhưng nó đã giải quyết được vấn đề của tôi. – Nico

Các vấn đề liên quan