2016-04-14 15 views
3

Odoo 9 PostgreSQLデータベースのimageの列がres_partnerのテーブルに見つかりませんでしたか? Odoo 9はこの画像フィールドをどこに保存しますか?Odoo 9はどこに `res.partner`レコードの` image`フィールドを物理的にデータベースに保存しますか?

+1

使用しているOdooのバージョンを指定する価値があります。バージョン9.0で保存場所が変更されました – odony

+0

はい私はOdoo 9.0を使用しています –

答えて

12

Odoo 9以降、多くのbinaryフィールドがir.attachmentモデル(ir_attachmentテーブル)内に格納されるように変更されました。これは、ファイルシステムストレージ(および重複排除プロパティ)の恩恵を受け、データベースの膨大化を避けるために行われました。

の場合と同様に、attachment=Trueパラメータのバイナリフィールドで有効になります。

有効な場合、バイナリフィールドのget()およびset()メソッドはir.attachmentテーブルのstore and retrieve the valueになります。

  • name:バイナリフィールドの名前、例えばあなたがcodeを見れば、あなたは添付ファイルが元のレコードへのリンクを確立するために、次の値を使用していることがわかりますimage
  • res_field:バイナリフィールドの名前。 image
  • res_model:フィールドを含むモデル。 res.partner
  • res_id:IDバイナリフィールドが属するレコードの
  • type
  • へ: 'binary'
  • datas:実際に

その場合は、ディスク上に格納されているバイナリフィールドの内容と仮想フィールドimageの値を持つir.attachmentレコードを取得する場合は、IDが32のres.partnerのIDを使用するには、次のSQLを使用します。

SELECT id, store_fname FROM ir_attachment 
WHERE res_model = 'res.partner' AND res_field = 'image' AND res_id = 32; 

ir_attachmentエントリは、デフォルトでは、ファイルシステムのストレージを使用するので、store_fnameフィールドの実際の値がabc...値はSHA-1ハッシュである形'ab/abcdef'で、あなたのOdooファイルストア内の画像ファイルへのあなたの道を与えるだろうがファイルのこれは、Odooが添付ファイルの重複排除を実装する方法です。同じファイルを持ついくつかの添付ファイルは、ディスク上の同じ一意のファイルにマップされます。

あなたがプログラムでimageフィールドの値を変更したい場合は

、強く矛盾を作成するか、手動でファイルストレージシステムを再実装することを避けるために、ORMのAPI(例えば write()メソッド)を使用することをお勧めします。ここで

参照

  • それを使用するres.partnerのimageフィールドを変換し、添付ファイル
  • そして9.0 commitとしてバイナリフィールドを格納するための機能が導入されているoriginal 9.0 commitです。
+0

ありがとうございます:)あなたはまたどのテーブルが添付ファイルとres_partnerテーブルにそのデータをリンクするために使用されているか教えてください。 res_partnerイメージの添付ファイルをバインドする関係はどこですか? –

+1

あなたは大歓迎です! 'ir.attachment'のデータと' res.partner'の行をリンクする表は、 'ir_attachment'表そのものです。カラム 'res_model'、' res_field'、 'res_id'は' res_partner'や 'attachment = True'のバイナリフィールドを持つ他のテーブルとの' many2one'関係の並べ替えを作成します。特定のパートナーの添付ファイルを取得するために使用できるSQLクエリの例と、filestore上の実際のイメージファイルを見つけるための説明を追加しました。 – odony

関連する問題