2017-12-08 15 views
-1

このdjangoメソッドをテストで呼び出すと、インストールされていない多くのモデルが生成されます。
これらのモデルは他のアプリのテストコードからのものです。Django:apps.get_models()はunittestsからモデルを返します

たとえば、iIでapps.get_models()を使用すると、djangoパッケージの多形性テストコードからMROBase1が得られます。

=>データベースにテーブルがあるすべてのモデルを取得します。上記の質問では、テストのためだけに存在するモデルがデータベースにありません。

NB:私は1.10

+0

明確化した後@Anupamの答えで提供されるので、私はそれに応じて私の答えを編集しました。あなたの意図をより明確にするために、あなたの答えを調べてみてください。 –

答えて

2

をどのように動作するかを確認するために参照するためにも

from django.apps import apps 
myapp = apps.get_app_config('myapp') 
myapp.models #returns an OrderedDict 

get_models()here'sソース:あなたは、特定のアプリケーションのためのモデルのリストを探している場合は、次の手順を実行しますアプリケーション(複数可)から:

  1. 、手動で文字列としてすべてのアプリケーション名のリストを作成します。my_apps=['my_app_1', 'my_app_2', ...]

  2. 、あなたが 'app_name': list_of_models

  3. (第二の選択肢)の辞書で終わるだろう

    from django.apps import apps 
    
    my_app_models = { 
        name: list(apps.get_app_config(name).get_models()) for name in my_apps 
    } 
    

    all_models[<app_name>]属性を使用します。:

  4. (ファーストオプション)get_app_configget_modelsメソッドを使用し

    from django.apps import apps 
    
    my_app_models = {name: apps.all_models[name] for name in my_apps} 
    

    あなたはあなたはget_app_configで使用されるインストールされたアプリのセットを制限したい場合は'app_name': OrderedDict_of_models

+0

私はmy_appの初期リストを持っていません。これにsettings.INSTALLED_APPSを使用できますか? – guettli

+0

@guettliはい、INSTALLED_APPSを使用できますが、そこにインストールされている場合は、サードパーティのモデルをリストに表示することがあります。 –

+0

私はデータベースにテーブルを持っているすべてのモデルを取得したい。上記の質問では、テストのためだけに存在するモデルがデータベースにありません。 – guettli

1

ジャンゴを使用thisがSO投稿を参照してください。

apps.get_models()は、すべての搭載モデルを返します。それはあなたがモデルを分離する必要が

+0

ご質問ありがとうございます。しかし、私はそれが問題に合わないと思います。 – guettli

+2

なぜですか?ほかに何が欲しいですか? –

+0

すべてのアプリのすべてのモデルをリストしたいと思います。私は "myapp"を持っていません。 – guettli

2

apps.get_models()の辞書とpは、インストールされているすべてのモデルを返します。[S]あなたはset_available_appsを使用することができます。

from django.apps import apps 
myapp = apps.set_available_apps(list_of_available_apps) 
関連する問題