コンテンツへスキップ

Odooで「Record Does Not Exist or Has Been Deleted」エラーを解消する方法

Odooで「レコードが存在しません」エラーが出る原因と対処法をわかりやすく解説します。ユーザー向けには操作ミスや権限設定の確認手順を、開発者向けにはデバッグの進め方やコード・データベース修正の手順を段階的に示します。発生原因の見極め方、ログの読み方、よくあるパターン別の対処法(ビューやアクセスルール、参照データの欠落、同期問題など)を具体例とともに紹介し、復旧までの作業フローを提供します。
2026年2月17日 by
Elisa Van Outrive
| まだコメントがありません

はじめに


「レコードが存在しない、または削除された」というエラーメッセージは、Odoo を使う現場で最も戸惑いを招く表示のひとつです。フォームを開いたときやレコードの承認中、自動処理が走ったタイミングなど、予告なく現れることが多いです。


紛らわしい表現ですが、多くの場合これはデータが壊れているというより、参照が切れていることを示すサインです。


ここでは、エラーの本当の意味を分解し、安全に解決する手順を紹介します。

このエラーは何を示すのか


Odoo が特定のレコードIDにアクセスしようとした際に起きます。具体的には次のような状況です:


  • そのIDのレコードが既に存在しない
  • 該当レコードが削除されている
  • アクセス権限によって見えなくなっている
  • 別の会社(マルチカンパニー)に属していて現在のコンテキストで参照できない

例:


record = self.env['res.partner'].browse(45)

もしID 45 のレコードが存在しなければ、Odoo はこのエラーを投げます。



よくある原因



1. 削除済みレコードが参照されている

Many2one などの関連フィールドが、既に削除されたエントリを指していることがあります。


この状態はよく次の操作後に発生します:


  • 手動での削除
  • テストデータのクリーニング
  • インポート失敗による中途半端な状態

2. 外部IDの不整合


API 経由の連携で外部システムが無効なIDを送り込むことがあります。

例えば Odoo が受け取ったデータに


{ "partner_id": 99999 }

のような存在しないIDが含まれていると、このエラーにつながります。


3. マルチカンパニーの可視性制限


レコード自体は存在していても、現在の会社コンテキストから見えない場合があります。

スーパーユーザーで確認すると見つかることがよくあります。


4. マイグレーションやアップグレード時の不整合


モジュール更新後にレコード構造が変わり、既存の参照が古い形式を指したままになることがあります。

対処方法


ステップ1 — レコードの存在確認

record = self.env['model.name'].browse(record_id) if record.exists(): # 安全に処理を続行可能

ステップ2 — アクセス権の確認


まず管理者アカウントで表示を試してください。

管理者は見えるが一般ユーザーは見えない場合 → アクセスルールの問題です。


ステップ3 — 関連フィールドのクリーニング


孤立した(オーファン化した)Many2one 等の参照を探し、正しい値に修正するか NULL にします。


ステップ4 — 外部連携の検証


次を点検してください:


  • API の送信ペイロード
  • ID マッピングのロジック
  • 同期レイヤーの処理

統合されたシステムでは ID の不整合が頻繁な原因になります。



再発防止策



  • ID をハードコーディングしない
  • 外部IDを適切に使う
  • API入力を検証する
  • マイグレーションはステージングで事前検証する
  • 他で参照されているレコードを安易に削除しない


Dasolo が「Record Does Not Exist」問題をどう防ぐか


「Record Does Not Exist」エラーは、モデル間の参照が壊れたときに現れることが多いです。UI に表示されても、根本原因は削除されたレコード、不整合な関連リンク、または安全でない直接DB操作であることが一般的です。


Dasolo では、この種のエラーを単なる例外として扱わず、システム構造の不整合を示すシグナルとして捉えます。通常、次のような問題が隠れています:


  • 孤立した参照(オーファン)
  • 不適切な削除ワークフロー
  • 連携先との不整合
  • レコードアクセス前の検証不足
  • マルチカンパニーのコンテキスト管理の不統一

当社ではデータのライフサイクル管理を厳格に設計し、重要なレコードは削除せずにアーカイブする運用を推奨します。ORM を正しく使った参照整合性の担保により、本番での「レコードが見つからない」例外を最小化します。



まとめ


Odoo の「Record Does Not Exist」エラーは、システムが削除済みまたは正しく作成されていないレコードへアクセスしようとしたときに発生します。一見単純な欠損に見えても、背後には参照ロジックの破綻や安全でないデータ操作が潜んでいることが多いです。


レコードの存在チェックを行い、参照構造を一貫させ、直接DBを触らない設計にすることで、このエラーの発生頻度は大幅に下がります。整備された Odoo 環境では、制御されたワークフローと予測可能なデータ運用によって参照整合性が保たれます。


この問題を適切に扱うことは、目先のエラー解消にとどまらず、データベース全体の安定性とシステムの長期的な信頼性を高めます。

よくある質問


必ずしもそうとは限りません。単に現在のコンテキストから見えないだけのことがあります。

はい。特に自動同期ジョブには影響が出やすいです。

参照依存がないと確実に確認できる場合のみ削除してください。


Elisa Van Outrive 2026年2月17日
このポストを共有
サインイン コメントを残す