2010-06-15 24 views
16

tôi có thể sử dụng một chút giúp đỡ trong đất AppEngine ...tìm nạp chỉ Key/id từ một ReferenceProperty trong App Engine

Sử dụng [Python] API tôi có thể tạo mối quan hệ giống như ví dụ này từ các tài liệu:

class Author(db.Model): 
    name = db.StringProperty() 

class Story(db.Model): 
    author = db.ReferenceProperty(Author) 

story = db.get(story_key) 
author_name = story.author.name 

Như tôi đã hiểu, ví dụ đó sẽ thực hiện hai truy vấn kho dữ liệu. Một để lấy câu chuyện và sau đó một để deference Inorder tác giả để truy cập vào tên. Nhưng tôi muốn để có thể lấy id, do đó, làm một cái gì đó như:

story = db.get(story_key) 
author_id = story.author.key().id() 

Tôi muốn chỉ nhận được id từ tham chiếu. Tôi không muốn phải deference (do đó truy vấn kho dữ liệu) giá trị ReferenceProperty.

Từ đọc các tài liệu hướng dẫn nó nói rằng

giá trị của một ReferenceProperty là một khóa

Dẫn tôi nghĩ rằng tôi chỉ có thể gọi .id() trên giá trị của tài liệu tham khảo. Nhưng nó cũng nói:

Mô hình ReferenceProperty cung cấp các tính năng cho các giá trị thuộc tính khóa như dereferencing tự động.

Tôi không thể tìm thấy bất kỳ điều gì giải thích khi tham chiếu này diễn ra?
Có an toàn không khi gọi .id() trên giá trị của ReferenceProperty?
Có thể giả định rằng gọi .id() sẽ không gây tra cứu kho dữ liệu không?

+0

Xem [ReferenceProperty: .get_value_for_datastore() -> .get_key() - Google Groups] (https://groups.google.com/forum/#!topic/google-appengine -python/Ai90diACDiA) quá – Pat

Trả lời

26

Trả lời câu hỏi của riêng tôi vì lợi ích của việc giúp đỡ người tìm kiếm đồng ...

Như bị nghi ngờ gọi story.author.key(). Id() hoặc thậm chí story.author.id() sẽ cho kết quả truy vấn kho dữ liệu . Phương pháp đúng dictated by the API docs là:

story = db.get(story_key) 
author_id = Story.author.get_value_for_datastore(story).id() 
Các vấn đề liên quan