ich bin gerade dabei mich in ein Django-Projekt einzuarbeiten, welches von einem Kollegen gebaut wurde.
Hier sind Datenbank-modelle definiert welche sowohl in einer webapp (Rest-api) verwendet werden. diese möchte ich nun in Standalone-scripten verwenden.
also habe ich mir ein script geschrieben, welches diese importiert und nutzt (stark gekürzt, daher keine Ausgabe o.ä. Zeilennummern kmmen durch auskommentierten code, welchen ich hier rausgeworfen habe):
jobevaluation.py:
Code: Alles auswählen
from api.models import Job #in api/models.py definiert
jobs=Job.objects.filter(jobtype__jobtype="checktrails",state__state="EXECUTIONREQUESTED")
scr.sh:
Code: Alles auswählen
#!/bin/bash
source $HOME/django/env3.8/bin/activate
export PYTHONPATH=$HOME/django/env3.8/lib/python3.8/site-packages/
if [[ -e "$1" ]];then
python3 manage.py shell < $1
fi
Nun möchte ich den wenigen Code einfach nur in eine Funktion packen:
Code: Alles auswählen
def CheckOpenJobs():
jobs=Job.objects.filter(jobtype__jobtype="checktrails",state__state="EXECUTIONREQUESTED"
CheckOpenJobs()
Code: Alles auswählen
$ ./scr.sh jobevaluation.py
Traceback (most recent call last):
File "manage.py", line 60, in <module>
execute_from_command_line(sys.argv)
File "/home/A749523/django/env3.8/lib/python3.8/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "/home/A749523/django/env3.8/lib/python3.8/site-packages/django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/A749523/django/env3.8/lib/python3.8/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/A749523/django/env3.8/lib/python3.8/site-packages/django/core/management/base.py", line 335, in execute
output = self.handle(*args, **options)
File "/home/A749523/django/env3.8/lib/python3.8/site-packages/django/core/management/commands/shell.py", line 92, in handle
exec(sys.stdin.read())
File "<string>", line 30, in <module>
File "<string>", line 21, in CheckOpenJobs
NameError: name 'Job' is not defined
importiere ich nun dieses script in eine jobtest.py (funktionsaufruf in die jobtest verschoben) und starte das, funktioniert es wieder
Code: Alles auswählen
from jobevaluation import *
CheckOpenJobs()
kann mir das jemand erklären?
Alle Dateien (jobevaluation.py,jobtest.py und scr.sh) liegen im Hauptverzeichnis des Django-Projekts
Gruß Frank