Djangoモデルは「明示的なapp_labelを宣言しない」


119

私はウィットの終わりにいます。十数時間のトラブルシューティングの後、おそらくそれ以上に、私はようやく自分がビジネスに入ると思っていましたが、それから私は次のことを行いました:

Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label 

これに関するWeb上の非常に小さな情報があり、そこに私の解決策はありません。どんなアドバイスでも非常にいただければ幸いです。

Python 3.4とDjango 1.10を使用しています。

私のsettings.pyから:

INSTALLED_APPS = [
    'DeleteNote.apps.DeletenoteConfig',
    'LibrarySync.apps.LibrarysyncConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

そして、私のapps.pyファイルは次のようになります。

from django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

そして

from django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'

2
INSTALLED_APPSにdjango.contrib.contenttypesがありません。
RemcoGerlich 2016年

2
次に、モデルが読み込まれる前にインポートした可能性があります。INSTALLED_APPSのcontenttypesの前にリストされているアプリを使用していますか?
RemcoGerlich 2016年

1
それは珍しいです、あなたは自分のプロジェクトやアプリをまったく持っていませんか?
RemcoGerlich 2016年

1
models.pyがあるものはすべてINSTALLED_APPSにあるはずです。それらの1つがcontenttypeを使用している場合(たとえば、一般的な外部キーのため)、リストのcontenttypesの下にある必要があります。
RemcoGerlich 2016年

1
イライラします、それは非常に小さい何かである可能性が高いですが、ここからどこを見分けるのは難しいです。何かをsettings.pyなどにインポートしますか?
RemcoGerlich

回答:


91

設定ファイルにアプリケーション名を入力していませんか?これmyAppNameConfigは、.manage.py createapp myAppNameコマンドによってapps.pyで生成されるデフォルトのクラスです。ここで、myAppNameはアプリの名前です。

settings.py

INSTALLED_APPS = [
'myAppName.apps.myAppNameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

このようにして、設定ファイルは、アプリケーションを呼び出したいものを見つけます。次のコードをに追加することで、apps.pyファイルでの外観を後で変更できます。

myAppName / apps.py

class myAppNameConfig(AppConfig):
    name = 'myAppName'
    verbose_name = 'A Much Better Name'

わかりましたので、この例ではこれは非常に理にかなっており、構文の理解に基づいて変更を実装しましたが、まったく同じエラーが100%発生しています。投稿を更新して詳しく説明しました。
Slbox 2016年

2
@xeberdeeと@RemcoGerlichに感謝します。結局のところ、私の解決策は、django.contribアプリの下にアプリをロードimport django django.setup()し、settings.pyのINSTALLED_APPSエントリをエントリの下に移動することでした。
Slbox 2016年

2
好奇心から外れた-設定ファイルにdjango django.setup()をインポートする理由 また、インストール済みアプリリストの最初のアプリであっても、アプリは読み込まれるはずです。
Xeberdee 2016年

1
これと彼の質問に書いたものの違いは何ですか?
マットD

1
ポイントは、アプリが設定ファイルのクラスの名前フィールドを介して設定INSTALLED_APPSでどのように検出されるかでした。投稿が編集されました。
Xeberdee 2017年

34

同じエラーが発生し、この問題の解決方法がわかりません。djangoのmanage.pyと同じディレクトリにinit.pyがあることに気づくまでに何時間もかかりました。

前:

|-- myproject
  |-- __init__.py
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

後:

|-- myproject
  |-- manage.py
  |-- myproject
    |-- ...
  |-- app1
    |-- models.py
  |-- app2
    |-- models.py

この「明示的なapp_labelを宣言していない」エラーが発生することは非常に混乱しています。しかし、このinitファイルを削除すると問題が解決しました。


2
聖なる煙、私はこれを長い間見ていました-素晴らしいキャッチ!
user3167654

私はpydocを使用してドキュメントを生成しようとしていますが、私のアプリはinit.pyなしで非表示になっています
Serg Smyk

20

PyCharmでテストを実行すると、まったく同じエラーが発生しました。DJANGO_SETTINGS_MODULE環境変数を明示的に設定することで修正しました。PyCharmを使用している場合は、[ 設定の編集 ]ボタンをクリックして、[ 環境変数 ]を選択します。

変数をに設定するyour_project_name.settingsと、問題が修正されます。

PyCharmは独自のでテストを実行するため、このエラーが発生するようmanage.pyです。


1
Pycharmを介してサーバーを実行する場合、設定を追加する必要はありませんでしたが、Pycharmテストを実行するこの問題がありました。手動でDJANGO_SETTINGS_MODULEを構成に追加してテストを実行すると、問題が解決しました。
PhoebeB

1
また、構成を編集するときは、テンプレートを編集すると便利です。
YngveHøiseth2018

1
設定->言語とフレームワーク-> Django->設定で値を追加すると、DJANGO_SETTINGS_MODULE新しいDjangoおよびDjangoテスト実行構成ごとに自動的に設定されます。
Tobias Ernst

ちなみに、私はこのソリューションで示されたとおりに実行しましたが、最初は機能しませんでした。PyCharmが保存していない、結局のところDJANGO_SETTINGS_MODULE、私がクリックしたときに初めてApply、その後OK。私はそれをもう一度やりましたが、今ではうまくいきます。PyCharmの奇妙さのようです。
MikeyE

インポートを正しく宣言したことを確認する必要がありました:from <app>.<module> import <class>-PyCharm自動インポートがありません<app>でした。これを修正したら(依存モジュールもチェックしました)、問題なく動作しました。
マシューヘガティ

18

私が使用したときにこれを取得しましたが、./manage.py shell 誤ってルートプロジェクトレベルのディレクトリからインポートしました

# don't do this
from project.someapp.someModule import something_using_a_model
# do this
from someapp.someModule import something_using_a_model

something_using_a_model()

私の場合、私はからに変更する必要がありfrom fields import xましたfrom .fields import x
daigorocub

13

Python3を使用してnoobとして Djangoエラーではなくインポートエラーである可能性があります

違う:

from someModule import someClass

正しい:

from .someModule import someClass

これは数日前に起こりますが、実際には再現できません... Djangoを初めて使用する人だけがこれに遭遇する可能性があると思います。

admin.pyでモデルを登録してみてください:

from django.contrib import admin
from user import User
admin.site.register(User)

サーバーを実行しようとすると、エラーは次のようになります

some lines...
File "/path/to/admin.py" ,line 6
tell you there is an import error
some lines...
Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label

に変更user.user、問題を解決しました


9
Stackoverflowへようこそ!あなたの答えはOPの質問とは無関係であることを言わざるを得ません。初心者として、最初にソリューションの正当性を検証せずに、ソリューションを慎重に提案する必要があります。しかし、また戻ってきてください、そしてできる限り具体的な回答を投稿してください。ありがとう!
回避フロー2017

1
StackについてのコメントがあなたのXeon Philのようになってほしいと思います。初心者は初日にはStackのエキスパートではないことに不満を抱く狂ったコメンターに追われて、あまりに頻繁に新しいユーザーがいます。
Slbox 2017

1
あなたは正しい、@ evadeflow、私の最初の答えは本当に無関係であるように見えます、私は答えを明確にしようとします。とにかく、ちょうど答えが役に立つことを願っています。
rpstw 2017

私の場合も同様の問題でした。「from ..core.models import CommonInfo」は「from apps.core.models import CommonInfo」にならなければなりませんでした
user42488

これは私の問題であり、2つの別々のファイルで発生していたため、不明瞭になりました。おめでとう、ネストされたインポート!2to3の賢明な変更に対する愚かな拒否!
9999

13

今も同じ問題がありました。私はアプリ名に名前空間を追加することで私の問題を修正しました。誰かがこれが役に立ったことを願っています。

apps.py

from django.apps import AppConfig    

class SalesClientConfig(AppConfig):
        name = 'portal.sales_client'
        verbose_name = 'Sales Client'

8

テストでモデルをインポートするときにこのエラーが発生しました。つまり、次のDjangoプロジェクト構造が与えられます。

|-- myproject
    |-- manage.py
    |-- myproject
    |-- myapp
        |-- models.py  # defines model: MyModel
        |-- tests
            |-- test_models.py

この方法でtest_models.pyインポートMyModelしたファイル:

from models import MyModel

この方法でインポートした場合、問題は修正されました。

from myapp.models import MyModel

お役に立てれば!

PS:これは少し遅いかもしれませんが、コードでこの問題を解決する方法を他の回答で見つけられなかったので、自分の解決策を共有したいと思います。


あなたはチャンピオンです。ありがとう。これはとんでもないエラーでした。
カーク

2
これを見つけるのに予想以上に長くかかった。test.pyファイルで相対インポートを使用していました。使用時にエラーが発生しましたfrom .models import MyModelfrom myapp.models import MyModel問題を修正するように変更。
monkut

@monkutも同じです。なぜこれが起こっているのかしら。ちなみに私はカスタムアプリフォルダを使用しています。パスに追加されたプロジェクトルートの「/ apps」。

4

この問題に遭遇し続け、この質問に戻ってきた後、私は自分の問題が何であるかを共有したいと思いました。

@Xeberdeeが正しいことはすべて正しいので、それに従って問題が解決するかどうかを確認し、そうでない場合はこれが私の問題でした。

私のapps.pyでこれは私が持っていたものです:

class AlgoExplainedConfig(AppConfig):
    name = 'algo_explained'
    verbose_name = "Explain_Algo"
    ....

そして、私がやったことは、次のようにアプリ名の前にプロジェクト名を追加することだけです。

class AlgoExplainedConfig(AppConfig):
name = '**algorithms_explained**.algo_explained'
verbose_name = "Explain_Algo"

これで問題が解決し、その後makemigrationsとmigrateコマンドを実行できました!幸運を


3

今日from .models import *、ファイルの1つで短縮構文を使用していたため、Djangoテストを実行しようとしたときにこのエラーが発生しました。問題は私がそのようなファイル構造を持っていたことでした:

    apps/
      myapp/
        models/
          __init__.py
          foo.py
          bar.py

そして、models/__init__.py私は短縮構文を使用してモデルをインポートしていました:

    from .foo import *
    from .bar import *

私のアプリケーションでは、次のようにモデルをインポートしていました:

    from myapp.models import Foo, Bar

これにより、Django model doesn't declare an explicit app_label実行時に./manage.py test

問題を修正するために、私はフルパスから明示的にインポートする必要がありましたmodels/__init__.py

    from myapp.models.foo import *
    from myapp.models.bar import *

これでエラーが処理されました。

H / t https://medium.com/@michal.bock/fix-weird-exceptions-when-running-django-tests-f58def71b59a


これも私にとって問題でした。ありがとう!
サムクリーマー

3

私はプロジェクトレベルの中の相対モジュールパスを使用するので、私の場合、これは起こっていたurls.pyをINSTALLED_APPSそしてapps.py代わりのプロジェクトのルートに根ざしされています。つまり、相対モジュールパス+ハックではなく、全体の絶対モジュールパス。

パスを台無しどのくらいのIどんなにINSTALLED_APPSapps.py私のアプリでは、私は両方を得ることができませんでしたrunserverし、pytestそれらのすべての3つのプロジェクトのルートに根ざしたゴマの仕事に。

フォルダー構造:

|-- manage.py
|-- config
    |-- settings.py
    |-- urls.py
|-- biz_portal
    |-- apps
        |-- portal
            |-- models.py
            |-- urls.py
            |-- views.py
            |-- apps.py

以下では、私が実行できるmanage.py runserverとWSGIと使用とgunicorn portal問題なくアプリの景色が、pytestはとエラーとなるModuleNotFoundError: No module named 'apps'にもかかわらず、DJANGO_SETTINGS_MODULE正しく構成されていなります。

config / settings.py:

INSTALLED_APPS = [
    ...
    "apps.portal.apps.PortalConfig",
]

biz_portal / apps / portal / apps.py:

class PortalConfig(AppConfig):
    name = 'apps.portal'

config / urls.py:

urlpatterns = [
    path('', include('apps.portal.urls')),
    ...
]

中のアプリの参照を変更するのconfig / settings.pyにbiz_portal.apps.portal.apps.PortalConfigPortalConfig.namebiz_portal.apps.portal実行を許可pytest(私はテストのために持っていないportal、まだビュー)が、runserverとエラーう

RuntimeError:モデルクラスapps.portal.models.Businessは明示的なapp_labelを宣言せず、INSTALLED_APPSのアプリケーションにありません

最後にapps.portal、まだ相対パスを使用しているものを確認するために探しましたが、config / urls.pyでもを使用する必要があることがわかりましたbiz_portal.apps.portal.urls


相対パスによるハック.........同じでした。あなたの洞察は私を大いに助けました
zar3bski

2

gitマージのために既存の不正な移行があった単一のアプリの移行を生成しようとしたときに、このエラーに遭遇しました。例えば

manage.py makemigrations myapp

私が移行を削除して実行したとき:

manage.py makemigrations

エラーは発生せず、移行は正常に生成されました。


ありがとうございました。移行は引き続き苛立たしいものです。
HashRocketSyntax

2

同様の問題がありましたが、モデルクラスでメタクラスを使用してapp_labelを明示的に指定することで私の問題を解決できました

class Meta:
    app_label  = 'name_of_my_app'

ベンジャミン、ありがとう!私のDjangoプロジェクトでは、Sphinxを使用してドキュメントを生成しており、:: autoclassディレクティブは、提案したようにモデルのメタクラスに追加するまで「app_label」エラーを出していました。
Stefan Musarra

うまくいったことをうれしく思います
Benjamin Andoh

1

Django Rest FrameworkアプリをDRF 3.6.3およびDjango 1.11.1 にアップグレードしようとしたときに、このエラーが発生しました。

この状況にいる他の人のために、私はGitHubの問題で私の解決策を見つけました、それはDRF設定でUNAUTHENTICATED_USER設定を解除することでした:

# webapp/settings.py
...
REST_FRAMEWORK = {
    ...
    'UNAUTHENTICATED_USER': None
    ...
}

1

私はこの問題に遭遇し、何が悪いのかを理解しました。問題が発生したときに以前の回答で問題が説明されていなかったため、私は他の人にそれを投稿しましたが、

  • この問題はpython migrate.py startapp myApp、プロジェクトのルートフォルダーから使用し、myAppをを使用して子フォルダーに移動することで発生しましたmv myApp myFolderWithApps/
  • myApp.modelsを作成して実行しましたpython migrate.py makemigrations。すべてうまくいきました。
  • その後、myAppからモデルをインポートする別のアプリでも同じことを行いました。カブーム!makemigrationsの実行中にこのエラーに遭遇しました。それは私が使用しなければならなかったからでしたmyFolderWithApps.myApp、アプリを参照するですが、MyApp / apps.pyを更新するのを忘れていました。そこで、myApp / apps.py、settings / INSTALLED_APPS、および2番目のアプリのインポートパスを修正しました。
  • しかしその後エラーが発生し続けました:理由は、間違ったパスでモデルをmyAppからインポートしようとした移行があったためです。移行ファイルを修正しようとしましたが、DBをリセットし、移行を削除して最初からやり直す方が簡単なところに行きました。

つまり、簡単に言えば、この問題は、最初はmyAppのapps.py、設定、および2番目のアプリのインポートパスにある間違ったアプリ名に起因していました。-しかし、インポートが誤ったアプリ名を参照して移行が作成されたため、これら3つの場所のパスを修正するだけでは不十分でした。そのため、移行中に同じエラーが発生し続けました(今回は移行の場合を除く)。

だから...あなたの移行をチェックして、幸運を!


1

Djangoのrest_frameworkでAPIをビルドしているときに、同様のエラーが発生しました。

RuntimeError:モデルクラスapps.core.models.Universityは明示的なapp_labelを宣言せず、INSTALLED_APPSのアプリケーションにありません。

luke_ausの答えは私のurls.pyを修正することで私を助けました

から

from project.apps.views import SurgeryView

from apps.views import SurgeryView

私にとって、それはマイグレーションの中に隠されていました。どのようにそれが起こったのかはわかりませんが、プロジェクト名/パスの修正は削除されました。
マイケルトンプソン

1

私の場合、コードをDjango 1.11.11からDjango 2.2に移植するときにこのエラーが発生しました。カスタムのFileSystemStorage派生クラスを定義していました。Django 1.11.11では、models.pyに次の行が含まれていました。

from django.core.files.storage import Storage, DefaultStorage

そして、後でファイルにクラス定義がありました:

class MyFileStorage(FileSystemStorage):

ただし、Django 2.2ではFileSystemStorage、インポート時にクラスを明示的に参照する必要があります。

from django.core.files.storage import Storage, DefaultStorage, FileSystemStorage

そして、間違いなく、エラーは消えます。

Djangoサーバーによって吐き出されたエラーメッセージの最後の部分は誰もが報告していることに注意してください。ただし、上にスクロールすると、そのエラーmambo-jamboの真ん中に理由が表示されます。


1

私の場合、修正を見つけることができました。他の人のコードを見ると、同じ問題である可能性があります。settings.pyのインストール済みアプリのリストに「django.contrib.sites」を追加するだけで済みました。ファイル。

これが誰かを助けることを願っています。これはコーディングコミュニティへの私の最初の貢献です


1

TL; DR:空白の__init__.pyを追加すると問題が解決しました。

PyCharmでこのエラーが発生し、設定ファイルがまったくインポートされていないことに気付きました。これを伝える明らかなエラーはありませんでしたが、いくつかのナンセンスコードをsettings.pyに挿入しても、エラーは発生しませんでした。

私が持っていたsettings.py内部local_settingsのフォルダを。しかし、私が含まれるようにfogottenたい__init__.pyを、それが輸入されるように同じフォルダに。これを追加すると、エラーはなくなりました。


1

すべての設定が正しい場合、それは単なるインポートの混乱である可能性があります。問題のあるモデルをインポートする方法に注意してください。

以下は動作しませんfrom .models import Business。代わりにフルインポートパスを使用してください:from myapp.models import Business


1

他のすべてが失敗し、PyCharm "Python console"(または "Django console")にインポートしようとしたときにこのエラーが表示された場合:

コンソールを再起動してみてください。

これはかなり恥ずかしいことですが、それをするのを忘れていることに気づくまでにしばらく時間がかかりました。

これが起こったことです:

新しいアプリを追加し、最小限のモデルを追加してから、Python / Djangoコンソールでモデルをインポートしようとしました(PyCharm pro 2019.2)。これはdoesn't declare an explicit app_label新しいアプリをに追加していなかったためエラーが発生しましたINSTALLED_APPS。そのためINSTALLED_APPS、アプリをに追加し、インポートを再試行しましたが、それでも同じエラーが発生しました。

ここに来て、他のすべての答えを読んでください、しかし何も合わないようでした。

最後に、新しいアプリを INSTALLED_APPS

注:モジュールに新しいオブジェクトを追加した後、PyCharm Pythonコンソールの再起動に失敗することも、非常に混乱する優れた方法です。 ImportError: Cannot import name ...


この回答のおかげで、.envファイルを
入手するの

1

O ... M ... G私もこのエラーを受け取り、ほぼ2日間費やしましたが、ようやく解決することができました。正直なところ、エラーは問題の原因とは関係がありませんでした。私の場合、それは構文の単純な問題でした。私はdjangoコンテキストでいくつかのdjangoモデルを使用するスタンドアロンのPythonモジュールを実行しようとしましたが、モジュール自体はdjangoモデルではありませんでした。しかし、私はクラスを間違って宣言していました

持つ代わりに

class Scrapper:
    name = ""
    main_link= ""
    ...

やっていた

class Scrapper(Website):
    name = ""
    main_link= ""
    ...

これは明らかに間違っています。このメッセージは誤解を招くので、自分ではどうしようもありませんでしたが、設定に問題があるか、djangoを初めて使用するので、間違った方法でdjangoを使用しただけだと思います。

同じ愚かさを経験しても問題を解決できるので、初心者のためにここでこれを共有します。


0

SECRET_KEY環境変数からプルするように移動し、アプリケーションの実行時に設定するのを忘れた後に、このエラーを受け取りました。あなたの中にこのようなものがあればsettings.py

SECRET_KEY = os.getenv('SECRET_KEY')

次に、実際に環境変数を設定していることを確認します。


0

ほとんどの場合、依存するインポートがあります。

私の場合、モデルのパラメータとしてシリアライザクラスを使用し、シリアライザクラスはこのモデルを使用していました:serializer_class = AccountSerializer

from ..api.serializers import AccountSerializer

class Account(AbstractBaseUser):
    serializer_class = AccountSerializer
    ...

そして「シリアライザ」ファイルで:

from ..models import Account

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = (
            'id', 'email', 'date_created', 'date_modified',
            'firstname', 'lastname', 'password', 'confirm_password')
    ...

0

今日、このエラーが発生し、グーグルした後、ここに行きました。既存の回答のどれも私の状況に関連しているようには見えません。__init__.pyアプリの最上位にあるファイルからモデルをインポートすることだけが必要でした。モデルを使用して関数にインポートを移動する必要がありました。

Djangoには、非常に多くの異なるシナリオでこのように失敗する可能性のある奇妙なコードがあるようです!


0

今日もこのエラーが発生しました。メッセージはINSTALLED_APPS私のアプリの特定のアプリを参照しています。しかし、実際には、この特定のアプリとは何の関係もありませんでした。新しい仮想環境を使用して、このプロジェクトで使用したいくつかのライブラリをインストールするのを忘れました。追加のライブラリをインストールした後、機能しました。


0

PyCharmユーザーの場合:「クリーン」でないプロジェクト構造を使用するとエラーが発生しました。

だった:

project_root_directory
└── src
    ├── chat
       ├── migrations
       └── templates
    ├── django_channels
    └── templates

今:

project_root_directory
├── chat
   ├── migrations
   └── templates
       └── chat
├── django_channels
└── templates

ここには多くの良い解決策がありますが、まず、プロジェクト構造をクリーンアップするか、設定する前にPyCharm Django設定を調整する必要があると思います DJANGO_SETTINGS_MODULE変数を。

それが誰かを助けることを願っています。乾杯。


-1

問題は次のとおりです。

  1. モデルファイルに変更を加えましたが、まだDBに追加していませんが、Python manage.py runserverを実行しようとしています。

  2. Python manage.py makemigrationsを実行する

  3. Python manage.py移行

  4. これで、Pythonのmanage.py runserverが正常に動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.