首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >archetypes.schemaextender:有可能拥有default_method

archetypes.schemaextender:有可能拥有default_method
EN

Stack Overflow用户
提问于 2012-05-11 05:34:59
回答 2查看 212关注 0票数 2

Archetypes API提供了以编程方式填充初始值的default_method()

但是,由于这是一个类方法,所以它不适用于archetypes.schemaextender。与扩展器等效的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-11 13:18:16

如果既没有field.default也没有field.default_method,您可以使用IFieldDefaultProvider适配器。请参阅Archetypes.Field.Field类getDefault方法中的以下代码片段:

代码语言:javascript
复制
if not self.default:
    default_adapter = component.queryAdapter(instance, IFieldDefaultProvider, name=self.__name__)
    if default_adapter is not None:
        return default_adapter()

还有IFieldDefaultProvider:

代码语言:javascript
复制
class IFieldDefaultProvider(Interface):
    """Register a named adapter for your content type providing
    this interface, with a name that is equal to the name of a
    field. If no default or default_method is set on that field
    explicitly, Archetypes will find and call this adapter.
    """

    def __call__():
        """Get the default value.
票数 4
EN

Stack Overflow用户

发布于 2014-10-13 18:52:39

这是使用Mixin类处理archetypes.schemaextender时default_method()的解决方案。字段初始值的代码应该在这样的mixin类中的名为'getDefault‘的方法中,您可以将其放在扩展字段的声明之前:

代码语言:javascript
复制
class ProvideDefaultValue:
""" Mixin class to populate an extention field programmatically """

    def getDefault(self, instance):
        """ Getting value from somewhere (in this ex. from same field of the parent) """
        parent = aq_parent(instance)
        if hasattr(parent, 'getField'):
            parentField = parent.getField(self.__name__)
            if parentField is not None:
                return parentField.getAccessor(parent)

现在,您可以在相应的扩展类声明中包含此方法:

代码语言:javascript
复制
class StringFieldPrefilled(ExtensionField, ProvideDefaultValue, atapi.StringField):
    """ Extention string field, with default value prefilled from parent. """

注意:您不需要在扩展模式字段定义中添加default_method。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10542486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档