将Archetype新闻项目迁移到Dexterity内容类型

时间:2013-03-28 21:29:49

标签: plone dexterity archetypes

我正在尝试将新闻项目中的内容复制到我编写的其他内容类型中。在我的脚本中,我有news项和project项。第二个project是使用Dexterity定义的内容类型。如果我能够以下一种方式将图像和正文从news复制到project,那就太棒了。

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

project架构中将文本和图像定义为RichText和NamedBlobImage。我不知道新闻项中的属性如何。我只知道我可以使用方法getImage()在新闻项中获取图像,但是在项目渲染时将其分配给项目会产生错误。

所以我需要一些指导来解决我的基本问题:

  1. 如何知道Archetype内容类型的属性名称。例如,在这种情况下,我需要知道新闻项正文的属性名称。

  2. 如何将附加到新闻项目的图像转换为附加到灵巧内容类型的图像。

1 个答案:

答案 0 :(得分:6)

  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)
    

    此处的内容类型是可选的; NamedImageNamedBlobImage类型也会自动嗅出内容类型。