Ich mache eine API für ein bestimmtes Modell verfügbar und möchte einige der zugehörigen Felder serialisieren. Diese verwandten Felder werden häufig wiederholt, und ich möchte keine zahlreichen Datenbankabfragen für jede verwandte Feldserialisierung durchführen müssen. Gibt es eine einfache Möglichkeit, alle zugehörigen Instanzen vorab abzufragen, und dann hat der RelatedField-Serializer es in einem Wörterbuch nachgeschlagen? Oder vielleicht aus dem ModelSerializer des verwandten Feldes angeben?Gibt es eine Möglichkeit, verwandte Feldmodelle vorab zu suchen?
7
A
Antwort
5
Sie können die Standardmethoden prefetch_related und select_related von Django für Ihr Abfrage-Set verwenden.
Verwenden Sie in der Ansicht das Attribut queryset
anstelle der Verknüpfung model
. Zum Beispiel ...
class ExampleView(generics.ListCreateAPIView):
serializer_class = ExampleSerializer
queryset = Example.objects.select_related(...)
Verwandte Themen
- 1. Gibt es eine Möglichkeit, mehrere Suchen in (g) Vim hervorzuheben?
- 2. Gibt es eine einfachere Möglichkeit, verwandte Daten mit ActiveAdmin zu erstellen/auszuwählen?
- 3. Gibt es eine API für verwandte Suchanfragen von Google?
- 4. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 5. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 6. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 7. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 8. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
- 9. Gibt es eine Möglichkeit, PreparedStatement zu aktualisieren?
- 10. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 11. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 12. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 13. Gibt es eine Möglichkeit, Unterabfragen zu vermeiden?
- 14. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 15. Gibt es eine Möglichkeit, dies zu loopen?
- 16. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 17. Gibt es eine Möglichkeit, Typdeklarationen zu erweitern?
- 18. Gibt es eine Möglichkeit, "träge" zu lesen?
- 19. Gibt es eine Möglichkeit, Duplikate zu vermeiden?
- 20. Gibt es eine Möglichkeit, Creeps zu löschen?
- 21. Gibt es eine Möglichkeit, Selektoren zu gruppieren?
- 22. Gibt es eine Möglichkeit, eine Variable für "isForEachable" zu testen?
- 23. Gibt es eine einfache Möglichkeit, Kriterien in HQL zu konvertieren?
- 24. Gibt es eine Möglichkeit, AngularJS mit HTML zu arbeiten?
- 25. Bessere Möglichkeit, zwei verwandte Listen zu mischen
- 26. Gibt es eine bessere Möglichkeit, diese Datenbank zu speichern?
- 27. Gibt es (eine automatisierte) Möglichkeit, Hudson CI-Dateien zu sichern?
- 28. Gibt es eine Möglichkeit, Tabulatoren anstelle von Leerzeichen zu erzwingen?
- 29. Gibt es eine Möglichkeit, Quartalstermine in MS SQL zu erhalten?
- 30. Gibt es eine Möglichkeit, alle JavaScript-Timer gleichzeitig zu löschen?
Danke Tom. Ich war mir nicht bewusst, prefetch_related. Obwohl es klingt, als wäre es besser, es zu benutzen, ist es immer noch nicht die effizienteste Implementierung für mein Szenario. Die Gründe sind: (1) es verwendet IN-Abfrage, die mehrere Abfragen ist, während meine Anwendung in einer Abfrage vorhersagen kann, welche Ergebnisse sie benötigt; und (2) die meisten der verwandten Felder verwenden die gleiche Modellklasse und es sieht nicht so aus, als wäre prefect_related schlau daran. Haben Sie weitere Vorschläge für eine individuellere Vorgehensweise? – jacob
Ich weiß nicht genau, wie Ihr Anwendungsfall aussieht, aber wenn Sie etwas Brauchbares brauchen, das nicht ganz in die vorgegebenen generischen Ansichten passt, würde ich vorschlagen, die Ansichtsmethoden explizit zu schreiben. –
Zum Beispiel, wie im ersten Teil des Tutorials Teil 3 ... http://django-rest-framework.org/tutorial/3-class-based-views.html –