====== Typy pól w modelach Django ====== ===== AutoField ===== ''AutoField'' w modelach Django jest używane do przechowywania liczb całkowitych, które są automatycznie inkrementowane. To pole jest zazwyczaj używane jako klucz główny modelu, a jego wartości są generowane automatycznie podczas dodawania nowego rekordu do bazy danych.\\ \\ Przykłady zastosowań ''AutoField'': ==== Unikalne Identyfikatory dla Obiektów w Aplikacji ==== ''AutoField'' może być używane do przechowywania unikalnych identyfikatorów dla obiektów w aplikacji. from django.db import models class MyModel(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=255) # inne pola modelu ==== Numerowanie Zamówień w Sklepie Internetowym ==== ''AutoField'' może być stosowane do numerowania zamówień w sklepie internetowym, gdzie każde nowe zamówienie otrzymuje automatycznie kolejny numer. from django.db import models class Order(models.Model): order_number = models.AutoField(primary_key=True) total_amount = models.DecimalField(max_digits=10, decimal_places=2) # inne pola modelu ==== Identyfikatory Użytkowników w Systemie ==== ''AutoField'' może być używane do przechowywania identyfikatorów użytkowników w systemie. from django.db import models class UserProfile(models.Model): user_id = models.AutoField(primary_key=True) username = models.CharField(max_length=255) # inne pola modelu ==== Numerowanie Kategorii w Aplikacji Bloga ==== ''AutoField'' może być stosowane do numerowania kategorii w systemie bloga. from django.db import models class BlogCategory(models.Model): category_id = models.AutoField(primary_key=True) name = models.CharField(max_length=255) # inne pola modelu ''AutoField'' automatycznie inkrementuje wartości przy dodawaniu nowych rekordów do bazy danych. Wartości te są zazwyczaj generowane na poziomie bazy danych, co oznacza, że nie musisz ręcznie przypisywać wartości dla tego pola podczas tworzenia nowego rekordu. W przypadku wielu baz danych jest to implementowane jako autoinkrementacja, ale szczegóły mogą się różnić w zależności od używanej bazy danych. ===== BigAutoField ===== ''BigAutoField'' w modelach Django jest używane do przechowywania liczb całkowitych, które są automatycznie inkrementowane, podobnie jak w przypadku ''AutoField''. Różnica polega na tym, że ''BigAutoField'' jest przystosowane do obsługi większych zakresów wartości, co jest szczególnie przydatne w przypadku baz danych, które oferują większe typy danych całkowitych.\\ \\ Przykłady zastosowań ''BigAutoField'':\\ ==== Unikalne Identyfikatory dla Dużych Obiektów w Aplikacji ==== ''BigAutoField'' może być używane do przechowywania unikalnych identyfikatorów dla dużych obiektów w aplikacji. from django.db import models class LargeObject(models.Model): id = models.BigAutoField(primary_key=True) name = models.CharField(max_length=255) # inne pola modelu ==== Numerowanie Dużych Zamówień w Sklepie Internetowym ==== ''BigAutoField'' może być stosowane do numerowania dużych zamówień w sklepie internetowym, gdzie zakłada się większe zakresy numeracji. from django.db import models class LargeOrder(models.Model): order_number = models.BigAutoField(primary_key=True) total_amount = models.DecimalField(max_digits=10, decimal_places=2) # inne pola modelu ==== Identyfikatory Dużych Użytkowników w Systemie ==== ''BigAutoField'' może być używane do przechowywania identyfikatorów użytkowników w systemie, zwłaszcza gdy przewiduje się dużą ilość użytkowników. from django.db import models class LargeUserProfile(models.Model): user_id = models.BigAutoField(primary_key=True) username = models.CharField(max_length=255) # inne pola modelu ''BigAutoField'' jest szczególnie przydatne, gdy oczekuje się, że ilość rekordów w danej tabeli może osiągnąć bardzo dużą wartość, przekraczającą zakresy standardowych całkowitych typów danych. Wartości te są zazwyczaj generowane automatycznie przy dodawaniu nowych rekordów, a typ ''BigAutoField'' jest dostosowany do obsługi większych wartości niż standardowy ''AutoField''. ===== BigIntegerField ===== ''BigIntegerField'' w modelach Django jest używane do przechowywania liczb całkowitych o dużych zakresach. Jest to szczególnie przydatne, gdy standardowe typy całkowite (takie jak ''IntegerField'' czy ''SmallIntegerField'') nie wystarczają, a jednocześnie nie potrzebujesz automatycznej inkrementacji, jak w przypadku pól ''AutoField'' lub ''BigAutoField''.\\ \\ Przykłady zastosowań ''BigIntegerField'': ==== Przechowywanie Liczby Punktów Doświadczenia w Grze ==== ''BigIntegerField'' może być używane do przechowywania liczby punktów doświadczenia postaci w grze, zwłaszcza gdy ta liczba może osiągnąć bardzo duże wartości. from django.db import models class Player(models.Model): name = models.CharField(max_length=255) experience_points = models.BigIntegerField() ==== Liczba Ocen w Systemie Edukacyjnym ==== ''BigIntegerField'' może być stosowane do przechowywania liczby ocen w systemie edukacyjnym, gdzie duża ilość uczniów może generować dużą ilość danych. from django.db import models class Course(models.Model): name = models.CharField(max_length=255) number_of_grades = models.BigIntegerField() ==== Liczba Zamówień w Aplikacji Sklepu Internetowego ==== ''BigIntegerField'' może być używane do przechowywania liczby zamówień w aplikacji sklepu internetowego, zwłaszcza w przypadku dużych sklepów obsługujących dużą ilość transakcji. from django.db import models class Store(models.Model): name = models.CharField(max_length=255) order_count = models.BigIntegerField() ''BigIntegerField'' jest przydatne w przypadkach, gdy spodziewasz się obsługi bardzo dużych wartości, które mogą przekroczyć zakresy standardowych całkowitych typów danych. Jeśli oczekujesz, że liczby w Twojej aplikacji będą rosły do bardzo dużych wartości, ''BigIntegerField'' jest odpowiednim wyborem. ===== BinaryField ===== ''BinaryField'' w modelach Django jest używane do przechowywania danych binarnych, takich jak pliki binarne, obrazy, dokumenty lub dowolne dane w formie binarnej. To pole jest przydatne, gdy potrzebujesz przechowywać surowe dane binarne, które nie mają struktury relacyjnej bazy danych, takiej jak pliki binarne.\\ \\ Przykłady zastosowań ''BinaryField'': ==== Przechowywanie Plików Binarnych ==== Możesz używać ''BinaryField'', aby przechowywać pliki binarne, takie jak obrazy, dźwięki, filmy itp. To może być przydatne, jeśli chcesz przechowywać te pliki bezpośrednio w bazie danych, a nie na dysku. from django.db import models class Document(models.Model): name = models.CharField(max_length=255) file_content = models.BinaryField() ==== Przechowywanie Danych w Formie Binarnego Obiektu ==== ''BinaryField'' może być używane do przechowywania surowych danych binarnych, na przykład w formie obiektu ''pickle''. import pickle from django.db import models class PickledObject(models.Model): data = models.BinaryField() def set_data(self, obj): self.data = pickle.dumps(obj) def get_data(self): return pickle.loads(self.data) ==== Przechowywanie Danych w Formie Binarnego Strumienia ==== Możesz użyć ''BinaryField'' do przechowywania danych binarnych, takich jak strumienie bajtów. from django.db import models class BinaryStream(models.Model): binary_data = models.BinaryField() Warto jednak zauważyć, że w niektórych przypadkach może być bardziej efektywne przechowywanie plików binarnych na dysku (a jedynie ścieżki do nich w bazie danych) zamiast bezpośrednio w bazie danych, szczególnie jeśli pliki są duże i wymagają efektywnego zarządzania przestrzenią dyskową. W takich przypadkach można skorzystać z ''FileField'' lub ''ImageField''. ===== BooleanField ===== ''BooleanField'' w modelach Django jest używane do przechowywania wartości logicznych, czyli wartości prawda/fałsz (True/False) w bazie danych. To pole jest przydatne, gdy chcesz reprezentować dane, które mają tylko dwie możliwe wartości - prawda albo fałsz.\\ \\ Przykłady zastosowań ''BooleanField'': ==== Flagi Stanu ==== Możesz używać ''BooleanField'' do reprezentowania stanów obiektów, które mogą być aktywowane lub dezaktywowane. from django.db import models class Task(models.Model): name = models.CharField(max_length=255) is_completed = models.BooleanField(default=False) ==== Uprawnienia użytkowników ==== W przypadku systemów autoryzacji, ''BooleanField'' może reprezentować uprawnienia użytkowników, na przykład czy użytkownik ma dostęp do określonych funkcji czy nie. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) can_post_comments = models.BooleanField(default=True) can_edit_profile = models.BooleanField(default=False) ==== Zgody/Prefrencje użytkownika ==== Możesz używać ''BooleanField'' do przechowywania informacji o zgodach użytkowników lub ich preferencjach. from django.db import models class UserPreferences(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) receive_newsletter = models.BooleanField(default=True) enable_notifications = models.BooleanField(default=False) ==== Filtrowanie/Sortowanie ==== ''BooleanField'' jest również używane do filtrowania i sortowania danych w zapytaniach do bazy danych, na przykład do pobierania tylko aktywnych rekordów. active_tasks = Task.objects.filter(is_completed=False) ==== Pola Wyboru ==== Czasami ''BooleanField'' jest używane jako podstawowe pole dla pól wyboru, takich jak ''CheckboxInput'' w formularzach. class TaskForm(forms.ModelForm): class Meta: model = Task fields = ['name', 'is_completed'] widgets = { 'is_completed': forms.CheckboxInput(), } Warto zauważyć, że ''BooleanField'' w Django odpowiada typowi ''boolean'' w bazie danych (o ile jest obsługiwany przez daną bazę danych), co oznacza, że przechowuje ono wartości ''True'' lub ''False''. W bazie danych wartości te mogą być reprezentowane jako ''1'' (dla ''True'') lub ''0'' (dla ''False''). ===== CharField ===== ''CharField'' w modelach Django jest używane do przechowywania tekstowych danych o zmiennej długości. To pole jest szeroko stosowane do reprezentowania krótkich i średnich ciągów znaków, takich jak imię, nazwisko, adres email, tytuł, itp. Jest elastyczne, ponieważ można zdefiniować maksymalną długość ciągu znaków, jaką może przechowywać.\\ \\ Przykłady zastosowań ''CharField'': ==== Imię i Nazwisko ==== ''CharField'' jest często używane do przechowywania imion i nazwisk użytkowników. from django.db import models class UserProfile(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) ==== Adres Email ==== ''CharField'' może reprezentować pole przechowujące adresy email. from django.db import models class User(models.Model): email = models.CharField(max_length=100) ==== Tytuł/Autor Posta na Blogu ==== ''CharField'' może być używane do przechowywania tytułów postów na blogu lub nazw autorów. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) ==== Opis Produktu ==== ''CharField'' może reprezentować pole przechowujące krótki opis produktu w katalogu sklepu internetowego. from django.db import models class Product(models.Model): name = models.CharField(max_length=100) description = models.CharField(max_length=500) ==== Kod Pocztowy ==== ''CharField'' może być używane do przechowywania kodów pocztowych. from django.db import models class Address(models.Model): street = models.CharField(max_length=200) postal_code = models.CharField(max_length=10) Warto zaznaczyć, że ''CharField'' ma ograniczenie długości ciągu znaków, które można zdefiniować za pomocą argumentu ''max_length''. Długość ta musi być dostosowana do rodzaju danych, jakie chcesz przechowywać. W przypadku dłuższych ciągów znaków, takich jak artykuły, komentarze czy treści stron, można rozważyć użycie ''TextField'', które nie ma takiego ograniczenia długości. ===== DateField ===== ''DateField'' w modelach Django jest używane do przechowywania daty. To pole jest przydatne, gdy chcesz reprezentować informacje o dacie w strukturze modelu. ''DateField'' przechowuje daty w formie obiektu ''datetime.date''.\\ \\ Przykłady zastosowań ''DateField'': ==== Data Urodzenia ==== ''DateField'' może być używane do przechowywania daty urodzenia użytkowników. from django.db import models class UserProfile(models.Model): birth_date = models.DateField() ==== Data Wygaśnięcia Subskrypcji ==== W przypadku serwisów subskrypcyjnych można użyć ''DateField'' do przechowywania daty, kiedy subskrypcja wygasa. from django.db import models class Subscription(models.Model): expiration_date = models.DateField() ==== Data Wydania Artykułu ==== W przypadku modelu reprezentującego artykuły na blogu, ''DateField'' może przechowywać datę wydania artykułu. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=200) publication_date = models.DateField() ==== Data Rozpoczęcia Projektu ==== W przypadku modelu reprezentującego projekty, ''DateField'' może przechowywać datę rozpoczęcia projektu. from django.db import models class Project(models.Model): name = models.CharField(max_length=100) start_date = models.DateField() ==== Data Zakupu Produktu ==== ''DateField'' może być używane w modelu reprezentującym produkty do przechowywania daty zakupu. from django.db import models class Product(models.Model): name = models.CharField(max_length=100) purchase_date = models.DateField() Warto zauważyć, że ''DateField'' przechowuje daty w formie ''YYYY-MM-DD'', co jest formatem zgodnym z normą ISO 8601. Jeśli potrzebujesz również przechowywać informacje o czasie, można rozważyć użycie ''DateTimeField'', który obejmuje datę i czas. ===== DateTimeField ===== ''DateTimeField'' w modelach Django jest używane do przechowywania daty i czasu. To pole reprezentuje kombinację daty i czasu w jednym obiekcie ''datetime''. Jest przydatne, gdy chcesz śledzić informacje zarówno o dacie, jak i czasie w strukturze modelu.\\ \\ Przykłady zastosowań ''DateTimeField'': ==== Data i Czas Utworzenia Obiektu ==== ''DateTimeField'' może być używane do reprezentowania daty i czasu utworzenia obiektu w bazie danych. from django.db import models class MyModel(models.Model): created_at = models.DateTimeField(auto_now_add=True) ==== Data i Czas Ostatniej Modyfikacji Obiektu ==== ''DateTimeField'' może być używane do śledzenia daty i czasu ostatniej modyfikacji obiektu. from django.db import models class MyModel(models.Model): updated_at = models.DateTimeField(auto_now=True) ==== Data i Czas Wydania Artykułu na Blogu ==== W przypadku modelu reprezentującego artykuły na blogu, ''DateTimeField'' może przechowywać datę i czas wydania artykułu. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=200) publication_datetime = models.DateTimeField() ==== Data i Czas Rozpoczęcia Zadania ==== W przypadku modelu reprezentującego zadania do wykonania, ''DateTimeField'' może przechowywać datę i czas rozpoczęcia zadania. from django.db import models class Task(models.Model): name = models.CharField(max_length=100) start_datetime = models.DateTimeField() ==== Data i Czas Zalogowania Użytkownika ==== ''DateTimeField'' może być używane do reprezentowania daty i czasu zalogowania użytkownika. from django.db import models class UserLogin(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) login_datetime = models.DateTimeField() ''DateTimeField'' przechowuje daty i czasy w formie obiektów ''datetime.datetime''. Warto zauważyć, że jeśli potrzebujesz jedynie informacji o dacie (bez czasu), możesz użyć ''DateField''. ===== DecimalField ===== ''DecimalField'' w modelach Django jest używane do przechowywania liczb zmiennoprzecinkowych o stałej precyzji. Jest to szczególnie przydatne, gdy potrzebujesz precyzyjnych obliczeń finansowych lub innych, gdzie dokładność jest ważna. Pole to przechowuje liczby jako obiekty ''Decimal'' z modułu ''decimal'' w Pythonie.\\ \\ Przykłady zastosowań ''DecimalField'': ==== Kwota Transakcji Finansowej ==== ''DecimalField'' może być używane do przechowywania kwot transakcji finansowych, gdzie wymagana jest dokładność do określonej liczby miejsc po przecinku. from django.db import models class FinancialTransaction(models.Model): amount = models.DecimalField(max_digits=10, decimal_places=2) ==== Cena Produktu w Sklepie Internetowym ==== W przypadku modelu reprezentującego produkty w sklepie internetowym, ''DecimalField'' może przechowywać ceny z dokładnością do dwóch miejsc po przecinku. from django.db import models class Product(models.Model): name = models.CharField(max_length=100) price = models.DecimalField(max_digits=8, decimal_places=2) ==== Wysokość Procentu Rabatu ==== ''DecimalField'' może być używane do przechowywania procentów rabatu, na przykład przy tworzeniu systemu promocyjnego. from django.db import models class Discount(models.Model): percentage = models.DecimalField(max_digits=5, decimal_places=2) ==== Wartość Akcji na Giełdzie ==== W przypadku modelu reprezentującego dane finansowe, ''DecimalField'' może przechowywać wartość akcji z wymaganą precyzją. from django.db import models class Stock(models.Model): symbol = models.CharField(max_length=10) price_per_share = models.DecimalField(max_digits=10, decimal_places=2) ==== Waga Produktu w Sklepie Spożywczym ==== ''DecimalField'' może być używane do przechowywania wag produktów z dokładnością do kilogramów lub gramów. from django.db import models class GroceryProduct(models.Model): name = models.CharField(max_length=100) weight = models.DecimalField(max_digits=6, decimal_places=3) ''max_digits'' określa maksymalną liczbę cyfr przed i po przecinku, a ''decimal_places'' określa liczbę cyfr po przecinku. Dzięki temu możesz dostosować dokładność zgodnie z wymaganiami danej aplikacji. ===== DurationField ===== ''DurationField'' w modelach Django jest używane do przechowywania okresu czasu, czyli ilości czasu trwania, w formie obiektu ''datetime.timedelta''. To pole jest przydatne, gdy chcesz reprezentować różnice czasu lub długość trwania pewnych zdarzeń, na przykład czas trwania konkretnej akcji w systemie.\\ \\ Przykłady zastosowań ''DurationField'': ==== Czas Trwania Spotkania ==== ''DurationField'' może być używane do przechowywania czasu trwania spotkania lub wydarzenia. from django.db import models class Meeting(models.Model): title = models.CharField(max_length=100) duration = models.DurationField() ==== Czas Trwania Zadania ==== W przypadku modelu reprezentującego zadania, ''DurationField'' może przechowywać planowany czas trwania zadania. from django.db import models class Task(models.Model): name = models.CharField(max_length=100) estimated_duration = models.DurationField() ==== Czas Trwania Przejazdu ==== ''DurationField'' może być używane do przechowywania czasu trwania podróży lub przejazdu. from django.db import models class Trip(models.Model): destination = models.CharField(max_length=100) travel_duration = models.DurationField() ==== Czas Trwania Filmu ==== W przypadku modelu reprezentującego filmy, ''DurationField'' może przechowywać czas trwania filmu. from django.db import models class Movie(models.Model): title = models.CharField(max_length=100) duration = models.DurationField() ==== Czas Trwania Innych Procesów ==== ''DurationField'' może być używane w różnych kontekstach, gdzie potrzebujesz reprezentować ilość czasu trwania pewnych procesów, operacji lub zdarzeń. from django.db import models class Process(models.Model): name = models.CharField(max_length=100) execution_time = models.DurationField() ''DurationField'' pozwala na precyzyjne przechowywanie czasu trwania, takiego jak ''datetime.timedelta(seconds=...)'', co jest przydatne w wielu kontekstach, szczególnie w aplikacjach, gdzie dokładność czasu trwania jest ważna. ===== EmailField ===== ''EmailField'' w modelach Django jest używane do przechowywania adresów e-mail. Jest to specjalne pole, które sprawdza, czy przekazany ciąg znaków jest poprawnym adresem e-mail zgodnym z formatem RFC 5322.\\ \\ Przykłady zastosowań ''EmailField'': ==== Rejestracja Użytkownika ==== ''EmailField'' może być używane w modelu reprezentującym użytkowników, aby przechowywać ich adresy e-mail. from django.db import models class User(models.Model): username = models.CharField(max_length=50) email = models.EmailField(unique=True) # inne pola... ==== Kontakt w Systemie CRM ==== W przypadku systemu CRM (Customer Relationship Management), ''EmailField'' może reprezentować adres e-mail klienta lub partnera biznesowego. from django.db import models class Contact(models.Model): name = models.CharField(max_length=100) email = models.EmailField() # inne pola... ==== Subskrypcja Newslettera ==== ''EmailField'' może być używane do przechowywania adresów e-mail osób subskrybujących newsletter. from django.db import models class NewsletterSubscription(models.Model): email = models.EmailField(unique=True) # inne pola... ==== Komentarze na Blogu ==== W przypadku modelu reprezentującego komentarze na blogu, ''EmailField'' może przechowywać adresy e-mail autorów komentarzy. from django.db import models class BlogComment(models.Model): author_name = models.CharField(max_length=100) author_email = models.EmailField() # inne pola... ''EmailField'' samodzielnie wykonuje sprawdzenie, czy podany adres e-mail jest zgodny z formatem RFC 5322, co pomaga w utrzymaniu poprawności danych w bazie danych. Jeśli próba zapisu adresu e-mail o nieprawidłowym formacie zostanie podjęta, zostanie zgłoszony błąd. ===== FileField ===== ''FileField'' w modelach Django jest używane do przechowywania ścieżki do pliku na dysku. To pole pozwala na zapisywanie i pobieranie plików w relacyjnej bazie danych wraz z informacjami o lokalizacji pliku na dysku serwera.\\ \\ Przykłady zastosowań ''FileField'': ==== Przechowywanie Obrazu Profilowego Użytkownika ==== ''FileField'' może być używane do przechowywania ścieżki do pliku obrazu profilowego użytkownika. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) profile_picture = models.FileField(upload_to='profile_pics/') ==== Załączniki do Wiadomości Email ==== W przypadku modelu reprezentującego wiadomości e-mail, ''FileField'' może przechowywać ścieżki do załączników. from django.db import models class EmailAttachment(models.Model): email = models.ForeignKey(Email, on_delete=models.CASCADE) file = models.FileField(upload_to='email_attachments/') ==== Przechowywanie Plików w Systemie Zarządzania Dokumentami ==== ''FileField'' może być używane do przechowywania ścieżek do plików w systemie zarządzania dokumentami. from django.db import models class Document(models.Model): title = models.CharField(max_length=100) file_path = models.FileField(upload_to='documents/') ==== Zapisywanie Plików Multimedialnych w Aplikacji Muzycznej ==== W przypadku modelu reprezentującego utwory muzyczne, ''FileField'' może przechowywać ścieżki do plików dźwiękowych. from django.db import models class MusicTrack(models.Model): title = models.CharField(max_length=100) audio_file = models.FileField(upload_to='music_tracks/') ==== Przechowywanie Plików Konfiguracyjnych ==== ''FileField'' może być używane do przechowywania ścieżek do plików konfiguracyjnych lub plików tekstowych. from django.db import models class ConfigurationFile(models.Model): name = models.CharField(max_length=100) file_path = models.FileField(upload_to='config_files/') Warto zauważyć, że ''upload_to'' wskazuje na podkatalog, w którym mają być przechowywane pliki. Możesz dostosować to pole w zależności od struktury katalogów, jakiej oczekujesz. W praktyce, pliki są zazwyczaj przechowywane na dysku serwera, a baza danych przechowuje jedynie ścieżki do tych plików. ===== FilePathField ===== ''FilePathField'' w modelach Django jest używane do przechowywania ścieżki do pliku na dysku. To pole jest podobne do ''CharField'' z tym, że dostarcza automatycznego wybierania pliku w formie listy dostępnych plików na danym systemie plików. Jest używane, gdy chcesz, aby użytkownik mógł wybierać plik z określonego zestawu plików w określonym katalogu.\\ \\ Przykłady zastosowań ''FilePathField'': ==== Wybór Szablonu w Systemie Zarządzania Treścią ==== ''FilePathField'' może być używane, aby pozwolić użytkownikowi wybierać spośród dostępnych szablonów w systemie zarządzania treścią. from django.db import models class Content(models.Model): title = models.CharField(max_length=100) template_path = models.FilePathField(path='/path/to/templates/') W tym przykładzie, ''path'' wskazuje na katalog, z którego będą pobierane dostępne pliki. Użytkownik będzie mógł wybrać jedną z dostępnych ścieżek plików. ==== Wybór Pliku Konfiguracyjnego ==== ''FilePathField'' może być używane do wyboru pliku konfiguracyjnego z określonego katalogu. from django.db import models class Configuration(models.Model): name = models.CharField(max_length=100) config_file_path = models.FilePathField(path='/path/to/config/files/') ==== Wybór Zasobów w Aplikacji Internetowej ==== W przypadku modelu reprezentującego zasoby, ''FilePathField'' może umożliwić użytkownikowi wybór pliku z określonego katalogu. from django.db import models class WebResource(models.Model): name = models.CharField(max_length=100) resource_path = models.FilePathField(path='/path/to/web/resources/') Warto zauważyć, że ''FilePathField'' nie przechowuje samego pliku, ale jedynie ścieżkę do niego. Działa ono jako pole wyboru z dostępnymi ścieżkami wskazanymi w określonym katalogu. Jeśli chcesz przechowywać sam plik, użyj ''FileField''. ===== FloatField ===== ''FloatField'' w modelach Django jest używane do przechowywania liczb zmiennoprzecinkowych, czyli liczb rzeczywistych, które mogą mieć wartości dziesiętne lub ułamki. To pole jest przydatne, gdy chcesz przechowywać numeryczne dane zmiennoprzecinkowe, takie jak ceny, współczynniki, oceny itp. Wartości te są przechowywane w formie zmiennoprzecinkowej z podwójną precyzją.\\ \\ Przykłady zastosowań ''FloatField'': ==== Przechowywanie Cen i Kwot Finansowych ==== Możesz użyć ''FloatField'', aby przechowywać ceny produktów, kwoty transakcji finansowych itp. from django.db import models class Product(models.Model): name = models.CharField(max_length=255) price = models.FloatField() ==== Przechowywanie Współczynników ==== ''FloatField'' może być używane do przechowywania różnych współczynników, takich jak współczynniki matematyczne, procenty itp. from django.db import models class Coefficient(models.Model): name = models.CharField(max_length=255) value = models.FloatField() ==== Przechowywanie Oceny lub Oceny Ułamkowej ==== ''FloatField'' może być stosowane do przechowywania ocen lub wyników numerycznych zmiennoprzecinkowych. from django.db import models class ExamResult(models.Model): student_name = models.CharField(max_length=255) score = models.FloatField() Warto zauważyć, że przy pracy z pieniędzmi często zaleca się używanie ''DecimalField'' zamiast ''FloatField'', ponieważ ''DecimalField'' jest bardziej odpowiednie do precyzyjnych operacji finansowych, gdzie wymagane jest dokładne zaokrąglanie. Jednak w przypadku ogólnych liczb zmiennoprzecinkowych ''FloatField'' jest powszechnie stosowane. ===== GenericIPAddressField ===== ''GenericIPAddressField'' w modelach Django jest używane do przechowywania adresów IP, ale jest "uniwersalne" (generyczne) w tym sensie, że pozwala na przechowywanie zarówno adresów IPv4, jak i IPv6. Jest to przydatne pole, gdy chcesz przechowywać informacje o adresie IP, a nie decydujesz się na konkretne ograniczenie typu adresu.\\ \\ Przykłady zastosowań ''GenericIPAddressField'': ==== Przechowywanie Adresów IP w Aplikacjach Webowych ==== Możesz użyć ''GenericIPAddressField'' do przechowywania adresów IP klientów, użytkowników lub innych podmiotów w kontekście aplikacji webowej. from django.db import models class User(models.Model): username = models.CharField(max_length=255) ip_address = models.GenericIPAddressField() ==== Przechowywanie Informacji o Serwerze ==== W przypadku systemów monitoringu lub rejestracji działań, ''GenericIPAddressField'' może być używane do przechowywania adresów IP serwerów, z których pochodzą żądania. from django.db import models class ServerLog(models.Model): timestamp = models.DateTimeField() server_ip = models.GenericIPAddressField() action_description = models.TextField() ==== Przechowywanie Informacji w Logach Dostępu ==== ''GenericIPAddressField'' może być stosowane do przechowywania adresów IP związanych z logami dostępu lub bezpieczeństwa. from django.db import models class AccessLog(models.Model): timestamp = models.DateTimeField() user_ip = models.GenericIPAddressField() access_path = models.CharField(max_length=255) status_code = models.IntegerField() Warto zauważyć, że ''GenericIPAddressField'' umożliwia specyfikację opcji, takich jak ''protocol'' (domyślnie ''both'' obsługujący zarówno IPv4, jak i IPv6) oraz ''unpack_ipv4'' (określający, czy adresy IPv4 mają być rozwijane). Domyślnie, ''GenericIPAddressField'' nie sprawdza, czy podany adres IP jest rzeczywiście ważnym adresem IP; to sprawdzenie musi być zaimplementowane w warstwie aplikacji, jeśli jest to wymagane. ===== ImageField ===== ''ImageField'' w modelach Django jest używane do przechowywania obrazów. To pole umożliwia łatwe zarządzanie i przechowywanie plików graficznych, takich jak zdjęcia, ikony, awatary itp., w bazie danych lub systemie plików.\\ \\ Przykłady zastosowań ''ImageField'': ==== Przechowywanie Profilowych Zdjęć Użytkowników ==== Możesz użyć ''ImageField'', aby przechowywać zdjęcia profilowe użytkowników w systemie społecznościowym. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) profile_picture = models.ImageField(upload_to='profile_pics/') ==== Zapisywanie Zdjęć Produktów w Sklepie Internetowym ==== ''ImageField'' może być stosowane do przechowywania zdjęć produktów w sklepie internetowym. from django.db import models class Product(models.Model): name = models.CharField(max_length=255) image = models.ImageField(upload_to='product_images/') ==== Przechowywanie Grafiki w Aplikacji Bloga ==== ''ImageField'' może być używane do przechowywania obrazów, które towarzyszą wpisom w blogu. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=255) content = models.TextField() image = models.ImageField(upload_to='blog_images/') ==== Tworzenie Galerii Zdjęć ==== ''ImageField'' pozwala na tworzenie galerii zdjęć, przechowując obrazy związane z danymi rekordami. from django.db import models class PhotoGallery(models.Model): title = models.CharField(max_length=255) image = models.ImageField(upload_to='gallery_images/') Ważną opcją dla ''ImageField'' jest argument ''upload_to'', który określa podkatalog, do którego będą zapisywane przesłane pliki. Umożliwia to łatwe zarządzanie strukturą katalogów i organizowanie przechowywanych obrazów. image = models.ImageField(upload_to='profile_pics/') Warto pamiętać, że przechowywanie obrazów w bazie danych może prowadzić do zwiększenia rozmiaru bazy danych. W niektórych przypadkach, zwłaszcza gdy obrazy są duże i liczne, rozważenie przechowywania obrazów na dysku z odnośnikiem do nich w bazie danych ''FileField'' może być bardziej efektywne. ===== IntegerField ===== ''IntegerField'' w modelach Django jest używane do przechowywania liczb całkowitych. To pole jest przydatne, gdy chcesz przechowywać wartości liczbowe bez części dziesiętnej, takie jak liczba całkowita, liczba identyfikacyjna, liczba produktów w magazynie itp.\\ \\ Przykłady zastosowań ''IntegerField'': ==== Przechowywanie Liczb Całkowitych w Modelu Produktu ==== Możesz użyć ''IntegerField'', aby przechowywać ilość dostępnych produktów w sklepie internetowym. from django.db import models class Product(models.Model): name = models.CharField(max_length=255) quantity_available = models.IntegerField() ==== Identyfikacja Kategorii w Aplikacji Bloga ==== ''IntegerField'' może być stosowane do przechowywania identyfikatora kategorii w modelu bloga. from django.db import models class BlogCategory(models.Model): name = models.CharField(max_length=255) category_id = models.IntegerField(unique=True) ==== Licznik Ocen w Aplikacji Społecznościowej ==== ''IntegerField'' może być używane do przechowywania liczby ocen danego użytkownika w systemie ocen społecznościowych. from django.db import models class UserRatings(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) ratings_count = models.IntegerField(default=0) ==== Przechowywanie Wieków Użytkowników ==== ''IntegerField'' może być stosowane do przechowywania wieku użytkowników w systemie. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) age = models.IntegerField(null=True, blank=True) Warto zauważyć, że ''IntegerField'' przyjmuje argumenty, takie jak ''default'', ''null'' i ''blank'', które pozwalają na określenie wartości domyślnej, czy pole może przyjmować wartość ''NULL'' w bazie danych, oraz czy pole może być puste w formularzach Django. quantity_available = models.IntegerField(default=0) To ułatwia kontrolowanie i zarządzanie wartościami liczbowymi w modelach Django. ===== JSONField ===== ''JSONField'' w modelach Django jest używane do przechowywania danych w formacie JSON. To pole pozwala na elastyczne przechowywanie struktur danych w postaci JSON, co jest przydatne w przypadku, gdy potrzebujesz przechowywać niestandardowe dane, które nie pasują do tradycyjnej relacyjnej struktury bazy danych.\\ \\ Przykłady zastosowań ''JSONField'': ==== Przechowywanie Parametrów Konfiguracyjnych ==== Możesz użyć ''JSONField'', aby przechowywać niestandardowe ustawienia konfiguracyjne dla aplikacji. from django.db import models class AppConfig(models.Model): app_name = models.CharField(max_length=255) config_data = models.JSONField() ==== Zapisywanie Danych o Produkcie ==== ''JSONField'' może być stosowane do przechowywania dodatkowych informacji o produkcie w elastycznej formie. from django.db import models class Product(models.Model): name = models.CharField(max_length=255) additional_info = models.JSONField() ==== Przechowywanie Danych o Zamówieniu w Aplikacji Sklepu Internetowego ==== Możesz użyć ''JSONField'', aby przechowywać niestandardowe dane o zamówieniach, takie jak szczegóły dostawy, dodatkowe informacje itp. from django.db import models class Order(models.Model): order_number = models.CharField(max_length=255) order_details = models.JSONField() ==== Zapisywanie Danych w Aplikacji Bloga ==== ''JSONField'' może być używane do przechowywania niestandardowych metadanych lub dodatkowych informacji w modelu wpisu blogowego. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=255) content = models.TextField() metadata = models.JSONField() ''JSONField'' umożliwia zapisywanie różnorodnych struktur danych, takich jak listy, obiekty, liczby, ciągi znaków, a nawet zagnieżdżone obiekty JSON. Jest to przydatne, gdy konkretna struktura danych może się zmieniać w czasie lub gdy potrzebujesz przechowywać dane o niestandardowej strukturze bez konieczności tworzenia dodatkowych tabel w bazie danych. Warto jednak pamiętać, że ''JSONField'' może ograniczać możliwość wykonywania bardziej zaawansowanych operacji bazodanowych na przechowywanych danych w porównaniu do tradycyjnych pól. ===== PositiveBigIntegerField ===== ''PositiveBigIntegerField'' w modelach Django jest używane do przechowywania liczb całkowitych większych niż 0 (dodatnich) i o dużej wartości, które są zaklasyfikowane jako ''bigint''. To pole jest przydatne, gdy potrzebujesz przechowywać bardzo duże wartości liczbowe, a jednocześnie chcesz zapewnić, że będą to liczby dodatnie.\\ \\ Przykłady zastosowań ''PositiveBigIntegerField'': ==== Przechowywanie Identyfikatorów Transakcji ==== Możesz użyć ''PositiveBigIntegerField'', aby przechowywać unikalne identyfikatory transakcji lub numerację zleceń. from django.db import models class Transaction(models.Model): transaction_id = models.PositiveBigIntegerField(unique=True) amount = models.DecimalField(max_digits=10, decimal_places=2) ==== Numerowanie Dużej Liczby Obiektów w Systemie ==== ''PositiveBigIntegerField'' może być stosowane do numerowania dużej ilości obiektów w systemie, gdzie standardowe pola ''IntegerField'' mogą być zbyt małe. from django.db import models class LargeNumberedObject(models.Model): object_number = models.PositiveBigIntegerField(unique=True) object_data = models.TextField() ==== Przechowywanie Dużych Liczb w Aplikacji Matematycznej ==== W przypadku aplikacji matematycznych, gdzie przechowujesz duże wartości liczbowe, ''PositiveBigIntegerField'' może być używane do przechowywania wyników obliczeń. from django.db import models class MathematicalResult(models.Model): result_value = models.PositiveBigIntegerField() calculation_description = models.CharField(max_length=255) ''PositiveBigIntegerField'' zapewnia, że przechowywane liczby są dodatnie, co może być ważne w kontekście wielu zastosowań. Jest to szczególnie przydatne, gdy pracujesz z unikalnymi identyfikatorami lub numeracją, gdzie wartości ujemne nie mają sensu.\\ \\ Warto zauważyć, że ''PositiveBigIntegerField'' jest dostępne od Django w wersji 3.1, więc jeśli korzystasz z wcześniejszych wersji, ta opcja może nie być dostępna. ===== PositiveIntegerField ===== ''PositiveIntegerField'' w modelach Django jest używane do przechowywania liczb całkowitych większych niż 0 (dodatnich). To pole jest przydatne, gdy chcesz przechowywać jedynie wartości dodatnie i uniknąć zapisywania wartości ujemnych w danym polu.\\ \\ Przykłady zastosowań ''PositiveIntegerField'': ==== Przechowywanie Wieku Użytkownika ==== Możesz użyć ''PositiveIntegerField'', aby przechowywać wiek użytkownika w systemie. Wiek jest zawsze wartością nieujemną. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) age = models.PositiveIntegerField() ==== Licznik "Lubię To" w Aplikacji Społecznościowej ==== ''PositiveIntegerField'' może być stosowane do przechowywania liczby "lubię to" pod danym wpisem w systemie społecznościowym. Liczba "lubię to" musi być nieujemna. from django.db import models class Post(models.Model): content = models.TextField() likes_count = models.PositiveIntegerField(default=0) ==== Numerowanie Obiektów w Kolejności ==== ''PositiveIntegerField'' może być używane do numerowania obiektów w określonej kolejności, gdzie numeracja zaczyna się od 1. from django.db import models class OrderedObject(models.Model): order_number = models.PositiveIntegerField() object_data = models.TextField() ==== Przechowywanie Wartości Pozytywnej w Aplikacji Matematycznej ==== W przypadku aplikacji matematycznych, gdzie przechowujesz wartości liczbowe, ''PositiveIntegerField'' może być używane do przechowywania wartości, które są zawsze nieujemne. from django.db import models class MathematicalValue(models.Model): value = models.PositiveIntegerField() description = models.CharField(max_length=255) ''PositiveIntegerField'' zapewnia, że przechowywane liczby są dodatnie, co może być istotne w wielu kontekstach biznesowych. Jest to szczególnie użyteczne, gdy chcesz zapewnić, że w danym polu są przechowywane tylko wartości nieujemne.\\ \\ ''PositiveIntegerField'' w Django jest używane do przechowywania liczb całkowitych większych lub równych zeru. Zakres wartości tego pola obejmuje wszystkie liczby całkowite od zera w górę. Zakres ten wynika z samej nazwy - jest to pole przeznaczone dla wartości dodatnich lub zerowych.\\ \\ Wartości, które można przechowywać w ''PositiveIntegerField'', zależą od używanej bazy danych i implementacji wewnętrznej, ale teoretycznie zakres obejmuje wszystkie liczby całkowite większe lub równe zeru, które mieszczą się w zakresie dostępnego typu danych liczbowych w danej bazie danych.\\ \\ Przykładowo, w PostgreSQL ''PositiveIntegerField'' może być mapowane na typ ''integer'' lub ''bigint'' w zależności od wymagań zakresu. W MySQL może być mapowane na ''UNSIGNED INTEGER'' lub ''UNSIGNED BIGINT''.\\ \\ Wartości teoretyczne dla ''PositiveIntegerField'' w zależności od implementacji mogą wynosić od 0 do 2^31-1 (dla ''integer'' w PostgreSQL) lub 0 do 2^63-1 (dla ''bigint'' w PostgreSQL). W przypadku ''UNSIGNED INTEGER'' w MySQL zakres wynosi od 0 do 2^32-1, a dla ''UNSIGNED BIGINT'' od 0 do 2^64-1.\\ \\ Pamiętaj, że konkretny zakres wartości w danym przypadku zależy od specyfiki bazy danych, a Django sam w sobie dostarcza abstrakcję, która powinna działać na różnych bazach danych. Jeśli zakres wartości ma kluczowe znaczenie w twoim projekcie, zalecam sprawdzenie dokumentacji konkretnej bazy danych, z którą pracujesz. ===== PositiveSmallIntegerField ===== ''PositiveSmallIntegerField'' w modelach Django jest używane do przechowywania liczb całkowitych dodatnich, przy czym ogranicza zakres wartości do stosunkowo niewielkich liczb. Jest to pole o stałej długości, co oznacza, że przechowuje liczby całkowite 16-bitowe.\\ \\ Przykłady zastosowań ''PositiveSmallIntegerField'': ==== Przechowywanie Numeru Kategorii w Aplikacji Bloga ==== Możesz użyć ''PositiveSmallIntegerField'', aby przechowywać numer kategorii w systemie bloga, jeśli zakładasz, że ilość kategorii będzie ograniczona. from django.db import models class BlogCategory(models.Model): name = models.CharField(max_length=255) category_number = models.PositiveSmallIntegerField(unique=True) ==== Oceny Wpisywane Przez Użytkowników ==== ''PositiveSmallIntegerField'' może być używane do przechowywania ocen wpisów w systemie ocen społecznościowych, gdzie oceny są ograniczone do niewielkiego zakresu. from django.db import models class UserRatings(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) rating = models.PositiveSmallIntegerField() Numerowanie Kolejnych Obiektów ''PositiveSmallIntegerField'' może być stosowane do numerowania obiektów, gdzie oczekujesz, że liczba obiektów będzie stosunkowo niewielka. from django.db import models class SmallNumberedObject(models.Model): object_number = models.PositiveSmallIntegerField(unique=True) object_data = models.TextField() ==== Przechowywanie Numerów Kierunków w Systemie ==== ''PositiveSmallIntegerField'' może być używane do przechowywania numerów kierunków w systemie, gdzie ilość kierunków jest ograniczona. from django.db import models class Direction(models.Model): name = models.CharField(max_length=255) direction_number = models.PositiveSmallIntegerField(unique=True) Warto zauważyć, że ''PositiveSmallIntegerField'' ma ograniczony zakres wartości, który wynika z ograniczenia na 16-bitowe liczby całkowite. W PostgreSQL jest to zazwyczaj od 0 do 32767, a w MySQL od 0 do 65535. Jeśli potrzebujesz przechowywać większe wartości, zalecane jest użycie ''PositiveIntegerField''. ===== SlugField ===== ''SlugField'' w modelach Django jest używane do przechowywania tzw. slugów, czyli przyjaznych dla ludzi, czytelnych części adresów URL. Jest to często stosowane pole do tworzenia linków do obiektów modelu w witrynie internetowej, ponieważ zawiera tylko znaki alfanumeryczne, myślniki i podkreślenia, a także jest zazwyczaj w formie łacińskiej, bez znaków diakrytycznych.\\ \\ Przykłady zastosowań ''SlugField'': ==== Tworzenie Przyjaznych URL-i Dla Artykułów ==== Możesz użyć ''SlugField'', aby tworzyć przyjazne URL-e dla artykułów w blogu, zawierające tytuły artykułów zamiast identyfikatorów. from django.db import models from django.utils.text import slugify class BlogPost(models.Model): title = models.CharField(max_length=255) slug = models.SlugField(unique=True) def save(self, *args, **kwargs): self.slug = slugify(self.title) super().save(*args, **kwargs) ==== Tworzenie Przyjaznych URL-i Dla Kategorii ==== ''SlugField'' może być stosowane do tworzenia przyjaznych URL-i dla kategorii w systemie, gdzie nazwy kategorii są często używane w adresie URL. from django.db import models from django.utils.text import slugify class Category(models.Model): name = models.CharField(max_length=255) slug = models.SlugField(unique=True) def save(self, *args, **kwargs): self.slug = slugify(self.name) super().save(*args, **kwargs) ==== Dodawanie Przyjaznych URL-i Dla Profili Użytkowników ==== ''SlugField'' może być używane do tworzenia przyjaznych URL-i dla profili użytkowników, gdzie użytkownicy mogą mieć niestandardowe nazwy. from django.db import models from django.contrib.auth.models import User from django.utils.text import slugify class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) display_name = models.CharField(max_length=255) slug = models.SlugField(unique=True) def save(self, *args, **kwargs): self.slug = slugify(self.display_name) super().save(*args, **kwargs) ''SlugField'' automatycznie tworzy unikalne slugi na podstawie określonych pól, ale możesz również zdefiniować niestandardową logikę generowania sluga, jak w powyższych przykładach, korzystając z funkcji ''slugify'' dostępnej w Django. Warto jednak pamiętać, że należy zadbać o unikalność slugów, zwłaszcza gdy są używane jako klucz główny lub mają być unikalne w obrębie danego modelu. ===== SmallAutoField ===== ===== SmallIntegerField ===== ''SmallIntegerField'' w modelach Django jest używane do przechowywania liczb całkowitych o stosunkowo niewielkich wartościach. To pole ma stałą długość, co oznacza, że przechowuje liczby całkowite 16-bitowe.\\ \\ Przykłady zastosowań ''SmallIntegerField'': ==== Przechowywanie Wieków ==== ''SmallIntegerField'' może być używane do przechowywania wieku, szczególnie gdy zakładasz, że użytkownicy nie będą miały bardzo dużego wieku. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) age = models.SmallIntegerField() ==== Liczba Komentarzy Pod Wpisem ==== ''SmallIntegerField'' może być stosowane do przechowywania liczby komentarzy pod wpisem w systemie blogowym, jeśli zakładasz, że ta liczba nie będzie bardzo duża. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=255) comments_count = models.SmallIntegerField(default=0) ==== Numerowanie Kategorii w Systemie ==== ''SmallIntegerField'' może być używane do numerowania kategorii, szczególnie jeśli zakładasz, że ilość kategorii w systemie będzie stosunkowo niewielka. from django.db import models class BlogCategory(models.Model): name = models.CharField(max_length=255) category_number = models.SmallIntegerField(unique=True) ==== Ocena w Systemie Społecznościowym ==== ''SmallIntegerField'' może być stosowane do przechowywania ocen w systemie społecznościowym, gdzie zakładasz, że oceny mieszczą się w ograniczonym zakresie. from django.db import models class UserRating(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) rating = models.SmallIntegerField() ''SmallIntegerField'' jest przydatne, gdy chcesz zminimalizować używane miejsce w bazie danych, szczególnie gdy przechowujesz wartości liczbowe, które są z góry ograniczone pod względem zakresu. Pamiętaj jednak, że jest to 16-bitowe pole, co oznacza, że zakres wartości jest ograniczony, zazwyczaj do -32768 do 32767 (lub 0 do 65535, jeśli używane jest ''PositiveSmallIntegerField''). Jeśli zakładasz większy zakres wartości, zaleca się użycie ''IntegerField''. ===== TextField ===== ''TextField'' w modelach Django jest używane do przechowywania długich ciągów znaków, takich jak długie opisy, treści artykułów, komentarze czy inne dane tekstowe o znacznym rozmiarze. W przeciwieństwie do pól ''CharField'', ''TextField'' nie ma ograniczenia na długość przechowywanej wartości (lub to ograniczenie jest bardzo wysokie), co sprawia, że jest odpowiednie do przechowywania większych ilości tekstu.\\ \\ Przykłady zastosowań ''TextField'': ==== Treść Artykułów w Aplikacji Bloga ==== ''TextField'' może być używane do przechowywania treści artykułów w systemie blogowym. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=255) content = models.TextField() ==== Długi Opis Produktu w Sklepie Internetowym ==== ''TextField'' może być stosowane do przechowywania długich opisów produktów w sklepie internetowym. from django.db import models class Product(models.Model): name = models.CharField(max_length=255) description = models.TextField() ==== Komentarze w Systemie Społecznościowym ==== ''TextField'' jest odpowiednie do przechowywania długich komentarzy w systemie społecznościowym. from django.db import models class Comment(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) content = models.TextField() ==== Notatki w Aplikacji Do Zarządzania Projektami ==== ''TextField'' może być używane do przechowywania długich notatek w aplikacji do zarządzania projektami. from django.db import models class ProjectTask(models.Model): title = models.CharField(max_length=255) notes = models.TextField() Użycie ''TextField'' daje elastyczność w przechowywaniu dużych ilości tekstu, ale warto pamiętać, że może to prowadzić do większego zużycia miejsca w bazie danych, zwłaszcza gdy przechowujesz duże ilości danych tekstowych. ===== TimeField ===== ''TimeField'' w modelach Django jest używane do przechowywania informacji o czasie, czyli godzinie i minucie, bez daty. To pole jest przydatne, gdy chcesz śledzić konkretne punkty czasowe w ciągu doby, niezależnie od daty.\\ \\ Przykłady zastosowań ''TimeField'': ==== Godzina Rozpoczęcia Wydarzenia ==== ''TimeField'' może być używane do przechowywania informacji o godzinie rozpoczęcia wydarzenia. from django.db import models class Event(models.Model): name = models.CharField(max_length=255) start_time = models.TimeField() ==== Czas Trwania Spotkania ==== ''TimeField'' może być stosowane do przechowywania informacji o czasie trwania spotkania. from django.db import models class Meeting(models.Model): title = models.CharField(max_length=255) duration = models.TimeField() ==== Godzina Otwarcia Restauracji ==== ''TimeField'' może być używane do przechowywania informacji o godzinie otwarcia restauracji. from django.db import models class Restaurant(models.Model): name = models.CharField(max_length=255) opening_time = models.TimeField() ==== Czas Trwania Zadania w Aplikacji Do Zarządzania Zadaniami ==== ''TimeField'' może być stosowane do przechowywania informacji o czasie trwania zadania w aplikacji do zarządzania zadaniami. from django.db import models class Task(models.Model): title = models.CharField(max_length=255) duration = models.TimeField() Użycie ''TimeField'' jest przydatne w sytuacjach, gdzie interesuje cię tylko aspekt czasowy, a nie data. Warto jednak pamiętać, że ''TimeField'' przechowuje czas bez uwzględniania strefy czasowej, co może być ważne w niektórych przypadkach. Jeśli potrzebujesz uwzględnić strefę czasową, możesz zamiast tego użyć ''DateTimeField''. ===== URLField ===== ''URLField'' w modelach Django jest używane do przechowywania adresów URL (Uniform Resource Locator), czyli odnośników do zasobów dostępnych w internecie. To pole jest przydatne, gdy chcesz przechowywać i operować na linkach do zasobów internetowych.\\ \\ Przykłady zastosowań ''URLField'': ==== Strona Internetowa Firmy ==== ''URLField'' może być używane do przechowywania adresu URL strony internetowej firmy. from django.db import models class Company(models.Model): name = models.CharField(max_length=255) website_url = models.URLField() ==== Link Do Profilu Użytkownika w Społecznościowym Serwisie ==== ''URLField'' może być stosowane do przechowywania linku do profilu użytkownika w społecznościowym serwisie. from django.db import models class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) social_profile_url = models.URLField() ==== Odnośnik Do Artykułu w Serwisie Blogowym ==== ''URLField'' może być używane do przechowywania linku do konkretnego artykułu w serwisie blogowym. from django.db import models class BlogPost(models.Model): title = models.CharField(max_length=255) article_url = models.URLField() ==== Link Do Repozytorium na GitHubie ==== ''URLField'' może być stosowane do przechowywania linku do repozytorium na platformie GitHub. from django.db import models class GitHubRepository(models.Model): name = models.CharField(max_length=255) repository_url = models.URLField() ''URLField'' sprawdza, czy podany tekst jest poprawnym adresem URL, a także pozwala na opcjonalne określenie maksymalnej długości URL-a. Jeśli zależy ci na przechowywaniu odnośników w modelu, ''URLField'' jest odpowiednim wyborem. ===== UUIDField ===== ''UUIDField'' w modelach Django jest używane do przechowywania identyfikatorów UUID (Universally Unique Identifier). UUID to 128-bitowy identyfikator, który jest globalnie unikalny. Jest używany, aby zapewnić, że identyfikatory są unikalne na całym świecie, co jest szczególnie przydatne w rozproszonych systemach i bazach danych.\\ \\ Przykłady zastosowań ''UUIDField'': ==== Unikalne Identyfikatory Użytkowników ==== ''UUIDField'' może być używane do przechowywania unikalnych identyfikatorów użytkowników. from django.db import models import uuid class UserProfile(models.Model): user_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) # inne pola modelu ==== Identyfikatory dla Zasobów w Aplikacji ==== ''UUIDField'' może być stosowane do generowania unikalnych identyfikatorów dla zasobów w aplikacji. from django.db import models import uuid class Resource(models.Model): resource_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) # inne pola modelu ==== Unikalne Identyfikatory Sesji ==== ''UUIDField'' może być używane do przechowywania unikalnych identyfikatorów sesji w systemie. from django.db import models import uuid class UserSession(models.Model): session_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) # inne pola modelu ''UUIDField'' zazwyczaj jest domyślnie generowane przy użyciu funkcji ''uuid.uuid4()'', która generuje losowy identyfikator UUID. Możesz jednak dostarczyć własną funkcję generującą, jeśli chcesz mieć większą kontrolę nad procesem generowania identyfikatorów.\\ \\ Użycie ''UUIDField'' jest szczególnie przydatne w sytuacjach, gdzie wymagane jest zapewnienie unikalności identyfikatorów, a standardowe autoinkrementowane pola mogą być niewystarczające. ===== Relationship fields ===== ===== ForeignKey ===== ''ForeignKey'' w modelach Django jest używane do tworzenia relacji wiele-do-jednego pomiędzy dwoma modelami. To pole umożliwia nawiązanie połączenia między jednym obiektem jednego modelu a wieloma obiektami innego modelu. Relacja wiele-do-jednego oznacza, że wiele obiektów z jednej strony może być powiązanych z jednym obiektem z drugiej strony.\\ \\ Przykłady zastosowań ''ForeignKey'': ==== Relacja Między Artykułami a Autorami ==== ''ForeignKey'' może być używane do ustanawiania relacji między artykułami a autorami w systemie blogowym, gdzie jeden autor może napisać wiele artykułów, ale każdy artykuł ma tylko jednego autora. from django.db import models class Author(models.Model): name = models.CharField(max_length=255) class Article(models.Model): title = models.CharField(max_length=255) content = models.TextField() author = models.ForeignKey(Author, on_delete=models.CASCADE) ==== Relacja Między Kategoriami a Produktami w Sklepie Internetowym ==== ''ForeignKey'' może być stosowane do tworzenia relacji między kategoriami a produktami w sklepie internetowym, gdzie jeden produkt może należeć do jednej kategorii, ale jedna kategoria może zawierać wiele produktów. from django.db import models class Category(models.Model): name = models.CharField(max_length=255) class Product(models.Model): name = models.CharField(max_length=255) price = models.DecimalField(max_digits=10, decimal_places=2) category = models.ForeignKey(Category, on_delete=models.CASCADE) ==== Relacja Między Użytkownikami a Zadaniem w Aplikacji Do Zarządzania Zadaniami ==== ''ForeignKey'' może być używane do ustanawiania relacji między użytkownikami a zadaniami w aplikacji do zarządzania zadaniami, gdzie jeden użytkownik może być przypisany do wielu zadań, ale każde zadanie ma tylko jednego przypisanego użytkownika. from django.db import models from django.contrib.auth.models import User class Task(models.Model): title = models.CharField(max_length=255) description = models.TextField() assigned_user = models.ForeignKey(User, on_delete=models.CASCADE) ''ForeignKey'' jest kluczowe do tworzenia skomplikowanych relacji między różnymi modelami w Django. Parametr ''on_delete=models.CASCADE'' oznacza, że gdy obiekt powiązany (''Author'', ''Category'', ''User'' w przykładach powyżej) zostanie usunięty, to wszystkie obiekty związane z tym obiektem (''Article'', ''Product'', ''Task'') również zostaną usunięte. Istnieje także inne opcje, takie jak ''PROTECT'', ''SET_NULL'', ''SET_DEFAULT'' itp., które definiują, jak powinno zachować się pole ''ForeignKey'' w przypadku usunięcia obiektu związanego.\\ \\ Opcje ''PROTECT'', ''SET_NULL'', ''SET_DEFAULT'' w parametrze ''on_delete'' pola ''ForeignKey'' definiują, jak zachować się w przypadku usunięcia obiektu powiązanego z polem ''ForeignKey''. Poniżej znajdziesz krótkie wyjaśnienie każdej z tych opcji:\\ \\ 1. **''PROTECT''**: Oznacza, że nie można usunąć obiektu powiązanego, dopóki istnieją obiekty, które na niego się odwołują. Jeśli próbujesz usunąć obiekt, który jest obecnie używany przez inne obiekty za pomocą ''ForeignKey'' z opcją ''PROTECT'', to operacja usuwania zostanie zablokowana.\\ \\ Przykład:\\ class Author(models.Model): name = models.CharField(max_length=255) class Article(models.Model): title = models.CharField(max_length=255) content = models.TextField() author = models.ForeignKey(Author, on_delete=models.PROTECT) 2. **''SET_NULL''**: Oznacza, że gdy obiekt powiązany zostanie usunięty, pole ''ForeignKey'' w obiektach, które na niego się odwołują, zostanie ustawione na ''NULL'' (jeśli to możliwe). Pole to musi być zdefiniowane z parametrem ''null=True''.\\ \\ Przykład:\\ class Category(models.Model): name = models.CharField(max_length=255) class Product(models.Model): name = models.CharField(max_length=255) category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True) 3. **''SET_DEFAULT''**: Oznacza, że gdy obiekt powiązany zostanie usunięty, pole ''ForeignKey'' w obiektach, które na niego się odwołują, zostanie ustawione na domyślną wartość (określoną w definicji pola ''ForeignKey'' za pomocą parametru ''default'').\\ \\ Przykład:\\ class User(models.Model): username = models.CharField(max_length=255) class Task(models.Model): title = models.CharField(max_length=255) assigned_user = models.ForeignKey(User, on_delete=models.SET_DEFAULT, default=1) Oprócz tych opcji istnieją także inne, takie jak ''SET()'' (ustawia pole na określoną wartość), ''DO_NOTHING'' (nie wykonuje żadnej operacji), a także możesz zdefiniować własną funkcję, która zostanie wywołana w przypadku usunięcia obiektu powiązanego (''models.SET(function)''). Ważne jest, aby wybrać odpowiednią opcję w zależności od wymagań biznesowych i logicznych struktury danych w aplikacji. ===== ManyToManyField ===== ''ManyToManyField'' w modelach Django jest używane do tworzenia relacji wiele-do-wielu pomiędzy dwoma modelami. Oznacza to, że obiekt jednego modelu może być powiązany z wieloma obiektami drugiego modelu, a jednocześnie obiekt drugiego modelu może być powiązany z wieloma obiektami pierwszego modelu.\\ \\ Przykłady zastosowań ''ManyToManyField'': ==== Relacja Między Użytkownikami a Grupami w Systemie ==== ''ManyToManyField'' może być używane do reprezentowania relacji między użytkownikami a grupami w systemie, gdzie jeden użytkownik może należeć do wielu grup, a jedna grupa może zawierać wielu użytkowników. from django.db import models from django.contrib.auth.models import User class Group(models.Model): name = models.CharField(max_length=255) members = models.ManyToManyField(User) ==== Relacja Między Produktami a Tagami w Sklepie Internetowym ==== ''ManyToManyField'' może być stosowane do reprezentowania relacji między produktami a tagami w sklepie internetowym, gdzie jeden produkt może mieć wiele tagów, a jeden tag może być przypisany do wielu produktów. from django.db import models class Tag(models.Model): name = models.CharField(max_length=255) class Product(models.Model): name = models.CharField(max_length=255) tags = models.ManyToManyField(Tag) ==== Relacja Między Studentami a Kursami w Systemie Edukacyjnym ==== ''ManyToManyField'' może być używane do reprezentowania relacji między studentami a kursami w systemie edukacyjnym, gdzie jeden student może uczęszczać na wiele kursów, a jeden kurs może mieć wielu studentów. from django.db import models class Course(models.Model): name = models.CharField(max_length=255) class Student(models.Model): name = models.CharField(max_length=255) courses = models.ManyToManyField(Course) Warto zauważyć, że ''ManyToManyField'' tworzy automatycznie tabelę pośredniczącą w bazie danych, aby obsłużyć tę relację wiele-do-wielu. Ta tabela przechowuje pary kluczy obcych, które łączą obiekty dwóch powiązanych modeli. W praktyce, korzystanie z ''ManyToManyField'' pozwala na elastyczne i dynamiczne zarządzanie związkami między różnymi obiektami w bazie danych.\\ \\ W relacji wiele-do-wielu (''ManyToManyField'') w Django możesz samodzielnie określić parametry tabeli pośredniczącej. Django automatycznie tworzy tę tabelę pośredniczącą, ale masz możliwość dostosowania jej zachowania i struktury, używając modelu pośredniczącego.\\ \\ Aby to zrobić, musisz utworzyć własny model dla tabeli pośredniczącej, a następnie użyć go jako wartość dla argumentu ''through'' w polu ''ManyToManyField''. Model pośredniczący powinien zawierać co najmniej dwa pola obce (''ForeignKey'') do modeli powiązanych.\\ \\ Przykład: from django.db import models from django.contrib.auth.models import User class Tag(models.Model): name = models.CharField(max_length=255) class Product(models.Model): name = models.CharField(max_length=255) tags = models.ManyToManyField(Tag, through='ProductTag') class ProductTag(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCADE) tag = models.ForeignKey(Tag, on_delete=models.CASCADE) added_at = models.DateTimeField(auto_now_add=True) W powyższym przykładzie, ''ProductTag'' to model pośredniczący, który zawiera dwa pola obce (''product'' i ''tag''). Dodatkowo, zostało dodane pole ''added_at'', które automatycznie zapisuje aktualną datę i czas dodania produktu do danego tagu.\\ \\ Następnie, model ''Product'' używa ''ManyToManyField'' z argumentem ''through='ProductTag''`, aby wskazać, że chce korzystać z własnej tabeli pośredniczącej zdefiniowanej w modelu ''ProductTag''.\\ \\ Ten sposób dostarcza większej elastyczności, jeśli chodzi o dostosowywanie relacji wiele-do-wielu w Django. Możesz dostosować strukturę tabeli pośredniczącej oraz dodawać własne pola, które są specyficzne dla relacji między danymi modelami.\\ \\ Możesz swobodnie dodawać dodatkowe pola do modelu pośredniczącego, takie jak pole określające ilość produktów. W przypadku relacji wiele-do-wielu, model pośredniczący może zawierać dowolne pola, które są potrzebne do dodatkowego opisu lub określenia relacji między modelami.\\ \\ Poniżej znajduje się przykład, w którym dodano pole ''quantity'' do modelu ''ProductTag'', które określa ilość produktów dla danego tagu: from django.db import models from django.contrib.auth.models import User class Tag(models.Model): name = models.CharField(max_length=255) class Product(models.Model): name = models.CharField(max_length=255) tags = models.ManyToManyField(Tag, through='ProductTag') class ProductTag(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCADE) tag = models.ForeignKey(Tag, on_delete=models.CASCADE) quantity = models.PositiveIntegerField(default=1) # Nowe pole określające ilość produktów added_at = models.DateTimeField(auto_now_add=True) W tym przypadku, dodano pole ''quantity'' jako ''PositiveIntegerField'' z domyślną wartością ''1''. To pole będzie przechowywać ilość produktów związanych z danym tagiem w relacji wiele-do-wielu.\\ \\ Pamiętaj, że dodanie nowego pola do modelu pośredniczącego może wpłynąć na istniejące dane w bazie danych, zwłaszcza jeśli są już utworzone rekordy w tabeli pośredniczącej. W przypadku zmiany struktury modelu pośredniczącego, być może będziesz musiał dostosować istniejące dane lub zaktualizować je zgodnie z nową strukturą.\\ \\ Jeśli tabela pośrednicząca została już automatycznie utworzona, możesz sprawdzić jej właściwości, korzystając z narzędzi zarządzania bazą danych dostępnych w Django, takich jak migracje i polecenie ''inspectdb''. Poniżej przedstawiam kroki, które możesz podjąć:\\ \\ **Użyj polecenia ''inspectdb'' do generowania modelu na podstawie bazy danych:**\\ Jeśli chcesz szybko uzyskać modele dla istniejącej bazy danych, możesz użyć polecenia ''inspectdb''. Komenda ta wygeneruje modele Django na podstawie struktury bazy danych. python manage.py inspectdb Wynikiem będzie kod Pythona, który reprezentuje modele dla istniejącej bazy danych. Możesz skopiować odpowiednie fragmenty kodu i dodać je do pliku ''models.py'' w swojej aplikacji.\\ \\ Po zastosowaniu tych kroków, będziesz mógł zobaczyć, jakie zmiany są wprowadzane do modelu pośredniczącego, a następnie dostosować go do swoich potrzeb, dodając nowe pola lub inne modyfikacje. Po dokonaniu modyfikacji, ponownie uruchom komendę ''makemigrations'' i ''migrate'', aby zastosować zmiany do bazy danych. ===== OneToOneField ===== ''OneToOneField'' w modelach Django jest używane do tworzenia relacji jeden-do-jeden pomiędzy dwoma modelami. Oznacza to, że każdy obiekt jednego modelu może być powiązany tylko z jednym obiektem drugiego modelu, i vice versa. Relacja taka jest przydatna, gdy chcesz utworzyć unikalne i szczególne powiązanie między dwoma modelami.\\ \\ Przykłady zastosowań ''OneToOneField'': ==== Relacja Między Użytkownikami a Profilem Użytkownika ==== ''OneToOneField'' może być używane do ustanawiania relacji między użytkownikami a ich profilami, gdzie każdy użytkownik ma tylko jeden profil, a każdy profil jest przypisany do jednego użytkownika. from django.db import models from django.contrib.auth.models import User class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) bio = models.TextField() profile_picture = models.ImageField(upload_to='profile_pics/') ==== Relacja Między Pracownikiem a Szefem ==== ''OneToOneField'' może być stosowane do reprezentowania relacji między pracownikiem a jego szefem, gdzie każdy pracownik ma tylko jednego szefa, a każdy szef jest przypisany do jednego pracownika. from django.db import models class Employee(models.Model): name = models.CharField(max_length=255) position = models.CharField(max_length=255) class Manager(models.Model): employee = models.OneToOneField(Employee, on_delete=models.CASCADE) department = models.CharField(max_length=255) ==== Relacja Między Zamówieniem a Fakturą ==== ''OneToOneField'' może być używane do reprezentowania relacji między zamówieniem a fakturą, gdzie każde zamówienie ma tylko jedną fakturę, a każda faktura jest przypisana do jednego zamówienia. from django.db import models class Order(models.Model): order_number = models.CharField(max_length=255) total_amount = models.DecimalField(max_digits=10, decimal_places=2) class Invoice(models.Model): order = models.OneToOneField(Order, on_delete=models.CASCADE) invoice_number = models.CharField(max_length=255) amount_paid = models.DecimalField(max_digits=10, decimal_places=2) ''OneToOneField'' jest przydatne, gdy chcesz utworzyć szczególne, unikalne powiązanie między dwoma modelami, a każdy obiekt jednego modelu powinien mieć tylko jedno przypisanie w drugim modelu.