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

Dan*_*dez 6 plone archetypes dexterity

我正在尝试将新闻项目中的内容复制到我编写的其他内容类型中.在我的脚本中,我有news项目和project项目.第二个project是使用Dexterity定义的内容类型.这将是美好的,如果我能到图像和正文从复制newsproject在未来的方式.

project.text = news.text
project.image = news.image
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Mar*_*ers 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)
    
    Run Code Online (Sandbox Code Playgroud)
  2. ImageField.getRaw()调用返回的对象基本上是一个OFS.Image实例.您可以调用str()它来获取原始图像数据.

    设置图像对象,您确实希望从架构中获取图像字段并将其._type属性用作工厂:

    project.image = IProjectInterface.image._type(str(image),
        contentType=content_type, filename=filename)
    
    Run Code Online (Sandbox Code Playgroud)

    这里的内容类型是可选的; 在NamedImageNamedBlobImage类型嗅出了内容类型自动过.