对BlobWrapper
的图像字段的访问器的第一个调用返回None,第二个调用返回BlobWrapper
。一些提示?你知道吗
In [1]: id = app.Plone.invokeFactory('Image', 'myimage', title='MyImage')
In [2]: image=app.Plone[id]
In [3]: blobWrapper=image.getBlobWrapper()
In [4]: accessor=blobWrapper.getField('image').getAccessor(blobWrapper)
In [5]: accessor()
In [6]: accessor()
Out[6]: <plone.app.blob.field.BlobWrapper at 0xa35a194>
字段的
getAccessor
方法将对象作为参数,而不是blobWrapper instance
检查this github link
更新: 解释为什么访问器的第一个调用是
None
,而第二个不是。你知道吗我和他的魔法有关产品。原型. 如果传递BlobWrapper实例而不是ATImage实例,则会发生以下情况:
第一次呼叫: 在某个时候,会调用Archetypes ObjectField的
get
方法,请参见https://github.com/plone/Products.Archetypes/blob/master/Products/Archetypes/Field.py#L785它捕获AttributeError(
AttributeError: Attribut...'image'
),顺便说一句,如果向ContentType添加新字段,通常会发生这种情况,因为BlobWrapper实例没有属性image
(ATImage将具有此属性)。你知道吗然后它初始化BlobWrapper,就像ATImage上的新字段一样。 这会在Blobwrapper实例上保留一些垃圾,这是您不想要的:-) 返回值是
None
,请参见https://github.com/plone/Products.Archetypes/blob/master/Products/Archetypes/Field.py#L803第二次呼叫: 因为第一个调用对BlobWrapper实例做了一些修改,所以第二个调用可以工作并返回正确的值。 https://github.com/plone/Products.Archetypes/blob/master/Products/Archetypes/Field.py#L785
从技术上讲,第一个调用初始化BlobWrapper实例上的
AnnotationStorage
。 你知道吗我真的认为你不应该这样做:-)
如果我弄错了,请纠正。。。很难理解这种原型行为。你知道吗
相关问题 更多 >
编程相关推荐