pl:python:metawmodelach
Różnice
Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
pl:python:metawmodelach [2023/12/01 12:18] – [app_label] sindap | pl:python:metawmodelach [2023/12/08 09:06] (aktualna) – [abstract] sindap | ||
---|---|---|---|
Linia 2: | Linia 2: | ||
===== abstract ===== | ===== abstract ===== | ||
+ | |||
+ | Opcja '' | ||
+ | |||
+ | Przykład użycia '' | ||
+ | |||
+ | <code python> | ||
+ | from django.db import models | ||
+ | |||
+ | class AbstractModel(models.Model): | ||
+ | common_field = models.CharField(max_length=100) | ||
+ | |||
+ | class Meta: | ||
+ | abstract = True | ||
+ | |||
+ | class ConcreteModel(AbstractModel): | ||
+ | specific_field = models.IntegerField() | ||
+ | </ | ||
+ | |||
+ | W tym przykładzie, | ||
+ | |||
+ | Główne zastosowania '' | ||
+ | |||
+ | 1. **Współdzielenie kodu:** Modele abstrakcyjne pozwalają na zdefiniowanie wspólnej funkcjonalności i pól, które można użyć w wielu modelach. Dzięki temu można unikać powtarzania kodu. | ||
+ | |||
+ | 2. **Strukturyzacja kodu:** Działa jako narzędzie do organizacji kodu, gdy pewne właściwości lub metody są wspólne dla wielu modeli. | ||
+ | |||
+ | Pamiętaj, że modele abstrakcyjne same w sobie nie tworzą tabel w bazie danych, więc nie są bezpośrednio używane do przechowywania danych. Są jedynie punktem wyjścia do dziedziczenia dla innych modeli, które mają związaną tabelę w bazie danych. | ||
+ | |||
+ | Statystycznie najczęściej w takich modelach umieszczane są pola związane z zarządzaniem czasem, takie jak pola '' | ||
+ | |||
+ | Przykłady pól, które mogą być umieszczane w modelu abstrakcyjnym: | ||
+ | |||
+ | 1. **created_at: | ||
+ | 2. **modified_at: | ||
+ | 3. **created_by, | ||
+ | 4. **is_active: | ||
+ | 5. **description: | ||
+ | 6. **slug:** Unikalny identyfikator tekstowy, często używany w adresach URL.\\ | ||
+ | |||
+ | Poniżej przykład takiego wpisu: | ||
+ | |||
+ | <code python> | ||
+ | from django.db import models | ||
+ | from django.utils import timezone | ||
+ | |||
+ | class BaseModel(models.Model): | ||
+ | created_at = models.DateTimeField(auto_now_add=True, | ||
+ | modified_at = models.DateTimeField(auto_now=True, | ||
+ | |||
+ | class Meta: | ||
+ | abstract = True | ||
+ | |||
+ | class YourModel1(BaseModel): | ||
+ | # Twoje pola dla modelu 1 | ||
+ | |||
+ | class YourModel2(BaseModel): | ||
+ | # Twoje pola dla modelu 2 | ||
+ | </ | ||
+ | |||
+ | Ostateczny wybór pól zależy od konkretnego przypadku użycia i wymagań biznesowych. Modele abstrakcyjne są używane w celu uniknięcia powtarzalności kodu i ułatwienia zarządzania wspólnymi właściwościami między wieloma modelami. | ||
===== app_label ===== | ===== app_label ===== | ||
Linia 23: | Linia 83: | ||
Główne zastosowania '' | Główne zastosowania '' | ||
- | - **Rozstrzyganie konfliktów nazw:** | + | 1. **Rozstrzyganie konfliktów nazw:** |
- | * WypunktowanieJeśli w różnych aplikacjach masz modele o tej samej nazwie, możesz użyć '' | + | * Jeśli w różnych aplikacjach masz modele o tej samej nazwie, możesz użyć '' |
- | + | 2. **Wielokrotne zastosowanie tego samego modelu:** | |
- | - **Wielokrotne zastosowanie tego samego modelu:** | + | * W przypadku, gdy ten sam model jest używany w ramach wielu aplikacji, '' |
- | * WypunktowanieW | + | |
W większości przypadków, | W większości przypadków, |
pl/python/metawmodelach.1701429539.txt.gz · ostatnio zmienione: 2023/12/01 12:18 przez sindap