Django-Skript, um auf Modellobjekte zuzugreifen, ohne die manage.py-Shell zu verwenden
Ich Schreibe ein Skript zum importieren einiger Modell-Objekte in der Datenbank meine django-Anwendung verwendet. In der Vergangenheit habe ich dies Problem gelöst durch ausführen ./manage.py shell
und dann import myscript
. Ich bin sicher, es gibt einen besseren Weg. Ich möchte in der Lage, ein Skript aufrufen, von überall aus auf meinem HD mit python scriptname.py
, und in den ersten paar Zeilen des Skripts, es würde alles tun, was importiert /weitere Operationen notwendig, so dass es Modell für den Zugriff auf Objekte und Verhalten sich, als ob es ausgeführt wurde, mit manage.py shell
.
Was muss ich hinzufügen um mein Skript um dies zu erreichen?
EDIT:
Basierend auf @Melug Antwort, mit der Ergänzung der dynamisch Einstellung Python-Pfad um das "irgendwo auf meine HD' Teil der Frage:
import sys
sys.path.append('c:\\my_projec_src_folder')
from myproject import settings
from django.core.management import setup_environ
setup_environ(settings)
InformationsquelleAutor der Frage Trindaz | 2011-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie setup-django-Umfeld erste:
Endlich importieren Sie Ihre Modelle, alles was nur geht wie django.
InformationsquelleAutor der Antwort Melug
Seit Django 1.4 sollten Sie vermeiden, mit
setup_environ(settings)
(Beitrag von Melug), weil es veraltet ist. Verwenden Sie den folgenden statt, und Sie werden in der Lage sein, um Zugang zu Ihrem ModellHier ist ein Beispiel zum Zugriff auf und ändern Sie Ihr Modell:
Beispiel-Modell:
InformationsquelleAutor der Antwort Michael
Um Modelle geladen zu werden, musste ich kombinieren diese mit diese Antwort, sonst bekomme ich
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet
Als extra füge ich diese an die
__init__.py
meiner django-Projekte, wird es automatisch entdecken Sie den Namen der app, so ist es copy/paste-fähig:Dann kann ich nur tun:
InformationsquelleAutor der Antwort Rebs
Ich denke, der beste Weg, um erstellen Sie Ihre benutzerdefinierte management-Befehl(en). Dann können Sie anrufen
manage.py <yourcommand>
von überall.InformationsquelleAutor der Antwort DrTyrsa
Für Django-version 1.9 oder höher können Sie dieses verwenden:
deshalb kann man das Objekt als dasselbe django Objekt:
InformationsquelleAutor der Antwort Alkindus
FÜR DJANGO 1.11
Oberen Lösungen nicht funktionieren, aber gab mir eine Fehlermeldung:
django.core.Ausnahmen.AppRegistryNotReady: Apps werden nicht geladen noch.
Für mich die Lösung aus hier geklappt:
InformationsquelleAutor der Antwort Henhuy
Hier ist die Antwort für Django-Versionen > 1.4:
InformationsquelleAutor der Antwort ISP
Seit mindestens Django 1.11, Ihre Haupt-app enthält eine wsgi-Modul, das die notwendigen setup auf "importieren". Vorausgesetzt
myproject/myproject
ist, wo Ihr settings.py ist, in Ihr Skript importieren Sie einfach:InformationsquelleAutor der Antwort jdm
Wenn Sie:
Versuchen:
InformationsquelleAutor der Antwort juan Isaza
Versuchen:
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
wenn
os.environ.setdefault
funktioniert nicht. (Windows 10, Python ist3.6.4, django 2.0.3)InformationsquelleAutor der Antwort yvesva