[ Pobierz całość w formacie PDF ]
przychodzi z czasem i nabytym doświadczeniem.
Wewnętrzna klasa Meta
Pola i relacje, które definiujesz w modelach, są używane przy tworzeniu bazy danych. Mają
one wpływ na nazwy zmiennych, których używasz przy pózniejszym odpytywaniu modelu.
Często będziesz też dodawać w modelu takie metody, jak __unicode__, get_absolute_url,
lub zmieniać wbudowane metody save albo delete. Na końcowy kształt modelu ma również
wpływ wewnętrzna klasa, która uwzględnia w Django rozmaite metadane związane
z modelem. Jest to klasa Meta.
Klasa Meta, jak sama nazwa wskazuje, zajmuje się obsługą metadanych związanych
z modelem zarówno dotyczących użycia, jak i wyświetlania, np. jak powinna być
wyświetlana jego nazwa w odniesieniu do pojedynczego obiektu, a jak w przypadku wielu
obiektów, jaki powinien być domyślny porządek sortowania, jaka jest nazwa tabeli itd.
Klasa Meta jest miejscem, w którym określamy także unikalność wielopolową, ponieważ
nie miałoby sensu definiowanie takiej własności w deklaracji zwykłego pola. Dodajmy
proste metadane do naszego pierwszego przykładu opartego na klasie Book.
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
class Meta:
# Porządek alfabetyczny
ordering = ['title']
Klasa Book jest na tyle prosta, że nie musimy korzystać z większości opcji klasy Meta.
Gdyby nie zależało nam na porządku sortowania, moglibyśmy całkowicie pominąć deklarację
klasy. Klasy Admin i Meta są całkowicie opcjonalną częścią deklaracji modelu, jednak nie
oznacza to, że są rzadko wykorzystywane. Zapoznajmy się z nieco bardziej skomplikowanym
przykładem, ponieważ metadane klasy Book są dość nudne.
128 Rozdział 4. Tworzenie i używanie modeli
class Person(models.Model):
first = models.CharField(max_length=100)
last = models.CharField(max_length=100)
middle = models.CharField(max_length=100, blank=True)
class Meta:
# Jest to odpowiednia metoda porządkowania, jeśli założymy, że osoby będą wyświetlane
# w kolejności nazwisko (last), pierwsze imię (first), drugie imię (middle)
ordering = ['last', 'first', 'middle']
# W tym miejscu zakładamy, że nie istnieją dwie osoby o takich samych imionach i nazwiskach
# Oczywiście w świecie rzeczywistym jest to możliwe, niemniej zakładamy, że jest to
# świat idealny.
unique_together = ['first', 'last', 'middle']
# Według domyślnych ustawień Django dodaje literę 's', aby wyrazić liczbę mnogą. W tym przypadku
# jest to złe rozwiązanie
verbose_name_plural = "people"
Utworzenie modelu osoby bez wykorzystania klasy Meta byłoby niezwykle trudnym
zadaniem. Przy sortowaniu musimy uwzględnić wszystkie trzy pola; co więcej, musimy
uniknąć powstania duplikatów. Odwoływanie się do grupy osób jako persons z pewnością
nie jest poprawnym rozwiązaniem.
Więcej szczegółów na temat różnorodnych opcji klasy Meta, które możesz wykorzystywać,
znajdziesz w oficjalnej dokumentacji Django.
Rejestracja i opcje w panelu administratora
Jeśli korzystasz z aplikacji administratora, dostarczonej razem z Django, z pewnością aktywnie
wykorzystujesz obiekty site (a dokładnie ich funkcję register), podobnie jak klasy
pochodne klasy ModelAdmin. Klasy te pozwalają na zdefiniowanie sposobu używania modeli
w ramach panelu administracyjnego.
Zarejestrowanie klasy modelu w aplikacji administratora (oczywiście po uprzednim
włączeniu aplikacji, czynności opisanej w rozdziale 2.) pozwala na obsługę modelu od strony
administratora w najprostszy sposób (z wykorzystaniem podstawowych formularzy).
Jeśli jednak chcesz uwzględnić dodatkowe opcje, pozwalające na wybór wartości z listy,
dopasowanie wyglądu formularzy itd., musisz skorzystać z klas pochodnych klasy ModelAdmin.
Możesz także zdefiniować wewnętrzne opcje edycji dla pól relacyjnych, takich jak klucz
obcy, tworząc podklasy klasy Inline i odwołując się do nich w podklasach klasy ModelAdmin.
To rozprzestrzenianie się dodatkowych klas na pierwszy rzut oka wygląda jak przerost formy
nad treścią. Jednak dzięki takiemu elastycznemu rozwiązaniu każdy model może być
reprezentowany na różne sposoby w różnych aplikacjach administratora. Rozszerzenie
struktury i hierarchii modeli o opcję wewnętrznej edycji pozwala także na utworzenie
wewnętrznego formularza w więcej niż jednej stronie modelu rodzica .
Dokładne opisy każdej opcji są umieszczone w oficjalnej dokumentacji zauważ,
że niektóre przykłady działania aplikacji administratora znajdziesz w części III dlatego
poniżej zamieszczamy podstawowe informacje na temat dwóch głównych typów opcji
klasy ModelAdmin.
Wykorzystywanie modeli 129
Formatowanie list: list_display, list_display_links, list_filter itp. Opcje
te pozwalają na zmianę pól widocznych w widokach list (domyślnie będących
reprezentacją egzemplarzy modeli w postaci łańcucha znaków w pojedynczej
kolumnie) podobnie jak włączenie pól wyszukiwania i filtrów, dzięki czemu możesz
łatwo korzystać ze zbiorów informacji.
Wyświetlanie formularzy: fields, js, save_on_top itp. Dostarczają one elastycznych
mechanizmów, umożliwiających zmianę domyślnego wyglądu formularzy Twojego
modelu, podobnie jak dodawanie kodu JavaScript i klas CSS. Mechanizmy
są przydatne, jeśli chcesz dopasować wygląd i zachowanie panelu administracyjnego
do reszty Twojej strony internetowej.
Jeśli w swojej pracy będziesz wykorzystywał bardzo aktywnie powyższe mechanizmy
(do zmiany wyglądu i działania aplikacji administratora), warto rozważyć utworzenie
własnego panelu administracyjnego, zamiast modyfikować domyślny, dostępny w Django.
Zanim podejmiesz taką decyzję, zapoznaj się z rozdziałem 11., aby dowiedzieć się, jak bardzo
możesz dostosować aplikację administratora do własnych potrzeb.
Wykorzystywanie modeli
Poznaliśmy już podstawy i nieco bardziej zaawansowane aspekty tworzenia modeli, więc
możemy zająć się utworzeniem i wykorzystaniem bazy danych opartej na tychże modelach.
[ Pobierz całość w formacie PDF ]