2011-05-24 28 views
2

我有以下一段代碼來修補文件夾:對象不實現IField

ATFolderSchema = ATContentTypeSchema.copy() + \ 
    ConstrainTypesMixinSchema.copy() + NextPreviousAwareSchema.copy() 
finalizeATCTSchema(ATFolderSchema, folderish=True, moveDiscussion=False) 

field = StringField("rafal_shortdescription", 
      schemata = "default", 
      widget = StringWidget(
       label = _(u"label_shortdescription", 
        default=u"Short Description"), 
       description = _(u"help_shortdescription", 
        default=u"Used in tabs."), 
       ), 
      ), 

ATFolderSchema.addField(field) 

和最後一行拋出:

File "/home/rafal/projects/vidensportalen_v2/eggs/Products.Archetypes-1.6.4-py2.6.egg/Products/Archetypes/Schema/__init__.py", line 198, in _validateOnAdd 
    raise ValueError, "Object doesn't implement IField: %r" % field 
zope.configuration.xmlconfig.ZopeXMLConfigurationError: File "/home/rafal/projects/vidensportalen_v2/parts/instance/etc/site.zcml", line 12.2-12.39 
    ZopeXMLConfigurationError: File "/home/rafal/projects/vidensportalen_v2/eggs/Plone-4.0.2-py2.6.egg/Products/CMFPlone/meta.zcml", line 39.4-43.10 
    ValueError: Object doesn't implement IField: <Field rafal_shortdescription(string:rw)> 

任何想法,爲什麼?

+0

如果你向我們展示了從哪裏導入StringField,那麼它可能會有所幫助。否則,我們無法知道對象_does_是否實現了IField。 – Auspex 2011-05-24 15:02:24

+1

爲什麼不使用archetypes.schemaextender? – 2011-05-24 15:49:20

+0

memoryleaks - 現在我們有了schemaextender的代碼,但它正在泄漏。無論如何,請堅持使用'修補'版本的問題:) – bluszcz 2011-05-25 07:44:07

回答

6

我建議您使用archetypes.schemaextender而不是使用補丁來更改Archetypes內容類型。

該軟件包包含有關如何實現您的其他字段的文檔。

至於你的錯誤,你創建了一個元組的一個元素,一個字段:

>>> example = 1, 
>>> print example 
(1,) 

刪除後面的逗號和預期的代碼應該工作。

+0

我從我的代碼中刪除schemaextender - 由於內存泄漏。 – bluszcz 2011-05-25 07:43:03

+0

這就是爲什麼我必須現在通過monkeypatch :) – bluszcz 2011-05-25 07:43:23

+0

我解答了你的問題並給了你建議。答案不正確,因此值得一票嗎? – 2011-05-25 07:59:11