ForeignKey i on_delete
Modelowanie relacji jeden-do-wielu i zachowania podczas usuwania
ForeignKey i on_delete 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.
Łączenie dwóch tabel
Rzeczywiste dane są ze sobą powiązane: książka ma autora, a zamówienie ma klienta. ForeignKey pozwala jednemu modelowi wskazywać inny.
Relacja jeden-do-wielu w skrócie
ForeignKey odwzorowuje relację jeden-do-wielu. Jeden autor może mieć wiele książek, ale każda książka należy dokładnie do jednego autora.
Deklarowanie ForeignKey
Należy dodać pole typu ForeignKey i wskazać w nim powiązany model. Django zapisuje to powiązanie w tle jako kolumnę z identyfikatorem.
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)Kolumna _id
W bazie danych ForeignKey autora staje się kolumną author_id zawierającą klucz główny drugiego wiersza. Ta liczba jest właściwym powiązaniem.
on_delete jest wymagane
Każdy ForeignKey wymaga ustawienia on_delete. Określa ono, co Django ma zrobić z tym wierszem, gdy zostanie usunięty wiersz, na który wskazuje.
CASCADE usuwa elementy podrzędne
CASCADE usuwa również ten wiersz, gdy zostanie usunięty jego nadrzędny element. Po usunięciu autora znikają także wszystkie jego książki.
author = models.ForeignKey(Author, on_delete=models.CASCADE)PROTECT blokuje usuwanie
Proszę użyć PROTECT, aby odrzucić próbę usunięcia, dopóki istnieją powiązane wiersze. Django zgłosi błąd zamiast usuwać element nadrzędny.
author = models.ForeignKey(Author, on_delete=models.PROTECT)SET_NULL zachowuje element podrzędny
SET_NULL zachowuje wiersz, ale usuwa powiązanie, ustawiając kolumnę na NULL. Aby działało, pole musi mieć ustawienie null=True.
author = models.ForeignKey(Author, null=True, on_delete=models.SET_NULL)SET_DEFAULT i DO_NOTHING
SET_DEFAULT wstawia wartość domyślną pola, natomiast DO_NOTHING pozostawia decyzję bazie danych. Po te opcje należy sięgać tylko w szczególnych przypadkach.
Dostęp do powiązanego obiektu
Z instancji książki można odczytać powiązanego autora bezpośrednio przez pole. Django pobierze ten wiersz na żądanie.
book = Book.objects.first()
print(book.author.name)Filtrowanie przez powiązanie
W zapytaniach można przechodzić przez relację za pomocą podwójnego podkreślenia. Pozwala ono bezpośrednio odwoływać się do pól powiązanego modelu w filtrze.
Book.objects.filter(author__name="Ada")Szybkie sprawdzenie
Usuwają Państwo autora, ale chcą zachować jego książki bez powiązania. Która wartość on_delete będzie odpowiednia?
Podsumowanie
Dobra robota! ForeignKey odwzorowuje relacje jeden-do-wielu, a on_delete decyduje o losie każdego wiersza po usunięciu jego elementu nadrzędnego. 🔗
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 „ForeignKey i on_delete” jest bezpłatna?
Tak — pełny tekst „ForeignKey i on_delete” 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 „ForeignKey i on_delete”?
Modelowanie relacji jeden-do-wielu i zachowania podczas usuwania Ć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 „ForeignKey i on_delete”?
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
- ForeignKey i on_delete
- ManyToManyField i Through Models
- OneToOneField dla profili
- related_name i zapytania odwrotne