gpt4 book ai didi

plone - 列出敏捷对象的字段

转载 作者:行者123 更新时间:2023-12-04 05:04:17 24 4
gpt4 key购买 nike

我想列出灵巧对象的所有字段(和值)。

我可以轻松访问这样的单个字段值 myobject.myfield
但我不知道如何列出对象的所有可用字段。

最佳答案

敏捷对象由可枚举的模式定义:

from zope.interface.interfaces import IMethod

for name, desc in IYourDexteritySchema.namesAndDescriptions():
value = getattr(yourDexterityInstance, name)
if IMethod.providedBy(desc):
# It's a method, call it
value = value()

这里我使用 .namesAndDescriptions() method ,但如果您的架构上没有任何方法,您也可以将接口(interface)用作迭代器:
for name in IYourDexteritySchema:
value = getattr(yourDexterityInstance, name)

最后但同样重要的是, zope.schema有一个名为 getFieldsInOrder 的实用方法将过滤 zope.schema界面中的字段;上述方法还列出了方法和非模式属性, getFieldsInOrder仅列出 zope.schema具体属性类型:
from zope.schema import getFieldsInOrder

for name, field in getFieldsInOrder(IYourDexteritySchema):
value = getattr(yourDexterityInstance, name)

如果您通过网络定义了模式,您可能不知道如何查找您的类型的接口(interface)。您还可以通过工厂类型信息或简称 FTI 检索架构接口(interface):
from plone.dexterity.interfaces import IDexterityFTI
from zope.component import getUtility

schema = getUtility(IDexterityFTI, name='your.dexterity.type').lookupSchema()

在哪里 schema现在拥有你的界面。

关于plone - 列出敏捷对象的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12178669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com