Django Academy · Lekcja

aggregate a annotate

Podsumowywanie całych querysetów lub poszczególnych wierszy

Lekcja 1 z 413 kroki

aggregate a annotate to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Django Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Django Academy zawiera 4 lekcji w sumie.

Dwa sposoby tworzenia podsumowań

ORM udostępnia dwa narzędzia do tworzenia podsumowań: aggregate sprowadza cały queryset do jednego wyniku, natomiast annotate dodaje wartość do każdego wiersza.

Co zwraca aggregate

Wywołanie aggregate kończy zapytanie i zwraca zwykły słownik Pythona, a nie queryset, więc nie można już później filtrować wyników.

from django.db.models import Avg
Book.objects.aggregate(Avg("price"))
# {"price__avg": 24.5}

Nazywanie wyniku

Przekaż argument nazwany do aggregate, aby samodzielnie określić nazwę klucza wyniku. Jest to znacznie czytelniejsze niż automatycznie wygenerowana etykieta price__avg.

Book.objects.aggregate(avg_price=Avg("price"))
# {"avg_price": 24.5}

Typowe funkcje agregujące

Otrzymują Państwo standardowy zestaw narzędzi SQL: Count, Sum, Avg, Min i Max. Każda z tych funkcji sprowadza cały queryset do jednej liczby.

from django.db.models import Count, Sum
Book.objects.aggregate(total=Count("id"), revenue=Sum("price"))

Co zwraca annotate

Dla porównania annotate zwraca queryset, w którym każdy obiekt ma nowy, obliczony atrybut, dzięki czemu można nadal filtrować i sortować wyniki.

Zliczanie dla poszczególnych wierszy

Użyj annotate wraz z licznikiem powiązanych obiektów, aby odpowiadać na pytania dotyczące poszczególnych obiektów, na przykład ilu książek jest autorem każdy autor.

Author.objects.annotate(num_books=Count("book"))
# each author now has .num_books

GROUP BY wykonywane automatycznie

Gdy używasz annotate w relacji, Django automatycznie dodaje klauzulę GROUP BY, grupując wyniki według modelu, od którego rozpoczęto zapytanie.

Filtrowanie po adnotacji

Ponieważ annotate zachowuje queryset, można filtrować po nowej wartości, na przykład znaleźć autorów, którzy napisali więcej niż pięć książek.

Author.objects.annotate(n=Count("book")).filter(n__gt=5)

Sortowanie po adnotacji

Można również użyć order_by dla obliczonej wartości, dzięki czemu utworzenie rankingu najbardziej aktywnych autorów wymaga jednego wiersza zapytania.

Author.objects.annotate(n=Count("book")).order_by("-n")

Filtrowanie przed dodaniem adnotacji

Kolejność ma znaczenie: filter przed annotate zawęża zbiór wierszy, które zostaną policzone, natomiast filtr umieszczony za nim sprawdza obliczony wynik.

Wybór właściwego narzędzia

Proszę zadać sobie jedno pytanie: czy potrzebują Państwo jednego podsumowania dla całego zbioru, czy jednej wartości dla każdego obiektu? Od tego zależy wybór między aggregate a annotate.

Szybkie sprawdzenie

Chcą Państwo zachować liczbę książek każdego autora w queryset, który nadal można sortować. Które wywołanie będzie właściwe?

Podsumowanie

Proszę zapamiętać różnicę: aggregate zwraca jeden słownik z podsumowaniem i kończy zapytanie, natomiast annotate dodaje wartość do każdego wiersza i zachowuje queryset, który można filtrować i sortować. 🎯

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „aggregate a annotate” jest bezpłatna?

Tak — pełny tekst „aggregate a annotate” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Django Academy, przejdź na CoddyKit PRO. Kurs Django Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „aggregate a annotate”?

Podsumowywanie całych querysetów lub poszczególnych wierszy Ćwiczysz Django Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Django Academy?

Nie wymagamy żadnego doświadczenia. Django Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „aggregate a annotate”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Django Academy?

Tak. Każda lekcja Django Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. aggregate a annotate
  2. Wyrażenia F do atomowych aktualizacji
  3. Obiekty Q do złożonych filtrów
  4. Warunkowe agregowanie za pomocą Case/When
← Powrót do Django Academy