2013-03-08 14 views
5

In der realen Welt, wie oft verwenden Menschen QuerySet-Methoden wie defer() und only()? Ich glaube, ich habe wirklich viel über sie gehört und erst kürzlich bin ich auf diese Methoden gestoßen.Django Queryset only() und defer()

Siehe Dokumente hier. https://docs.djangoproject.com/en/dev/ref/models/querysets/

+0

Dies ist mein erstes Mal, das zu hören und danke für die Info. – catherine

+0

Es ist oft nützlich beim Schreiben von Datenmigrationen (mit 'migrations.RunPython'), diese sind ziemlich praktisch und können eine Menge Hin-und-Her vermeiden, wenn Migrationen für eine große DB-Tabelle in der Produktion ausgeführt werden. – elias

Antwort

10

Diese Methoden werden hauptsächlich verwendet, um die Leistung Ihrer Anwendung zu optimieren.

Im Allgemeinen, wenn Sie keine Leistungsprobleme haben, müssen Sie nicht optimieren. Und wenn Sie nicht optimieren müssen, brauchen Sie diese Funktionen nicht. Dies ist ein Fall mit vielen fortgeschrittenen QuerySet Features, wie select_related oder prefetch_related.

Wie "wie oft sie in der realen Welt verwendet werden", das ist nicht wirklich eine beantwortbare Frage. Sie werden verwendet, wenn sie benötigt werden. Wenn Sie sie nicht brauchen, benutzen Sie sie nicht.

1

defer() und only() sind etwas entgegengesetzt voneinander. Beide erhalten eine Liste von field_names. defer() wird nicht abfragen, Liste der Spalten, als Argument übergeben. Im Gegensatz dazu wird only() nur Liste von Spalten abfragen, die als Argument übergeben werden. Beide

werden in einem Szenario verwendet, wo

  • Sie entweder Optimierung möchten, die Vermeidung unnötiger Spalte holen

  • Sie implementieren Ansichten in Ihrer Python-Code. ZB.Admin muss gezeigt X-Nr. von Cols, User müssen angezeigt werden Y nein. von Cols, Besucher müssen z keine Spalten angezeigt werden.