Перенос новостей Archetype на типы контента Dexterity

Я пытаюсь скопировать контент в новостях в другой тип контента, который я написал. В моем сценарии у меня есть элемент news и элемент project. Второй, project, представляет собой тип контента, определяемый с помощью ловкости. Было бы замечательно, если бы я мог скопировать изображение и основной текст из news в project следующим образом.

project.text = news.text
project.image = news.image

Где текст и изображение определены в схеме project как RichText и NamedBlobImage. Я не знаю, как атрибуты в новости. Я только знаю, что я могу получить изображение в новости с помощью метода getImage(), но при назначении его проекту выдает ошибку при рендеринге проекта.

Поэтому мне нужны некоторые указатели, чтобы решить мои основные вопросы:

  1. Как я могу узнать имена атрибутов для типов контента Archetype. Например, в этом случае мне нужно знать имя атрибута основного текста новости.

  2. Как я могу преобразовать изображение, прикрепленное к элементу новостей, в изображение, прикрепленное к типу содержимого ловкости.


person Daniel Hernández    schedule 28.03.2013    source источник


Ответы (1)


  1. Вы используете поле из схемы Archetypes для извлечения значений, в данном случае предпочтительно необработанных значений. Вы передаете объект, а затем вызываете либо .get(), либо .getRaw():

    schema = news.Schema()
    news = schema.getField('text').getRaw(news)
    imageField = schema.getField('image')
    image = imageField.getRaw(news)
    content_type = imageField.getContentType(news)
    filename = imageField.getFilename(news)
    
  2. Объект, возвращаемый вызовом ImageField.getRaw(), в основном является экземпляром OFS.Image. Вы можете вызвать str() для получения необработанных данных изображения.

    Чтобы установить объект изображения, вы действительно хотите получить поле изображения из схемы и использовать его атрибут ._type в качестве фабрики:

    project.image = IProjectInterface.image._type(str(image),
        contentType=content_type, filename=filename)
    

    Тип содержимого здесь необязателен; типы NamedImage и NamedBlobImage также автоматически определяют тип содержимого.

person Martijn Pieters    schedule 28.03.2013
comment
Dank je vel, Мартин! - person Ida; 29.03.2014