एपेंगिन में, मैं एक संपत्ति मूल्य स्वचालित रूप से गणना और ऑब्जेक्ट के साथ संग्रहीत करने की कोशिश कर रहा हूं।एक पायथन ऐप इंजन मॉडल पर put() विधि को ओवरराइट कैसे करें?
मेरे पास एक वर्ग, आयताकार है, और इसकी चौड़ाई, ऊंचाई और क्षेत्र है। स्पष्ट रूप से क्षेत्र चौड़ाई और ऊंचाई का एक कार्य है, लेकिन मैं इसे एक संपत्ति बनना चाहता हूं क्योंकि मैं इसे सॉर्ट करने के लिए उपयोग करना चाहता हूं। इसलिए मैं जब आयत तो जैसे भंडारण में क्षेत्र चुपके पुट() फ़ंक्शन को संशोधित करने का प्रयास करें:
class Rectangle(db.Model):
width = db.IntegerProperty()
height = db.IntegerProperty()
area = db.IntegerProperty()
def put(self, **kwargs):
self.area = self.width * self.height
super(Rectangle, self).put(**kwargs)
यह काम करता है जब मैं सीधे क्षेत्र वस्तु पर put()
आह्वान:
re1 = Rectangle(width=10, height=10)
re1.put()
print re1.area # >> 10
लेकिन जब मैं db.put()
का उपयोग करता हूं (उदाहरण के लिए उनमें से बहुत से को बचाने के लिए), यह तोड़ता है।
re2 = Rectangle(width=5, height=5)
db.put(re2)
print re2.area # >> None
गणना मूल्य में 'चुपके' का सही तरीका क्या है?
यदि आप आइटम को डेटाबेस से प्राप्त करते हैं तो आपको क्या मिलता है? क्षेत्र की गणना की जाती है? – rocksportrocker
मैंने डेटास्टोर की जांच की और यह वही कहता है; पहले आयताकार के लिए '10' और दूसरे के लिए 'कोई नहीं'। – Paul
मुझे संदेह है कि 'db.put()' आपकी ऑब्जेक्ट्स पर व्यक्तिगत 'put() 'विधि को कभी भी कॉल नहीं करता है - यह शायद उन्हें डेटाबेस गुणों के लिए निरीक्षण करता है और थोक सम्मिलन विवरण बनाता है। यदि आप 'put' के बजाय' __init__' में क्षेत्र सेट करते हैं, तो क्या होता है? – larsks