2013-02-26 19 views
6

Bir Dexterity içerik türü oluşturulduktan sonra bazı rasgele kodları çalıştırmaya çalışıyorum. Örneğin, içerik türü bir atı temsil edebilir.İçerik türleri oluşturulduktan sonra eylemler nasıl yürütülür?

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

class IHorse(form.Schema): 

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

Ben ön planda app çalıştırırken konsolda baskılı logger mesaj "oluşturma atı" almak istiyorum. Ama at yaratıldı ve bunun için mesaj alamıyorum. İçerik türü nesnelerinin __init__ tarafından oluşturulduğunu sanıyorum, ama belki bir hata yapıyorum.

cevap

7

İçerik türünüzün şeması için __init__'a bağladınız. Şema içeriğinizi dolduran alanlar için temel olarak kullanılır, ancak içerik türü sınıfının kendisi değildir. Eğer içerik türü oluşturma içine kanca istiyorsanız

, bunun yerine event subscribers kayıt:

from zope.app.container.interfaces import IObjectAddedEvent 

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

gerçekten bir __init__ yönteminde içerik öğesi başlatma özelleştirmek varsa, oluşturmak zorundayız senin bunun yerine custom content class.

from plone.dexterity.content import Item 

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