- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于 plone.directives.form.Schema 的 Dexterity 内容类型,它具有许多用于分配默认值的表单提示:
@form.default_value(field=ITrial['start_on'])
def default_start_on(data):
return datetime.now()
一些默认值更复杂,传回的对象本身就是 Dexterity 类型的实例。这些对象对于主要类型的设置至关重要,主要类型由各种事件触发。
我现在正在进行测试。理想情况下,我希望能够使用类似的东西:
item = createContentInContainer(folder, 'ctcc.model.trial', 'item')
也就是说,我希望项目能够获取默认值,而不必手动传递到构造函数中。
如果我使用 zope.schema
,我可以使用 FieldProperty 设置架构字段的代理。是否有与 Dexterity 等效的功能,或者可能是通过表单创建插入对象的功能?
解决方案:我最终选择了 David 的选项 #1,拦截 ObjectCreatedEvent
。
@grok.subscribe(ITrial, IObjectCreatedEvent)
def create_trial(trial, event):
if getattr(trial, 'start_on', None) is None:
trial.start_on = default_start_on(None)
它仍然感觉我正在复制表单行为的一部分,但至少它使用提供表单默认值的相同函数。
最佳答案
正如您所发现的,z3c.form 表单尊重 @form.default_value 装饰器,但以其他方式创建项目时则不然。您有多种选择:
为您的内容类型编写一个 ObjectCreatedEvent 处理程序,以设置必要的默认值。这是最简单的实现方法,但如果该事件的其他处理程序需要这些值,则可能不起作用。
创建您自己的 Dexterity 通用 Item 类的子类,并使用它而不是 Item 作为内容类型的基础。然后你可以自定义__init__
方法来设置你想要的任何内容。不过,这需要迁移现有的内容项(如果您已经有一些内容项)。
这是一个更复杂的选项。替换用于构造内容类型的工厂实用程序。 createContentInContainer 最终会查找名称与内容类型的 FTI 的工厂属性相同的 IFactory 实用程序。默认实现位于 plone.dexterity.factory
中,但您可以将其替换为具有更多功能的其他实现。
关于plone - 设置以编程方式创建的敏捷项目的字段默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753690/
有没有办法查看谁当前登录了 Plone 站点? 理由:我想确保在我重新启动实例时不会干扰处理内容的用户。 最佳答案 开箱即用,没有办法查看用户当前是否正在使用您的网站,只有当他们刚刚使用它时。只需关注
我需要 plone 默认用户注册表单中的验证码字段 (@@register)。 最佳答案 使用 https://plone.org/products/quintagroup.formlib.captc
如果 Plone 版本升级,是否需要删除安全补丁? 假设示例: Plone X.4.4 从 2015 年 5 月 4 日起开始运行安全补丁-XYZ Plone 升级至 X.4.5,在 Security
我有一个 Plone (4.2) 形式。我想要一个特定领域的动态来源。架构的相关部分: from plone.directives import form from z3c.relationfield
我正在尝试制作一个兼容 Plone 4 和 Plone 5 的插件。我遇到的问题是配置文件/默认 XML。 Plone 5:我有一个用于注册 CSS 的 registry.xmlPlone 4:我有一
我正在使用 Plone 4.0.5,我花了一天时间试图理解 plone.app.contentmenu。 我有一个基于自定义文件夹的原型(prototype)类型,并且我已经为它编写了一个 View
Plone 4 包含一个新的文件夹实现(在 plone.app.folder 包中),它对于包含许多项目的文件夹效率更高。是否可以升级 Plone 3 站点以使用此文件夹实现,而无需将站点完全升级到
PloneTestCase、plone.testing 和 plone.app.testing 包有什么区别? 顺便说一下,不建议将 PloneTestCase 用于测试新的 Plone 4 产品吗?
我们想从我的 Java 应用程序创建 plone 用户,那么我该怎么做呢? 已通过https://github.com/plone/plone.restapi ,但还没有得到清晰的看法。 我想在jav
我正在尝试通过 portal_migration 工具将 Plone 4.3.7 升级到 Plone 5.0,并遇到以下错误。有什么想法吗?这是一个简单的站点(没有附加组件),但它的历史可以追溯到 P
我正在为我的站点创建一个新的 plone.app.theming (Diazo) 主题。我的 rules.xml 有规则: 这会取消许多弹出窗口的样式,但不会取消联系人信息 AJAX 弹出框的样式,
我正在尝试将现有站点从 Plone 3.3.6 升级到 Plone 4.3.7,然后升级到 Plone 5.0。 现有站点非常小,并且没有安装任何附加产品(vanilla Plone、vanilla
我想让我的编辑在几个正交词汇表上标记内容,然后有一个很好的搜索界面,让用户可以根据这些词汇表搜索内容。 似乎解决方案的一部分存在 ATVocabularyManager - 让编辑器创建不同的词汇表
我在我工作的研究所中使用带有 Doormat 和 Diazo 的 Plone 4.1.4,并且必须通过添加内部链接到主菜单中项目的每个列和项目来手动制作页脚。 我想要的是这个页脚,即站点地图,每次用户
Plone 产品安装的日志轮换将是一个不错的功能。当前将日志轮换集成到 Plone 的最佳实践是什么? 我找到了这篇文章:http://encolpe.wordpress.com/2010/06/17
在一个 Plone 实例中,我有两个 Plone 站点。 在其中一个中,我有一个专门用于它的产品。 我想为 Products.PluggableAuthService.interfaces.event
是否可以使用每个插件扩展控制面板 View ? 例如 ca.db.core -> 为数据库连接设置制作基本字段集/选项卡 ca.db.person -> 如果已安装,则向“核心”设置添加一个新的字段集
这是一个普遍的问题,但受到一个例子的启发。一般的问题是:如何从未使用的附加组件中清除 Plone 站点?您可以通过多种方式生成未使用的附加组件,例如,如果您将一个附加组件用于一件事,然后您更喜欢另一件
2004 年,Mahendra 发表了关于使用 Plone 和 DSpace 管理数字 Assets 的演讲。 http://linux-bangalore.org/2004/schedules/ta
plone.resource 提供了将静态媒体文件放入 Plone 的简单方法 http://pypi.python.org/pypi/plone.resource 然而,plone.resource
我是一名优秀的程序员,十分优秀!