Dexterity được định nghĩa bởi một lược đồ, đó là đếm được:
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()
Ở đây tôi sử dụng .namesAndDescriptions()
method, nhưng bạn cũng có thể chỉ cần sử dụng giao diện như một iterator nếu bạn không có bất kỳ phương pháp trên của bạn schema:
for name in IYourDexteritySchema:
value = getattr(yourDexterityInstance, name)
cuối cùng nhưng không kém, zope.schema
có một phương pháp hữu ích có tên getFieldsInOrder
mà sẽ lọc trên zope.schema
lĩnh vực trong một giao diện; các phương pháp trên cũng liệt kê các phương pháp và các thuộc tính phi lược đồ, getFieldsInOrder
chỉ liệt kê zope.schema
kiểu thuộc tính cụ thể:
from zope.schema import getFieldsInOrder
for name, field in getFieldsInOrder(IYourDexteritySchema):
value = getattr(yourDexterityInstance, name)
Nếu bạn định nghĩa lược đồ thông qua-the-web, bạn có thể không biết làm thế nào để tìm kiếm giao diện cho bạn kiểu. Bạn cũng có thể truy xuất giao diện lược đồ thông qua Thông tin Loại Nhà máy hoặc FTI cho ngắn:
from plone.dexterity.interfaces import IDexterityFTI
from zope.component import getUtility
schema = getUtility(IDexterityFTI, name='your.dexterity.type').lookupSchema()
nơi schema
hiện giữ giao diện của bạn.
Nguồn
2012-08-29 13:09:18
Lưu ý: Tất cả các câu trả lời ở đây chỉ cung cấp cho các lĩnh vực trên giao diện chính, không các trường có thể được thêm bởi các hành vi. Thật không may những người được tìm ra như là một phần của các hình thức dựng hình, và hiện tại không có cách nào tốt để liệt kê tất cả chúng bên ngoài quá trình tạo biểu mẫu. –