(DJ) Django modele

Django modele

Tworzenie modelu

Typ pola modelu

  • CharField(max_length=Int<Ilość znaków>) – Standardowe pole tekstowe VARCHAR, z ograniczoną ilością znaków.
  • TextField() – Standardowe pole tekstowe TEXT, nie ograniczane ilością znaków.
  • SmallIntegerField() – Standardowe pole liczbowe, przechowujące wartości z zakresu od -32768 do 32767.
  • DecimalField(max_digits=Int, decimal_places=Int<Ilość znaków po przecinku>) – Pole liczbowe przechowujące wartości reprezentowane w Pythonie przez klasę Decimal.
  • FloatField()
  • BooleanField() – Pole przechowujące wartość logiczną True lub False. BooleanField nie może mieć wartości NULL.
  • NullBooleanField() – Pole przechowujące wartość logiczną True lub False, jak i dopuszczające wartość Null.
  • DateField() – Pole przechowujące datę, mapowaną do pola DATE. Więcej informacji na temamt unikalnych wartości daty, poniżej (Pola unikalne względem daty).
  • DateTimeField() – Pole przechowujące datę i godzinę, mapowaną do pola DATETIME. Więcej informacji na temamt unikalnych wartości daty, poniżej (Pola unikalne względem daty).
  • IntegerField() – Standardowe pole liczbowe typu INTEGER.
  • GenericIPAddressField()
  • ImageField(upload_to=Str/Function<Ścieżka do katalogu przechowującego zdjęcia>)

Dodatkowe opcje pól

  • null=Boolean – Pole nie może posiadać wartości Null.
  • blank=Boolean – Pole nie może być puste.
  • unique=Boolean – Pole musi być unikalne w skali całego modelu.
  • primary_key=Boolean – Pole stanowi klucz główny danego modelu.
  • default=Str/Int/Boolean – Pole posiadać będzie wartość domyślną.

Pola specjalne

  • choices=Tuple – Przyjmuje krotkę, krotek zawierających po dwa elementy. Umożliwiają one dopasowanie wartości np. czytelnego dla człowieka opisu, do innej prostrzej wartości np. liczby. Dzieki czemu baza danch będzie przechowywała jedynie prostą liczbę, którą aplikacja będzie mogła przetworzyć na czytelną dla człowieka wartości.

Pola zawasowane

  • db_column=Str– Nazwa kolumny w bazie danych, która ma być zastosowana względem danego pola. Jeśli nie zostanie podana, Django użyje użytej nazwy pola.
  • editable=Boolean – Jeśli False, pole nie będzie wyświetlane w panelu administracyjnym ani w żadnym innym ModelForm. Będzie ono również pomijane podczas walidacji modelu. Domyślną wartością jest True.
  • validators=List – Przyjmuję listę zawierającą obiekty validacyjne. Opis wykorzystania w artykule Validators.
  • error_messages=Dict – Przyjmuje słownik zawierający wiadomości wyświetlane w przypadku zajścia określonego zdarzenia związanego z danym polem (Np. dodatkowy opis czy zła wartość). Opis wykorzystania w artykule Error messages.
  • help_text=Str – Dodatkowy tekst „pomocy”, wyświetlany w formularzu. Jest przydatny w tworzeniu dokumentacji.

Pola unikalne względem daty

  • unique_for_date=Boolean Wymusza unikalność pola DateField oraz DateTimeField.
  • unique_for_month=Boolean Wymusza unikalność pola DateField oraz DateTimeField, względem miesiąca.
  • unique_for_year=Boolean – Wymusza unikalność pola DateField oraz DateTimeField, względem roku.

Edycja modelu

Dodawanie modelu

Dodanie modelu:

# Model Import:
from .models import Device

new_device = Device.objects.create(name='RKKR-LAB', hostname='192.168.1.1' ...)

Edycja modelu

Edycja modelu:

# Model Import:
from .models import Device

device = Device.objects.get(id=1)
device.name = 'New name'
device.save()

Usuwanie modelu

Usuwanie modelu:

# Model Import:
from .models import Device

device = Device.objects.get(id=1)
device.delete()

Wyświetlanie modelu

One to One

  • all() – Zwraca wszystkie obiekty danego modelu.
  • get(nazwa-pola=wartość) – Zwraca jeden obiekt zpełniający kryterium (Np. pk=1). W przypakdu braku obiektu spełniającego dany warunek, funkcja zwróci wyjątek „MaxValueValidator”. Jeśli fukcja zwróci wiecej niż jeden obiekt zostanie wywołany wyjątek „MultipleObjectsReturned”.
  • filter(nazwa-pola=wartość) – Umożliwia filtrowanie treści zwracanych przez Np. funkcję all. Ponadto istnieje możliwość użycia dodatkowych haseł tworzonych na podstawie nazwy pola połączonego z kluczem:
    • nazwa_pola__lt = wartość – Zwraca obiekty, w których zawartość wskazanego pola jest mniejsze od podanej wartości.
    • nazwa_pola__lte = wartość – Zwraca obiekty, w których zawartość wskazanego pola jest mniejsze bąź równa podanej wartości.
    • nazwa_pola__gt = wartość – Zwraca obiekty, w których zawartość wskazanego pola jest większa od podanej wartości.
    • nazwa_pola__gte = wartość – Zwraca obiekty, w których zawartość wskazanego pola jest większa bąź równa podanej wartości.
    • nazwa_pola__contains = wartość – Zwraca obiekty, w których zawartość wskazanego pola zawiera podaną wartość.
    • nazwa_pola__in = list – Zwraca obiekty, w których zawartość wskazanego pola zawiera jedną z podanych wartości (W liście).

Relacje

On delete

  • models.PROTECT
  • models.SET_NULL
  • models.SET_DEFAULT
  • models.SET()
  • models.CASCADE

One to One

Przykładowa relacja One to One:

One to Meny

Przykładowa relacja One to Meny:

class Production(models.Model):
    title = models.CharField(max_length=64, blank=False, unique=True)
    description = models.CharField(max_length=512, default=production_description)
    premiere = models.DateField()
    rating = models.FloatField()

class Genre(models.Model):
    production = models.ForeignKey(Production, on_delete=models.CASCADE)

Meny to Meny

Przykładowa relacja Meny to Meny:

class Production(models.Model):
    title = models.CharField(max_length=64, blank=False, unique=True)
    description = models.CharField(max_length=512, default=production_description)
    premiere = models.DateField()
    rating = models.FloatField()

    productionGenre = models.ManyToManyField(Genre, through='ProductionGenre')

class Genre(models.Model):
    name = models.CharField(max_length=64, blank=False, unique=True)

class ProductionGenre(models.Model):
    genre = models.ForeignKey(Genre, on_delete=models.CASCADE)
    production = models.ForeignKey(Production, on_delete=models.CASCADE)

    # Połączenie obydwóch wartości musi być unikalne:
    class Meta:
        unique_together = [['genre', 'production']]

Pozostałe tematy związane z Django

PDFPRINT

Robert T Kucharski

Cisco Network Engineer in GPW.

Dodaj komentarz