aggregate a annotate
Podsumowywanie całych querysetów lub poszczególnych wierszy
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_booksGROUP 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ć. 🎯
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
- aggregate a annotate
- Wyrażenia F do atomowych aktualizacji
- Obiekty Q do złożonych filtrów
- Warunkowe agregowanie za pomocą Case/When