Объект не реализует IField - PullRequest
2 голосов
/ 24 мая 2011

У меня есть следующий фрагмент кода для исправления папки:

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)>

Есть идеи почему?

1 Ответ

6 голосов
/ 24 мая 2011

Я бы посоветовал вам использовать archetypes.schemaextender вместо использования патчей для изменения типов содержимого архетипов.

В пакет входит документация о том, как реализовать дополнительное поле.

Что касается вашей ошибки, вы создали кортеж с одним элементом, полем:

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

Удалите запятую, и ваш код должен работать как положено.

...