8

मेरे पास एक साधारण परिदृश्य है जहां एक उपयोगकर्ता वर्ग है जिसमें नाम, ईमेल और अनुसरणकर्ता संपत्ति है।ndb.KeyProperty का उपयोग करके उसी मॉडल का संदर्भ कैसे लें?

class User(ndb.Model): 
    name = ndb.StringProperty(required = True) 
    search_name = ndb.StringProperty(required = True) 
    pw_hash = ndb.StringProperty(required = True) 
    email = ndb.StringProperty() 

    follows = ndb.KeyProperty(Follow, repeated=True) 
    followers = ndb.KeyProperty(User, repeated=True) 

इसे निष्पादित करते समय मुझे त्रुटि मिल रही है।

File "C:\ujjal\my project\cravel\code2\Users.py", line 46, in User 
    followers = ndb.KeyProperty(User, repeated=True) 
NameError: name 'User' is not defined 
INFO  2012-09-11 11:45:23,953 dev_appserver.py:2967] "GET/HTTP/1.1" 500 - 

"अनुयायियों" विशेषता के मॉडल के बारे में कोई सुझाव अत्यधिक सराहना की जाएगी।

followers = ndb.KeyProperty(repeated=True) 

या, मैं तुम्हें क्या लगता है कुंजी का प्रकार निर्दिष्ट करने के बाद कर रहे हैं,: अग्रिम

उत्तर

29

एक महत्वपूर्ण संपत्ति e.g. some_prop = ndb.KeyProperty(User) पर एक प्रकार का प्रयोग केवल लागू करता है कि कुंजी की तरह तरह उपयोगकर्ता का होना चाहिए। तो यदि आप आवश्यकता हो तो भी आप बिना किसी प्रकार के कीपप्रोपर्टी का उपयोग कर सकते हैं।

followers = ndb.KeyProperty(kind='User', repeated=True) 

यह ndb cheat sheet

में बेहतर एक छोटे से विस्तार से बताया है:

हालांकि, अगर आप लागू करने के लिए है कि सभी अनुयायी कुंजी तरह उपयोगकर्ता (उपयोगकर्ता मॉडल के अंदर) का होना चाहिए चाहते हैं तो उद्धरण के साथ तरह चारों ओर

+0

परफेक्ट के लिए धन्यवाद, आपके इनपुट – ujjalcal

+0

के लिए @Bert धन्यवाद यह समस्या ndb विशिष्ट नहीं है। वर्ग परिभाषित होने तक आप किसी वर्ग को इसके प्रकार से संदर्भित नहीं कर सकते हैं। यही कारण है कि ndb आपको एक प्रकार या पायथन प्रकार ऑब्जेक्ट के लिए एक स्ट्रिंग नाम का उपयोग करने की अनुमति देता है। –

2

धन्यवाद तुम सिर्फ "अनुयायियों" एक KeyProperty तो बस डाल होना चाहते हैं।

follows = ndb.KeyProperty(kind=User,repeated=True) 

मुझे लगता है कि आप शायद kind=User खो रहे हैं।

https://developers.google.com/appengine/docs/python/ndb/properties#types

+0

मैंने 'kind = user' की कोशिश की लेकिन यह काम नहीं किया। पहले व्यक्ति ने हालांकि काम किया। लेकिन अभी भी बहुत स्पष्ट नहीं है कि 'दयालु = उपयोगकर्ता' या बस 'उपयोगकर्ता' क्यों काम नहीं करेगा। – ujjalcal

+0

व्यक्तिगत रूप से मैं उपयोगकर्ता को नाम के रूप में उपयोग करने से बचना चाहता हूं। यह संघर्ष के लिए बहुत अधिक संभावना है। नाम बदलें, पुनः प्रयास करें। लेकिन दयालुता का उपयोग करके यह सुनिश्चित होता है कि जब आप एक कुंजी असाइन करते हैं तो यह उस विशेष प्रकार का होता है। आप स्ट्रिंग के रूप में कोट्स में मॉडल का नाम भी डाल सकते हैं, इससे कोई फर्क नहीं पड़ता कि आप वास्तव में किस चीज का उपयोग करते हैं, इसलिए इसे भी आजमाएं। आपके इनपुट के लिए –

+0

धन्यवाद। आप सही तरीके से इस मुद्दे को हल करके सही कर रहे हैं। एक चीज जो मुझे नहीं मिलती है वह आपकी टिप्पणी है ** व्यक्तिगत रूप से मैं उपयोगकर्ता को नाम के रूप में उपयोग करने से बचूंगा। यह संघर्ष करने के लिए बहुत अधिक संभावना है ** क्या आप थोड़ा और समझा सकते हैं? – ujjalcal

संबंधित मुद्दे