मैं देरी ब्लॉग पोस्ट हटाने योजना को लागू करने की कोशिश कर रहा हूं। तो एक परेशान के बजाय क्या आप निश्चित हैं?, आपको हटाने को रद्द करने के लिए 2 मिनट का समय सीमा मिलती है।ऐप इंजन पायथन मॉडल क्लास के कस्टम __init__ का सही तरीके से उपयोग कैसे करें?
मैं ट्रैक करने के लिए, क्या हटा दिया जाएगा जब एक db.Model वर्ग (DeleteQueueItem) के साथ के रूप में मैं कतार से किसी कार्य को हटाने के लिए कोई रास्ता मिल चाहते हैं और मैं क्या वहाँ क्वेरी कर सकता है संदेह है।
एक DeleteQueueItem इकाई बनाना स्वचालित रूप से एक delete_when गुण सेट और कतार में एक कार्य जोड़ने चाहिए। मैं ब्लॉग पोस्ट के सापेक्ष पथ का उपयोग उनके key_name के रूप में करता हूं और इसे key_name के रूप में भी उपयोग करना चाहता हूं। यह मैं एक कस्टम init को जन्म दिया:
class DeleteQueueItem(db.Model):
"""Model to keep track of items that will be deleted via task queue."""
# URL path to the blog post is handled as key_name
delete_when = db.DateTimeProperty()
def __init__(self, **kwargs):
delay = 120 # Seconds
t = datetime.timedelta(seconds=delay)
deadline = datetime.datetime.now() - t
key_name = kwargs.get('key_name')
db.Model.__init__(self, **kwargs)
self.delete_when = deadline
taskqueue.add(url='/admin/task/delete_page',
countdown=delay,
params={'path': key_name})
यह काम करने के लिए, जब तक मैं इकाई को हटाने का प्रयास लगता है:
TypeError: __init__() takes exactly 1 non-keyword argument (2 given)
क्या बजे:
fetched_item = models.DeleteQueueItem.get_by_key_name(path)
इस के साथ विफल मैं गलत कर रहा हूँ?
महान है, धन्यवाद:
यहाँ एक सुझाव दिया रिफैक्टरिंग है! उसमें एक समस्या है, जहां मुझे एक सुरुचिपूर्ण समाधान के बारे में सोचने में कठिनाई होती है, यह है कि देरी और key_name def _tx() में उपलब्ध नहीं है। – thorwil
ओह, अच्छा बिंदु। आप वर्ग के सदस्य (उदाहरण के लिए, शीर्ष स्तर पर) के रूप में 'देरी' को परिभाषित कर सकते हैं, क्योंकि यह स्थिर होता प्रतीत होता है, और कुंजी नाम को self.key()। Name() के रूप में एक्सेस किया जा सकता है। –
इसे काम करने के लिए मिला! कक्षा के सदस्य के रूप में देरी पर्याप्त स्पष्ट थी, लेकिन मैं self.key() नाम() पर कभी नहीं पहुंचेगा। एक बार फिर धन्यवाद! – thorwil