2016-03-26 8 views
12

get_model()を使用して私のモデルで周期的なインポートを避けたいのですが、name 'get_model' is not definedエラーが発生します。私はget_model()が1.8で償却され、明らかに1.9には存在しないと読んでいます。同等の呼び出しは何ですか?または、2つのファイル(models.py)にサイクリックインポートを避ける別の方法がありますか?Django 1.9のdjango.db.models.loading.get_model()に相当するものは何ですか?

+0

'apps.get_model()'あなたは、円形の輸入を解決する助けにはなりません。関数内で 'apps.get_model()'を使用して循環インポートを回避すると、インラインインポートは正常に機能します。 'ForeignKey'などの場合、文字列参照、つまり' models.ForeignKey( 'myapp.MyModel') 'を使用できます。 – knbk

答えて

27

django.db.models.loading.get_model()がdjango 1.9で削除されました。

代わりにdjango.appsを使用することになっています。

>>> from django.apps import apps 
>>> apps.get_model('shop', 'Product') 
<class 'shop.models.Product'> 
>>> 

Django docs reference

+0

これは、Django 1.8からDjango 1.11の互換性に移行するためのアプリの変換に本当に役立ちました。 'django.apps.apps.get_model'と' django.apps.AppConfig.get_model'の違いは何ですか? – MadPhysicist

+0

'apps.get_model'はグローバルコンテキスト(すべてのアプリケーションのモデル)で便利で、' AppConfig.get_model'は特定のアプリケーションのモデルを見つけるのに便利です。 – v1k45

関連する問題