2013-02-26 168 views
6

मैं एक निपुणता सामग्री प्रकार के निर्माण के बाद कुछ मनमानी कोड निष्पादित करने का प्रयास कर रहा हूं। उदाहरण के लिए सामग्री प्रकार घोड़े का प्रतिनिधित्व कर सकता है।सामग्री प्रकार बनाने के बाद क्रियाएं कैसे निष्पादित करें?

import logging 
logger = logging.getLogger("Plone") 

class IHorse(form.Schema): 

    def __init__(self, context): 
     logger.info('Creating horse') 
     super(self).init(self, context) 

मैं लकड़हारा संदेश "बनाना घोड़ा" कंसोल में मुद्रित जब अग्रभूमि में एप्लिकेशन को शुरू करना चाहते। लेकिन घोड़ा बनाया गया है और मुझे इसके लिए संदेश नहीं मिलते हैं। मुझे लगता है कि सामग्री प्रकार ऑब्जेक्ट्स __init__ द्वारा बनाए जाते हैं, लेकिन शायद मैं एक गलती में हूं।

उत्तर

7

आपने अपनी सामग्री प्रकार के स्कीमा के लिए __init__ पर लगाया है। स्कीमा का उपयोग आपकी सामग्री को पॉप्युलेट करने वाले फ़ील्ड के आधार के रूप में किया जाता है, लेकिन यह सामग्री प्रकार वर्ग नहीं है।

आप सामग्री प्रकार सृष्टि में हुक करने के लिए चाहते हैं, तो आप event subscribers बजाय रजिस्टर:

from zope.app.container.interfaces import IObjectAddedEvent 

@grok.subscribe(IHorse, IObjectAddedEvent) 
def logHorseCreated(horse, event): 
    logger.info('Created a horse') 

तुम सच में एक __init__ विधि में सामग्री आइटम आरंभीकरण अनुकूलित करने के लिए है, तो आप को बनाने के लिए होगा अपने इसके बजाय custom content class

from plone.dexterity.content import Item 

class Horse(Item): 
    def __init__(self, id=None): 
     super(Horse, self).__init__(id)