Modele i baza danych w Django
System baz danych w Django opiera się na ORM (Object-Relational Mapping) – mechanizmie, który pozwala programiście pracować z bazą danych w postaci obiektów Pythona zamiast bezpośredniego pisania zapytań SQL.
1. Tworzenie modeli (models.py)
Każda aplikacja w Django ma plik models.py, w którym definiuje się klasy reprezentujące tabele w bazie danych.
Przykład prostego modelu:
- Każda klasa dziedziczy po
models.Model. - Atrybuty klasy to pola modelu (odpowiadają kolumnom w tabeli).
- Metoda
__str__definiuje czytelny opis obiektu (widoczny np. w panelu admina).
2. Migracje (makemigrations, migrate)
Django zarządza zmianami w bazie danych przez system migracji.
- Utworzenie pliku migracji:
To polecenie analizuje modele i tworzy plik migracji (np. 0001_initial.py) w folderze migrations/.
- Zastosowanie migracji w bazie danych:
Tworzy fizyczne tabele w bazie.
- Podgląd SQL wygenerowanego przez Django:
- Sprawdzenie stanu migracji:
3. Podstawowe typy pól modelu
Django oferuje wiele typów pól odpowiadających różnym danym:
Tekstowe:
CharField(max_length=...)– krótki tekst (wymagamax_length).TextField()– długi tekst.
Liczbowe:
IntegerField()– liczby całkowite.FloatField()– liczby zmiennoprzecinkowe.DecimalField(max_digits=, decimal_places=)– liczby dziesiętne z precyzją.
Logiczne i daty:
BooleanField()– wartość True/False.DateTimeField(auto_now_add=True, auto_now=True)– data i czas.
Inne:
EmailField()– adres e-mail.URLField()– adres URL.FileField(),ImageField()– pliki i obrazy.
4. Relacje: OneToOne, ForeignKey, ManyToMany
Relacje pozwalają łączyć dane pomiędzy tabelami.
1. OneToOne – relacja 1:1
Każdy rekord w jednej tabeli ma dokładnie jeden odpowiadający w drugiej.
2. ForeignKey – relacja wiele do jednego (N:1)
Wiele rekordów może wskazywać na jeden obiekt.
on_delete=models.CASCADE– usuwa komentarze, jeśli usunięty zostanie powiązany post.
3. ManyToMany – relacja wiele do wielu
Oba modele mogą mieć wiele powiązań między sobą. Django automatycznie tworzy tabelę pośrednią.
5. Praca z bazą danych w Django ORM
ORM pozwala manipulować danymi bez pisania SQL.
Tworzenie obiektów
lub krócej: