web-dev-qa-db-de.com

Django-Modell "deklariert kein explizites app_label"

Ich bin am Ende. Nach einem Dutzend Stunden der Fehlersuche, wahrscheinlich mehr, dachte ich, ich wäre endlich im Geschäft, aber dann bekam ich:

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

Im Web gibt es SO LITTLE-Informationen dazu und keine Lösung da draußen hat mein Problem gelöst. Jeder Rat wäre enorm zu schätzen.

Ich benutze Python 3.4 und Django 1.10.

Aus meinem 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',
]

Und meine apps.py-Dateien sehen so aus:

from Django.apps import AppConfig


class DeletenoteConfig(AppConfig):
    name = 'DeleteNote'

und

from Django.apps import AppConfig


class LibrarysyncConfig(AppConfig):
    name = 'LibrarySync'
60
Slbox

Fehlt es, Ihren Anwendungsnamen in die Einstellungsdatei einzufügen? Die myAppNameConfig ist die Standardklasse, die in apps.py vom Befehl .manage.py createapp myAppName generiert wird. Wo meinAppName ist der Name Ihrer App. 

einstellungen.py

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

Auf diese Weise findet die Einstellungsdatei heraus, wie Sie Ihre Anwendung aufrufen möchten. Sie können das Aussehen später in der apps.py-Datei ändern, indem Sie den folgenden Code hinzufügen

myAppName/apps.py

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

Ich hatte genau den gleichen Fehler beim Ausführen von Tests mit PyCharm. Ich habe es behoben, indem Sie explizit die Umgebungsvariable Django_SETTINGS_MODULE gesetzt haben. Wenn Sie PyCharm verwenden, klicken Sie einfach auf die Schaltfläche Edit Configurations Konfigurationen bearbeiten/und wählen Sie Environment Variables .

Setzen Sie die Variable auf your_project_name.settings und das sollte die Sache beheben.

Es scheint, dass dieser Fehler auftritt, da PyCharm Tests mit seinem eigenen manage.py ausführt.

11
stasdeep

Ich habe es bekommen, als ich ./manage.py Shell Verwendete. Dann habe ich aus Versehen aus dem Stammverzeichnis der Projektebene importiert

# 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()
11
lukeaus

Ich hatte gerade das gleiche Problem. Ich habe mein Problem behoben, indem Sie dem Anwendungsnamen einen Namespace hinzugefügt haben. Ich hoffe jemand findet das hilfreich. 

apps.py

from Django.apps import AppConfig    

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

Ich bekomme den gleichen Fehler und weiß nicht, wie ich dieses Problem lösen kann. Ich habe viele Stunden gebraucht, um zu bemerken, dass ich ein init.py im selben Verzeichnis wie das manage.py von Django habe.

Vor:

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

Nach dem:

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

Es ist ziemlich verwirrt, dass Sie diese Fehlermeldung erhalten, die nicht explizit app_label deklariert. Durch das Löschen dieser Datei init wurde mein Problem jedoch behoben.

7
samuel

als Noob, der Python3 verwendet, finde ich, dass es einen Importfehler anstelle eines Django-Fehlers gibt

falsch:

from someModule import someClass

recht:

from .someModule import someClass

das passiert vor ein paar Tagen, aber ich kann es wirklich nicht reproduzieren.

versuchen Sie, ein Modell in admin.py zu registrieren:

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

versuchen Sie, den Server auszuführen, der Fehler sieht so aus

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 in .user ändern, Problem gelöst

5
rpstw

Ich habe diesen Fehler erhalten, als ich versuchte, meine Django Rest Framework - App auf DRF 3.6.3 und Django 1.11.1 zu aktualisieren.

Für alle anderen in dieser Situation fand ich meine Lösung in einer GitHub-Ausgabe , die die Einstellung UNAUTHENTICATED_USER in den DRF-Einstellungen aufhob :

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

in meinem Fall konnte ich eine Fehlerbehebung finden und beim Betrachten des Codes aller anderen kann es sich um dasselbe Problem handeln. Ich musste einfach 'Django.contrib.sites' zur Liste der installierten Apps in der settings.py hinzufügen Datei.

hoffe das hilft jemandem. Dies ist mein erster Beitrag für die Coding-Community

1

Ich bin gerade auf dieses Thema gestoßen und habe herausgefunden, was falsch lief. Da in keiner früheren Antwort das Problem so beschrieben wurde, wie es mir passiert ist, möchte ich es für andere posten:

  • das Problem kam durch die Verwendung von python migrate.py startapp myApp aus meinem Projektstammordner. Verschieben Sie dann myApp mit mv myApp myFolderWithApps/ in einen untergeordneten Ordner.
  • Ich schrieb myApp.models und lief python migrate.py makemigrations. Alles ist gut gegangen.
  • dann tat ich dasselbe mit einer anderen app, die modelle aus myApp importierte. Kaboom! Ich bin auf diesen Fehler gestoßen, als ich Makemigrationen durchführte. Das lag daran, dass ich myFolderWithApps.myApp verwenden musste, um auf meine App zu verweisen, aber ich hatte vergessen, MyApp/apps.py zu aktualisieren. Also habe ich myApp/apps.py, settings/INSTALLED_APPS und meinen Importpfad in meiner zweiten App korrigiert.
  • aber dann passierte der Fehler immer wieder: Der Grund war, dass ich Migrationen hatte, die versuchten, die Modelle von myApp mit dem falschen Pfad zu importieren. Ich habe versucht, die Migrationsdatei zu korrigieren, aber ich bin an dem Punkt angelangt, an dem es einfacher war, die Datenbank zurückzusetzen und die Migrationen zu löschen, um von vorne zu beginnen.

Um es kurz zu machen: - Das Problem stammte anfangs aus dem falschen App-Namen in apps.py von myApp, in den Einstellungen und im Importpfad meiner zweiten App . - Es war jedoch nicht ausreichend, die Pfade an diesen drei Stellen zu korrigieren, da Migrationen mit Importen erstellt wurden, die auf den falschen App-Namen verweisen. Daher ist derselbe Fehler während der Migration aufgetreten (mit Ausnahme dieser Zeit von Migrationen).

Also ... überprüfen Sie Ihre Migrationen und viel Glück!

1
harrouet

In meinem Fall geschah dies, weil ich einen relativen Modulpfad auf Projektebene rls.py, INSTALLED_APPS und apps.py verwendet habe, anstatt im Projektstammverzeichnis verwurzelt zu sein. absolute Modulpfade durchgehend, anstatt relative Modulpfade + Hacks.

Egal, wie viel ich mit den Pfaden in INSTALLED_APPS und apps.py in meiner App herumgespielt habe, ich konnte nicht beide runserver und pytest zum Arbeiten bringen, bis alle drei funktionieren in der Projektwurzel verwurzelt.

Ordnerstruktur:

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

Mit dem folgenden Befehl könnte ich manage.py runserver und gunicorn mit wsgi ausführen und portal App-Ansichten ohne Probleme verwenden, aber pytest würde einen Fehler mit ModuleNotFoundError: No module named 'apps' machen, obwohl Django_SETTINGS_MODULE korrekt konfiguriert wurde.

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')),
    ...
]

Das Ändern der App-Referenz in config/settings.py zu biz_portal.apps.portal.apps.PortalConfig und PortalConfig.name zu biz_portal.apps.portal ermöglichte die Ausführung von pytest (ich habe noch keine Tests für portal Aufrufe), aber runserver würde einen Fehler mit machen

RuntimeError: Die Modellklasse apps.portal.models.Business deklariert kein explizites app_label und befindet sich nicht in einer Anwendung in INSTALLED_APPS

Schließlich habe ich nach apps.portal gegriffen, um zu sehen, was noch einen relativen Pfad verwendet, und festgestellt, dass config/urls.py auch biz_portal.apps.portal.urls verwenden sollte.

1
jbothma

In meinem Fall habe ich diesen Fehler beim Portieren des Codes von Django 1.11.11 nach Django 2.2 erhalten. Ich habe eine benutzerdefinierte, von FileSystemStorage abgeleitete Klasse definiert. In Django 1.11.11 hatte ich die folgende Zeile in models.py:

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

und später in der Datei hatte ich die Klassendefinition:

class MyFileStorage(FileSystemStorage):

In Django 2.2 muss ich beim Importieren jedoch explizit auf die Klasse FileSystemStorage verweisen:

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

und voilà !, der Fehler verschwindet.

Beachten Sie, dass jeder den letzten Teil der vom Django-Server ausgegebenen Fehlermeldung meldet. Wenn Sie jedoch nach oben scrollen, finden Sie den Grund in der Mitte dieses Fehlers mambo-jambo.

1
user2641103

Ich bin auf diesen Fehler gestoßen, als ich versuchte, Migrationen für eine einzelne App zu generieren, bei der aufgrund einer git-Zusammenführung vorhandene Missformen vorhanden waren. z.B.

manage.py makemigrations myapp

Wenn ich die Migrationen gelöscht habe und dann ausgeführt habe:

manage.py makemigrations

der Fehler trat nicht auf und die Migrationen wurden erfolgreich generiert.

0
Cerin

Ich habe diesen Fehler auch heute bekommen. Die Nachricht bezog sich auf eine bestimmte App von my apps in INSTALLED_APPS . Tatsächlich hatte es aber nichts mit dieser speziellen App zu tun. Ich habe eine neue virtuelle Umgebung verwendet und vergessen, einige Bibliotheken zu installieren, die ich in diesem Projekt verwendet habe. Nachdem ich die zusätzlichen Bibliotheken installiert hatte, funktionierte es.

0
black_hole_sun

Ich habe diese Fehlermeldung in PyCharm erhalten und festgestellt, dass meine Einstellungsdatei überhaupt nicht importiert wurde. Es gab keinen offensichtlichen Fehler, der mir dies mitteilte, aber als ich etwas Unsinncode in die Datei settings.py eingefügt habe, hat dies keinen Fehler verursacht.

Ich hatte settings.py in einem local_settings Ordner. Ich würde jedoch gerne ein __init__.py in den gleichen Ordner aufnehmen, damit er importiert werden kann. Das Hinzufügen eines Leerzeichens __init__.py hat das Problem für mich behoben.

0
James Bradbury

Wahrscheinlich haben Sie abhängige Importe .

In meinem Fall verwendete ich eine Serialisiererklasse als Parameter in meinem Modell, und die Serialisiererklasse verwendete dieses Modell: Serializer_class = AccountSerializer

from ..api.serializers import AccountSerializer

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

Und in der Datei "Serialisierer":

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

Ich habe diesen Fehler beim Importieren von Modellen in Tests erhalten, d. H. Angesichts dieser Django-Projektstruktur:

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

in der Datei test_models.py habe ich MyModel folgendermaßen importiert:

from models import MyModel

Das Problem wurde behoben, wenn es auf folgende Weise importiert wurde:

from myapp.models import MyModel

Hoffe das hilft!

PS: Vielleicht ist das etwas spät, aber ich habe in anderen Antworten nicht gefunden, wie ich dieses Problem in meinem Code lösen kann, und ich möchte meine Lösung mitteilen.

0
juliocesar

Ich hatte heute diesen Fehler beim Versuch, Django Tests auszuführen, weil ich in einer meiner Dateien die Kurzschreibweise from .models import * verwendet habe. Das Problem war, dass ich eine Dateistruktur wie folgt hatte:

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

und in models/__init__.py habe ich meine Modelle mit der Kurzschrift-Syntax importiert:

    from .foo import *
    from .bar import *

In meiner Anwendung importierte ich Modelle wie folgt:

    from myapp.models import Foo, Bar

Dies verursachte den Django model doesn't declare an explicit app_label beim Ausführen von ./manage.py test.

Um das Problem zu beheben, musste ich explizit aus dem vollständigen Pfad in models/__init__.py importieren:

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

Das hat den Fehler behoben.

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

0
inostia

Ich habe diesen Fehler heute bekommen und bin nach dem Googeln hier gelandet. Keine der vorhandenen Antworten scheint für meine Situation relevant zu sein. Das einzige, was ich tun musste, war, ein Modell aus meiner __init__.py-Datei in der obersten Ebene einer App zu importieren. Ich musste meine Importe mithilfe des Modells in die Funktionen verschieben.

Django scheint einen seltsamen Code zu haben, der in so vielen verschiedenen Szenarien so ausfallen kann!

0
boxed

Beim Erstellen einer API in Django rest_framework ist ein ähnlicher Fehler aufgetreten. 

RuntimeError: Die Modellklasse apps.core.models.University deklariert keine explizite> app_label und ist nicht in einer Anwendung in INSTALLED_APPS enthalten.

luke_aus's Antwort hat mir geholfen, indem ich meine urls.py korrigierte

von

from project.apps.views import SurgeryView

zu 

from apps.views import SurgeryView

Ich habe diesen Fehler erhalten, nachdem ich SECRET_KEY verschoben hatte, um eine Umgebungsvariable abzurufen, und habe vergessen, diese beim Ausführen der Anwendung festzulegen. Wenn Sie so etwas in Ihrem settings.py haben

SECRET_KEY = os.getenv('SECRET_KEY')

stellen Sie dann sicher, dass Sie die Umgebungsvariable tatsächlich festlegen.

0
ameier38