Django Academy · Lekcja

ForeignKey i on_delete

Modelowanie relacji jeden-do-wielu i zachowania podczas usuwania

Lekcja 1 z 413 kroki

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. 🔗

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 „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

  1. ForeignKey i on_delete
  2. ManyToManyField i Through Models
  3. OneToOneField dla profili
  4. related_name i zapytania odwrotne
← Powrót do Django Academy