2010-06-15 10 views
16

मैं AppEngine देश में थोड़ी सी मदद इस्तेमाल कर सकते हैं App इंजन में एक ReferenceProperty से आईडी ...ला रहा है सिर्फ कुंजी/

का उपयोग करते हुए [अजगर] एपीआई मैं डॉक्स से इस उदाहरण की तरह संबंध बनाने:

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 

जैसा कि मैं इसे समझता हूं, वह उदाहरण दो डेटास्टोर प्रश्नों को बनाएगा। एक कहानी लाने के लिए और फिर नाम का उपयोग करने के लिए लेखक इनॉर्डर को सम्मानित करने के लिए।

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

मैं करना चाहते हैं तो बस संदर्भ से आईडी मिलती है: लेकिन मैं आईडी लाने के लिए सक्षम हो, तो कुछ ऐसा करना चाहते हैं। मैं रेफरेंसप्रोपर्टी मान को डिफरेंस (इसलिए डेटास्टोर से पूछताछ) करना नहीं चाहता हूं।

प्रलेखन पढ़ने से यह कहा गया है कि

एक ReferenceProperty का मूल्य एक कुंजी

कौन सा मुझे सुराग को लगता है कि मैं सिर्फ() .id कह सकते हैं संदर्भ के महत्व पर है। लेकिन यह भी कहता है:

रेफरेंसप्रोपर्टी मॉडल स्वचालित संपत्ति संदर्भ जैसे महत्वपूर्ण डेरफ़्रेंसिंग के लिए सुविधाएं प्रदान करता है।

मैं कुछ भी है कि बताते हैं जब इस संदर्भित जगह लेता है नहीं मिल सकता है?
क्या संदर्भ प्रॉपर्टी के मूल्य पर .id() को कॉल करना सुरक्षित है?
क्या यह माना जा सकता है कि कॉलिंग .id() डेटास्टोर लुकअप का कारण नहीं बन पाएगा?

+0

सी [ReferenceProperty: .get_value_for_datastore() -> .get_key() - Google समूह] (https://groups.google.com/forum/#!topic/google-appengine -पिथन/एआई 90diACDiA) भी – Pat

उत्तर

26

की मदद साथी खोजकर्ताओं के लिए मेरे अपने प्रश्न का उत्तर देना ...

रूप story.author.key बुला संदिग्ध()। आईडी() या यहां तक ​​कि story.author.id() डेटासंग्रह प्रश्नों में परिणाम होगा । सही विधि dictated by the API docs है:

story = db.get(story_key) 
author_id = Story.author.get_value_for_datastore(story).id() 
संबंधित मुद्दे