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 (wymaga max_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:

Odczytywanie danych

Aktualizacja danych

Usuwanie danych

Relacje w praktyce