---
slug: "django-unmanaged-model-unit-test"
title: "Django managed = False なモデルをユニットテストするには"
description: "Django で、モデルの Meta: managed = False にすると、他の App からのユニットテストの時、create() などしようとすると、ProgrammingError が出ることがあります。その対応メモ。"
url: "https://www.ytyng.com/blog/django-unmanaged-model-unit-test"
publish_date: "2018-02-05T08:02:06Z"
created: "2018-02-05T08:02:06Z"
updated: "2026-02-27T11:57:17.076Z"
categories: ["Django"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/6a1df632407e4386a0cc35d55ac4add3.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

# Django managed = False なモデルをユニットテストするには

<p>Django で、モデルの <code>Meta: managed = False</code> にすると、他の App からのユニットテストの時、create() などしようとすると</p>
<pre>django.db.utils.ProgrammingError: (1146, "Table 'your_app.your_model' doesn't exist")</pre>
<p>というエラーが出ます。</p>
<p></p>
<p><code>./manage.py inspectdb</code> で作ったモデルをテストしようとする時、よく遭遇します。</p>
<p></p>
<p>その場合、</p>
<p><a href="https://www.caktusgroup.com/blog/2010/09/24/simplifying-the-testing-of-unmanaged-database-models-in-django/" target="_blank">Simplifying the Testing of Unmanaged Database Models in Django | Caktus Group</a><br />このような回避策もありますが、</p>
<p></p>
<p>your_app/tests/__init__.py</p>
<pre style="background-color: #ffffff; color: #000000; font-family: 'Menlo'; font-size: 9.0pt;"><span style="color: #000080; font-weight: bold;">import </span>sys<br /><br /><span style="color: #000080; font-weight: bold;">if </span><span style="color: #008080; font-weight: bold;">'test' </span><span style="color: #000080; font-weight: bold;">in </span>sys.argv:<br />    <span style="color: #808080; font-style: italic;"># テスト用<br /></span><span style="color: #808080; font-style: italic;">    </span><span style="color: #000080; font-weight: bold;">from </span>..models <span style="color: #000080; font-weight: bold;">import </span>YourModel<br /><br />    YourModel._meta.managed = <span style="color: #000080; font-weight: bold;">True</span></pre>
<p>tests/__init__.py にこう書くだけでも充分かな</p>
<p></p>
