यदि मेरे पास Property
उदाहरणों के साथ किसी GET या POST अनुरोध से कुछ (स्ट्रिंग) मान हैं, तो एक IntegerProperty
और एक TextProperty
कहें, क्या मूल्यों को उचित (उपयोगकर्ता) प्रकारों में लंबे समय तक कठोर श्रृंखला के बिना रूपांतरित करने का कोई तरीका है isinstance
कॉल?एनडीबी संपत्ति के लिए एक स्ट्रिंग को उचित प्रकार में बदलने के लिए सही तरीका?
मैं कार्यक्षमता की इस तरह (सभी इनपुट सत्यापन स्पष्टता के लिए छोड़े गए) पुन: पेश करने के लिए देख रहा हूँ:
for key, value in self.request.POST.iteritems():
prop = MyModel._properties[key]
if isinstance(prop, ndb.IntegerProperty):
value = int(value)
elif isinstance(prop, (ndb.TextProperty, ndb.StringProperty)):
pass # it's already the right type
elif ...
else
raise RuntimeError("I don't know how to deal with this property: {}"
.format(prop))
setattr(mymodelinstance, key, value)
उदाहरण के लिए, यदि कोई IntegerProperty
से int
वर्ग पाने के लिए एक तरह से और bool
वर्ग है BooleanProperty
आदि से, यह काम करेगा।
एनडीबी मेटाडाटा एपीआई वास्तव में इस सुंदरता को हल नहीं करता है, जहां तक मैं देख सकता हूं; get_representations_of_kind
के साथ मैं मामलों की संख्या को कम कर सकता हूं, हालांकि।
मुझे आपका दर्द महसूस हो सकता है ... एक सवाल हालांकि, आपको ** POST ** आइटम से अपेक्षित डेटा प्रकारों को जानना चाहिए था, इसलिए उम्मीद से ** मूल्य ** प्राप्त क्यों न करें ** कुंजी ** और उन्हें उचित प्रकार में परिवर्तित करें? – Anzel
@Anzel सुनिश्चित नहीं है कि पोस्ट आइटम से अपेक्षित डेटा प्रकार जानने के बारे में आपका क्या मतलब है। मॉडल परिभाषा में मेरे पास कुछ अलग प्रकार के 45 गुण हैं; अपने आप को दोहराने के हित में मैं कहीं भी संपत्ति के नामों और प्रकारों के बीच मैपिंग दोहराना नहीं चाहता हूं लेकिन अभी भी पता है कि "ट्रू" या "5" जैसे मान को बूल, स्ट्रिंग या इंट के रूप में व्याख्या करने की आवश्यकता है या नहीं । –
मैं समझता हूं कि आप क्या करने का प्रयास कर रहे हैं, लेकिन चूंकि आप कनवर्टर पर जा रहे डेटा को जीईटी/पोस्ट डेटा में हैं, इसलिए आप कुंजी/मूल्य जोड़ी को मैप करने के लिए एक रूपांतरण फ़ंक्शन को परिभाषित कर सकते हैं ... – Anzel