Django erstellt automatisch ein ID-Feld als Primärschlüssel.
Jetzt muss ich das Objekt anhand dieser ID abrufen.
object = Class.objects.filter()
Wie schreibe ich diesen Filter?
Django erstellt automatisch ein ID-Feld als Primärschlüssel.
Jetzt muss ich das Objekt anhand dieser ID abrufen.
object = Class.objects.filter()
Wie schreibe ich diesen Filter?
Antworten:
Wenn Sie ein Objekt erhalten möchten, ist die Verwendung get()
einfacher:
obj = Class.objects.get(pk=this_object_id)
id
in einer integrierten Funktion, die die Identität eines Objekts zurückgibt. In den meisten Fällen wird das Referenzieren von Dingen id
das Richtige tun, z Class.objects.get(id=this_object_id)
. B. Arbeit. Aber das ist wohl etwas zu beachten.
Ich bin aus demselben Grund hierher gekommen, aber aus einem anderen Grund:
Class.objects.get(id=1)
Dieser Code löste eine ImportError-Ausnahme aus. Was mich verwirrte, war, dass der folgende Code einwandfrei ausgeführt wurde und wie erwartet eine Ergebnismenge zurückgab:
Class.objects.all()
Ende des Tracebacks für die get()
Methode:
File "django/db/models/loading.py", line 197, in get_models
self._populate()
File "django/db/models/loading.py", line 72, in _populate
self.load_app(app_name, True)
File "django/db/models/loading.py", line 94, in load_app
app_module = import_module(app_name)
File "django/utils/importlib.py", line 35, in import_module
__import__(name)
ImportError: No module named myapp
Als loading.py
ich den Code in Djangos las , kam ich zu dem Schluss, dass ich settings.py
einen schlechten Weg zu meiner App hatte, die meine Class
Modelldefinition enthält . Alles was ich tun musste, war den Pfad zur App zu korrigieren und die get()
Methode einwandfrei auszuführen.
Hier ist mein settings.py
mit dem korrigierten Pfad:
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
# ...
'mywebproject.myapp',
)
Die ganze Verwirrung wurde verursacht, weil ich Djangos ORM als Standalone verwende, also musste der Namespace dies widerspiegeln.
Sie können verwenden:
objects_all=Class.objects.filter(filter_condition="")
Dies gibt einen Abfragesatz zurück, selbst wenn er ein Objekt erhält. Wenn Sie genau ein Objekt benötigen, verwenden Sie:
obj=Class.objects.get(conditon="")
Sie können auch die Django-Verknüpfung get_object_or_404 verwenden. Es wird ein 404-Fehler ausgelöst, wenn das Objekt nicht gefunden wird.
pk
ist die bevorzugte Methode, um für jedes Modell auf den Primärschlüssel zu verweisen. Dasid
Feld wird nur generiert, wenn der Modellautor keinen Primärschlüssel speziell angibt. Wenn der Autor hat ein Primärschlüsselfeld angeben, der nicht namentlich genannt wirdid
, dann wird es nicht seinid
Feld.