web-dev-qa-db-ja.com

Djangoモデルは "明示的なapp_labelを宣言していません"

私は機知に富んでいます。何十時間ものトラブルシューティングの後、おそらくそれ以上で、私はついにビジネスを始めたと思ったが、それから次のようになった。

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

Web上にSO LITTLE情報があり、そこに解決策が何も私の問題を解決していません。どんなアドバイスでも非常に高く評価されるでしょう。

私は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'
76
Slbox

アプリケーション名を設定ファイルに入れていませんか。 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'
60
Xeberdee

私は同じエラーを受け取るし、私はこの問題を解決する方法を知りません。 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ファイルを削除すると問題が解決しました。

13
samuel

PyCharmでテストを実行したときに私はまったく同じエラーがありました。明示的にDjango_SETTINGS_MODULE環境変数を設定することでそれを修正しました。 PyCharmを使っているなら、Edit Configurationsボタンを押してEnvironment Variablesを選んでください。

変数をyour_project_name.settingsに設定すると、問題は解決します。

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

12
stasdeep

私は./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()
12
lukeaus

私は今同じ問題を抱えていました。私はアプリ名に名前空間を追加することで私の問題を解決しました。誰かがこれが参考になることを願っています。

apps.py

from Django.apps import AppConfig    

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

Pythonを使っていて、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に変更し、問題を解決しました

5
rpstw

Gitマージのために不正な形式の移行がある単一のアプリに対して移行を生成しようとしたときに、このエラーに遭遇しました。例えば.

manage.py makemigrations myapp

移行を削除して実行しました。

manage.py makemigrations

エラーは発生せず、マイグレーションは正常に生成されました。

1
Cerin

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

このような状況にある他の人のために、私は自分の解決策を見つけました GitHub号で 、これは DRF設定UNAUTHENTICATED_USER設定を解除することでした:

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

私の場合、私は修正を見つけることができたし、他のみんなのコードを見ても同じ問題になるかもしれません。ファイル。

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

1

私はこの問題に遭遇し、何が悪かったのかを考え出したところです。それが私に起こったように前の答えが問題を記述しなかったので、私は私が他人のためにそれを掲示するつもりですが:

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

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

それで…あなたの移行をチェックして、そして頑張ってください!

1
harrouet

テストでモデルをインポートする際にこのエラーが発生しました。つまり、Djangoのプロジェクト構造が次のようになっています。

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

ファイルtest_models.pyMyModelをインポートしました。

from models import MyModel

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

from myapp.models import MyModel

お役に立てれば!

シモンズ:これは少し遅いかもしれませんが、私は自分のコードでこの問題を解決する方法を他の人の答えに見つからないので、私は私の解決策を共有したいと思います。

1
juliocesar

Djangoのrest_frameworkでAPIをビルドしているときにも、同じようなエラーが出ます。

RuntimeError:Model class apps.core.models.Universityは明示的な> app_labelを宣言せず、INSTALLED_APPSのアプリケーションにはありません。

luke_ausの答えは私のrls.pyを修正することによって私を助けてくれました

から

from project.apps.views import SurgeryView

from apps.views import SurgeryView

私の場合、プロジェクトレベルでの相対モジュールパスrls.pyINSTALLED_APPSおよびapps.pyをプロジェクトルートにルートする代わりに使用したため、これが発生していました。つまり、相対モジュールパス+ハックではなく、全体の絶対モジュールパス。

アプリのINSTALLED_APPSapps.pyのパスをどれほどいじっても、3つすべてがプロジェクトルートに根ざしているまで、runserverpytestの両方を機能させることはできませんでした。

フォルダー構造:

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

次の場合、manage.py runserverとgunicornをwsgiで実行し、portalアプリビューを問題なく使用できましたが、ModuleNotFoundError: No module named 'apps'が正しく構成されていてもpytestは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.PortalConfigおよびPortalConfig.nameからbiz_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を使用する必要があることを発見しました。

1
jbothma

私の場合、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サーバによって吐き出されたエラーメッセージの最後の部分を報告していることに注意してください。しかし、上にスクロールすると、そのエラーの真ん中にその理由がわかります。

1
user2641103

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

0
black_hole_sun

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

私はsettings.pylocal_settingsフォルダの中にいました。ただし、インポートできるように、同じフォルダに__ init __。pyを含めることをお勧めします。空白を追加すると__ init __。py問題が解決しました。

0
James Bradbury

たぶんあなたは依存インポートを持っています。

私の場合、私は自分のモデルのパラメータとしてシリアライザクラスを使用しましたが、シリアライザクラスはこのモデルを使用していました。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
Dashko Leonid

私は自分のファイルの1つで短縮形のfrom .models import *構文を使用していたので、今日このエラーがあり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

0
inostia

私は今日このエラーに遭遇し、グーグル後にここで終わりました。既存の答えのどれも私の状況に関連しているようには見えません。私がしなければならなかった唯一のことは私の__init__.pyファイルからモデルをアプリのトップレベルにインポートすることでした。モデルを使用してインポートを関数に移動する必要がありました。

Djangoは奇妙なコードをいくつか持っているようです。

0
boxed

環境変数から取得するためにSECRET_KEYを移動し、アプリケーションの実行時に設定を忘れたため、このエラーが発生しました。 settings.pyにこのようなものがある場合

SECRET_KEY = os.getenv('SECRET_KEY')

その後、実際に環境変数を設定していることを確認してください。

0
ameier38