2013-03-28 5 views
6

私が書き込んだ他のコンテンツタイプにニュースアイテムのコンテンツをコピーしようとしています。私のスクリプトでは、newsの項目とprojectの項目があります。 2番目の数字は、projectです.Dexterityを使用して定義されたコンテンツタイプです。次の方法で画像と本文テキストをnewsからprojectにコピーできたらすばらしいことでしょう。テキストと画像をリッチテキストおよびNamedBlobImageとしてprojectスキーマで定義されArchetypeニュースアイテムを敏捷性コンテンツタイプに移行する

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

。私はその属性がどのようにニュース項目にあるのかわかりません。私は、getImage()という方法を使ってニュースアイテムの画像を取得することができますが、それをプロジェクトに割り当てると、プロジェクトのレンダリング時にエラーが発生することがわかります。

だから、私は基本的な質問を解決するためにいくつかのポインタを必要とする:

  1. は、どのように私はアーキタイプコンテンツタイプの属性名を知ることができます。たとえば、この場合、ニュース項目の本文の属性の名前を知る必要があります。

  2. ニュースアイテムに添付された画像を機敏さの高いコンテンツタイプに添付された画像に変換するにはどうすればよいですか。あなたは値が、この場合、好ましくは、生の値を取得するために、原型スキーマからフィールドを使用

答えて

6
  1. 。その後、.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の種類ではコンテンツタイプも自動的に検出されます。

+0

ダンクje vel、Martijn! –

関連する問題