テストを実行すると、データベースの初期化中にこのエラーが発生します。
Django.db.migrations.state.InvalidBasesError: Cannot resolve bases for [<ModelState: 'users.GroupProxy'>]
This can happen if you are inheriting models from an app with migrations (e.g. contrib.auth)
Django admin:
class GroupProxy(Group):
class Meta:
proxy = True
verbose_name = Group._meta.verbose_name
verbose_name_plural = Group._meta.verbose_name_plural
では、この問題を解決するにはどうすればよいですか?
これをたくさん掘り下げた後、私のために働いた唯一のものは
comment out the offending apps, run migrations, then add them in again.
単なる回避策ですが、うまくいけば誰かを助けるでしょう。
私はこの問題に遭遇し、モデルをコメントアウトすることは実際には解決策ではないため、ドキュメント化されていないauto_created = True
をMetaクラスに設定すると、Djangoそれを無視します。
class GroupProxy(Group):
class Meta:
proxy = True
auto_created = True
アプリのルートにmigrations
ディレクトリを作成し(つまり、users/migrations/
の場合)、空の__init__.py
ファイルを追加するだけで問題が解決する場合があります。少なくとも、同じエラーが発生したときは、それは私にとってはうまくいきました。
ただし、上記の@zenofewordsで提案されているように、アプリでmakemigrations
を実行したほうがよいでしょう。これにより、ディレクトリが作成され、プロキシモデルの移行が生成されます。
テストはそれらの移行を探しており、それらを見つけていません。
実行してみましたかmanage.py makemigrations <app_label>
テストを実行する前にアプリで実行しますか?
また、プロキシしようとしているモデルのアプリがINSTALLED_APPSに含まれているかどうかを確認します。
今日の午後の大半を自分でこのエラーを解決するために費やし、「アプリのコメントアウト」、「テーブルの削除」、データベース全体の削除の考えられるあらゆる組み合わせを経験した結果、私の問題は「移行」の単純な欠如が原因であることがわかりましたフォルダーとそのフォルダー内の__ init__.pyファイル。
以前の正解であった回答の1つは、言及された問題を修正したため、現在は正しくありません here 。
「init.py」に記載されているモデルが含まれているすべてのディレクトリを確認してください。
おそらくすべての人の問題を解決することはできませんが、それは私の助けになりました。
私もこの問題に直面しました(複雑なモデルの継承を行った後)。含まれている私の移行の1つ
_migrations.CreateModel(
name='Offer',
fields=[
# ...
],
options={
# ...
},
bases=('shop.entity',),
),
_
_shop.Entity
_モデルを完全に削除しましたが、移行はbases
属性でそれを参照していました。だから私はbases=('shop.entity',)
を削除しただけで動作します。それはおそらく最初から移行する機会を壊すでしょうが、少なくともさらに移行することができます。
もう1つのアドバイスは、Djangoコードに直接移動して、「ベース」の問題の原因を調べます。_Django/db/migrations/state.py
_に移動して、ブレークポイントを追加します。
_try:
bases = Tuple(
(apps.get_model(base) if isinstance(base, six.string_types) else base)
for base in self.bases
)
except LookupError:
print(self.bases) # <-- print the bases
import ipdb; ipdb.set_trace() # <-- debug here
raise InvalidBasesError("Cannot resolve one or more bases from %r" % (self.bases,))
_
プロキシモデルの束の親テーブルの名前を変更した後、この問題が発生しました。私はそれを解決しました:
makemigrations
とmigrate
を再度実行しました1つの可能性は、移行ファイル内のモデルの削除または作成が間違った順序になっていることです。 Django 1.7.8で、ベースモデルが派生モデルの前にあったときにこれを経験しました。モデルを削除するための順序を交換すると、問題が修正されました。
他のアプリを使用せずに私に起こりました-他のモデルのベースであるモデルの名前を変更した(そしておそらく同じ移行内にそのサブモデルを作成した)ため、スーパーモデルの名前を元の名前に変更して解決しました
これが、migrationsフォルダー(およびinit。pyファイルが含まれている)が既にあるアプリで発生した場合は、他のすべてのファイルを削除し、makemigrations
およびmigrate
再び。
PS:データベースのmodels.pyまたはいくつかのテーブルを手動で再構成する必要があるかもしれません。
これがpython manage.py test
の実行中にのみ発生している場合(おそらく必要な移行を既に行っているため)、設定モジュールのcontrib.auth
でMIGRATION_MODULES
を移行しないように明示する必要があります。
MIGRATION_MODULES(
'auth': "contrib.auth.migrations_not_used_in_tests",
)
私は同じ問題に直面し、app_label
にclass Meta:
属性を追加してエラーを解決しました:
class GroupProxy(Group):
class Meta:
proxy = True
app_label = '<app in which you want this model>'
verbose_name = Group._meta.verbose_name
verbose_name_plural = Group._meta.verbose_name_plural