[PYTHON] [Django ORM] Unterschied zwischen Werten () und nur ()

Die Geschichte, die im Fehler von values () in Django ORM stecken geblieben ist

Django ORM hat ähnliche Methoden, " .objects.values ()" und " .objects.only ()", "values ()" und "only ()", aber ein wenig Ich war süchtig danach, also als Memorandum.

Der Grund dafür ist, dass ich beim Schreiben eines Codes wie ↓ den folgenden Fehler erhalten habe.

president1 = Company.objects.values(*fields)[0].president
# =>Error: AttributeError: 'dict' object has no attribute 'president'

Hier aus dem Modell Company unter Verwendung der values () Methode von Django ORM, Ich versuche, den Wert des Feldes "Präsident" des ersten Elements eines Abfragesatzes (wie einer Python-Liste mit einem iterierbaren Datentyp, der mehrere Objekte enthält) zu ermitteln, indem nur ein bestimmtes Feld extrahiert wird ..

Zur Laufzeit bekam ich jedoch den Fehler `AttributeError: 'dict' Objekt hat kein Attribut 'President'.

Selbst nachdem ich die Modelldefinition überprüft hatte, stellte ich fest, dass das Feld "Präsident" existiert, aber das ist seltsam. Unterschied zwischen values () und only () war hilfreich.

Ausführung

values () gibt ValuesQuerySet anstelle von QuerySet zurück

Gemäß dem Referenzartikel gibt die Methode "values ()" ein Objekt vom Datentyp "ValuesQuerySet" zurück. Basierend auf QuerySet gibt es ** so etwas wie ein Array von Elementen zurück, die aus Objektfeldern in ein Wörterbuch (= ValuesQuerySet) ** konvertiert wurden.

Mit anderen Worten, im obigen Code habe ich versucht, Felddaten aus dem Wörterbuch "{" Präsident ":" xxx ", ...}" mit ".president" abzurufen, sodass eine Fehlermeldung angezeigt wurde.

Da es sich um ein Wörterbuch handelt, bedeutet die Verwendung von "[" Präsident "]", dass kein Fehler aufgetreten ist. Wenn Sie die Fehlermeldung lesen, heißt es "Objekt diktieren". ..

Die Verwendung von only () gibt QuerySet zurück

Wenn Sie also wie in diesem Fall "Query Set" möchten, können Sie "only ()" [^ 1] verwenden. Dieses Mal ist das Element kein Wörterbuch, aber eine Instanz der Klasse wird ordnungsgemäß zurückgegeben, sodass kein Fehler auftritt.

Übrigens ist "QuerySet" iterierbar, aber seien Sie vorsichtig, da sich der Datentyp von "list" unterscheidet (weil er ähnlich ist, werde ich manchmal süchtig).

Wenn ein Abfragesatz in eine Liste konvertiert wird, kann er mit ** list (QuerySet object) ** konvertiert werden.

[^ 1]: Es können nur angegebene Felder extrahiert werden. Wird zur Leistungsoptimierung verwendet. Umgekehrt können Sie defer () verwenden, um das angegebene Feld auszuschließen.

Recommended Posts

[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen Regression und Klassifikation
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen == und ist in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Unterschied zwischen SQLAlchemy flush () und commit ()
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
[Xg Boost] Unterschied zwischen Softmax und Softprob
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
[Python] Unterschied zwischen Klassenmethode und statischer Methode
Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche
Unterschied zwischen numpy.ndarray und list (Dimension, Größe)
Unterschied zwischen ls -l und cat Befehl
Differenz- und Kompatibilitätsprüfung zwischen Keras und tf.keras # 1
Unterschied zwischen Verwendung und Import in der Schildsprache
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
Unterschied zwischen Numpy (n,) und (n, 1) Notation [Unterschied zwischen horizontalem Vektor und vertikalem Vektor]
Unterschied zwischen return, return None und no return description in Python
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Mittendifferenz und Vorwärtsdifferenz
Zwischen parametrisch und nicht parametrisch
Was ist der Unterschied zwischen symbolischen und harten Links?
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Unterschied zwischen SQL Alchemy back_populated und backref und wenn keiner verwendet wird
Unterschied zwischen Vordergrundprozess und Hintergrundprozess, prinzipiell verstanden
Beziehung zwischen gebunden / ungebunden und Anfangswert von Django2 Form
Zusammenfassung der Unterschiede zwischen Ruby on Rails und Django ~ Basics ~