OneToOneField dla profili
Rozszerzanie modelu o powiązany rekord
OneToOneField dla profili to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 3 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.
Dokładnie jeden element po każdej stronie
Czasami jeden wiersz jest powiązany dokładnie z jednym innym wierszem i działa to w obu kierunkach. To relacja jeden-do-jednego, idealna do przejrzystego rozdzielania danych.
Wzorzec profilu
Klasycznym zastosowaniem jest profil użytkownika: każdy użytkownik ma jeden profil, a każdy profil należy do jednego użytkownika. Dodatkowe pola są przechowywane osobno.
Deklarowanie OneToOneField
Należy dodać OneToOneField wskazujące drugi model. Działa ono jak ForeignKey z wbudowanym gwarantowaniem unikalności.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)Unikalność w tle
OneToOneField jest w rzeczywistości ForeignKey oznaczonym jako unique. To ograniczenie uniemożliwia współdzielenie jednego użytkownika przez dwa profile.
on_delete nadal obowiązuje
Podobnie jak każde powiązanie, wymaga ono on_delete. Przy CASCADE usunięcie użytkownika usuwa również jego profil w jednym kroku.
user = models.OneToOneField(User, on_delete=models.CASCADE)Dlaczego nie dodać po prostu pól?
Można dodać pola do pierwotnego modelu, ale osobny profil zachowuje porządek i pozwala uniknąć modyfikowania tabel, których Państwo nie posiadają.
Dostęp w przód
Z profilu można odczytać powiązanego użytkownika bezpośrednio przez pole. Zwraca ono pojedynczy powiązany obiekt.
profile = Profile.objects.first()
print(profile.user.username)Dostęp wsteczny
Strona odwrotna działa szczególnie: z użytkownika można dotrzeć do profilu za pomocą nazwy modelu zapisanej małymi literami, bez przyrostka _set.
user = User.objects.first()
print(user.profile.bio)Tworzenie profilu
Profil tworzy się, przekazując użytkownika, z którym ma być powiązany. Ograniczenie unikalności blokuje utworzenie drugiego profilu dla tego samego użytkownika.
Profile.objects.create(user=user, bio="Hello!")Automatyczne tworzenie za pomocą sygnałów
Popularnym rozwiązaniem jest sygnał post_save, który tworzy profil natychmiast po utworzeniu użytkownika, dzięki czemu para zawsze istnieje.
Zapytania przez parę
Przez powiązanie można filtrować za pomocą podwójnego podkreślenia, docierając do pól profilu od strony użytkownika lub odwrotnie.
User.objects.filter(profile__bio__icontains="django")Szybkie sprawdzenie
Każdy użytkownik może mieć najwyżej jeden profil, a każdy profil jednego użytkownika. Które pole odwzorowuje tę relację?
Podsumowanie
Świetna robota! OneToOneField łączy dwa wiersze w unikalną parę, a do strony odwrotnej przechodzi się za pomocą nazwy modelu zapisanej małymi literami. 👤
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 „OneToOneField dla profili” jest bezpłatna?
Tak — pełny tekst „OneToOneField dla profili” 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 „OneToOneField dla profili”?
Rozszerzanie modelu o powiązany rekord Ć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 3 z 4.
Ile czasu zajmuje lekcja „OneToOneField dla profili”?
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