Ich habe große Probleme, eine Django-App auf einem Ubuntu-Computer zu installieren, auf dem Django 1.10.6 ausgeführt wird.
Ich bin daran gewöhnt, eine ältere Version von Django zu verwenden, und jetzt kann ich meine Webapp nicht installieren. Hier ist die Situation:
Ich habe ein Django-Projekt namens myproject. Die Dateistruktur ist:
(BASEDIR)/manage.py
(BASEDIR)/mycommon/ # I will discuss mycommon below
(BASEDIR)/myproject/
(BASEDIR)/myproject/settings.py
(BASEDIR)/myproject/urls.py
(BASEDIR)/myproject/views.py
(BASEDIR)/myproject/wsgi.py
(BASEDIR)/myproject/models/
(BASEDIR)/myproject/models/__init__.py
(BASEDIR)/myproject/models/models.py
Es stellt sich heraus, dass ich für dieses Projekt meine Modelle in ein gemeinsames Paket packen muss, da es eine andere Python-Anwendung gibt (die Twisted verwendet, die Django bootet), die auf diese Modelle zugreifen muss. Ich werde dieses Paket "mycommon" nennen. Also meine "echten" Modelle sind hier:
(BASEDIR)/mycommon/
(BASEDIR)/mycommon/utils.py
(BASEDIR)/mycommon/models/
(BASEDIR)/mycommon/models/__init__.py
(BASEDIR)/mycommon/models/models.py
Die Django-Einstellungsdatei befindet sich also in (BASEDIR)/myproject/settings.py und der Parameter INSTALLED_APPS ist so eingestellt:
INSTALLED_APPS = (
'myproject.models',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
)
Beachten Sie schließlich, dass myproject/models/models.py sehr einfach ist, da es nur die mycommon-Modelle verwendet:
from django.db import models
from mycommon.models.models import *
Soweit so gut, dies ist eine Struktur, die bei älteren Django-Versionen gut funktioniert. Wie auch immer, ich beginne mit einer leeren MYSQL-Datenbank (erstellt, aber leer) und gehe jetzt zurück zu (BASEDIR) und führe dies aus:
python manage.py makemigrations mycommon.models
Leider bekomme ich eine Fehlermeldung wie diese:
RuntimeError: Model class mycommon.models.models.SomeModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
Also was mache ich falsch?
In INSTALLED_APPS
sollte man nur haben 'myproject'
, ohne '.models'
.
Da Sie jedoch Django 1.10 verwenden, wird es sauberer, wenn Sie Ihre mycommon
App über manage.py startapp mycommon
. Dadurch werden einige Dateien erstellt, aber Sie sollten Ihre Modelle in mycommon/models.py
. Beachten Sie die mycommon/apps.py
. Sie müssen diese Datei nicht berühren, sondern nur in die INSTALLED_APPS
Liste aufnehmen: 'mycommon.apps.MycommonConfig'
. Auf diese Weise erkennt das Migrations-Framework Ihre Modelle automatisch.
Entfernen Sie abschließend myproject/models
, da myproject
die Projektkonfiguration enthalten ist.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen