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 11:42] – [db_table_comment] 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 ===== | ||
| + | |||
| + | Opcja '' | ||
| + | |||
| + | Przykład użycia '' | ||
| + | |||
| + | <code python> | ||
| + | from django.db import models | ||
| + | |||
| + | class MyModel(models.Model): | ||
| + | name = models.CharField(max_length=100) | ||
| + | |||
| + | class Meta: | ||
| + | app_label = ' | ||
| + | </ | ||
| + | |||
| + | W powyższym przykładzie, | ||
| + | |||
| + | Główne zastosowania '' | ||
| + | |||
| + | 1. **Rozstrzyganie konfliktów nazw:** | ||
| + | * Jeśli w różnych aplikacjach masz modele o tej samej nazwie, możesz użyć '' | ||
| + | 2. **Wielokrotne zastosowanie tego samego modelu:** | ||
| + | * W przypadku, gdy ten sam model jest używany w ramach wielu aplikacji, '' | ||
| + | |||
| + | W większości przypadków, | ||
| ===== base_manager_name ===== | ===== base_manager_name ===== | ||
| + | |||
| + | Opcja '' | ||
| + | |||
| + | Przykład użycia '' | ||
| + | |||
| + | <code python> | ||
| + | from django.db import models | ||
| + | |||
| + | class MyModel(models.Model): | ||
| + | name = models.CharField(max_length=100) | ||
| + | |||
| + | class Meta: | ||
| + | base_manager_name = ' | ||
| + | </ | ||
| + | |||
| + | W powyższym przykładzie, | ||
| + | |||
| + | Ustawianie '' | ||
| + | |||
| + | Warto jednak pamiętać, że '' | ||
| ===== db_table ===== | ===== db_table ===== | ||
| + | |||
| + | Opcja '' | ||
| + | |||
| + | Przykład użycia '' | ||
| + | |||
| + | <code python> | ||
| + | from django.db import models | ||
| + | |||
| + | class MyModel(models.Model): | ||
| + | name = models.CharField(max_length=100) | ||
| + | |||
| + | class Meta: | ||
| + | db_table = ' | ||
| + | </ | ||
| + | |||
| + | W powyższym przykładzie, | ||
| + | |||
| + | Ustawienie '' | ||
| + | |||
| + | 1. **Integracja z istniejącą bazą danych:** Jeśli używasz modelu Django do łączenia się z istniejącą już bazą danych, możesz dostosować nazwę tabeli, aby pasowała do istniejącej struktury. | ||
| + | |||
| + | 2. **Zachowanie konwencji nazewniczych: | ||
| + | |||
| + | 3. **Unikanie konfliktów z nazwami istniejących tabel:** W większych projektach, w których może być wiele modeli, które przekształcą się w tabelę, możesz chcieć uniknąć konfliktów nazw tabel, zwłaszcza jeśli modele są w różnych aplikacjach. | ||
| + | |||
| + | Warto jednak pamiętać, że zazwyczaj nie jest konieczne ustawianie '' | ||
| ===== Table names ===== | ===== Table names ===== | ||
| - | ===== db_table_comment | + | ==== db_table_comment ==== |
| Opcja '' | Opcja '' | ||
| Linia 27: | Linia 158: | ||
| </ | </ | ||
| - | W powyższym przykładzie, | + | W powyższym przykładzie, |
| Ustawianie komentarzy do tabel może być przydatne w przypadku, gdy chcesz dokumentować lub udokumentować cel danej tabeli w bazie danych. Te komentarze mogą być również używane jako pomoc dla innych osób pracujących nad projektem, zwłaszcza w przypadku większych zespołów programistycznych. | Ustawianie komentarzy do tabel może być przydatne w przypadku, gdy chcesz dokumentować lub udokumentować cel danej tabeli w bazie danych. Te komentarze mogą być również używane jako pomoc dla innych osób pracujących nad projektem, zwłaszcza w przypadku większych zespołów programistycznych. | ||
| Linia 116: | Linia 247: | ||
| Należy zauważyć, że jeśli nie używasz '' | Należy zauważyć, że jeśli nie używasz '' | ||
| + | |||
| + | ==== Różnice między base_manager_name i default_manager_name ==== | ||
| + | |||
| + | Opcje '' | ||
| + | |||
| + | 1. **base_manager_name: | ||
| + | |||
| + | Przykład użycia '' | ||
| + | |||
| + | <code python> | ||
| + | from django.db import models | ||
| + | |||
| + | class MyModel(models.Model): | ||
| + | name = models.CharField(max_length=100) | ||
| + | |||
| + | class Meta: | ||
| + | base_manager_name = ' | ||
| + | </ | ||
| + | |||
| + | W tym przypadku, '' | ||
| + | |||
| + | 2. **default_manager_name: | ||
| + | |||
| + | Przykład użycia '' | ||
| + | |||
| + | <code python> | ||
| + | from django.db import models | ||
| + | |||
| + | class MyModel(models.Model): | ||
| + | name = models.CharField(max_length=100) | ||
| + | |||
| + | class Meta: | ||
| + | default_manager_name = ' | ||
| + | </ | ||
| + | |||
| + | W tym przypadku, '' | ||
| + | |||
| + | Podsumowując, | ||
| ===== get_latest_by ===== | ===== get_latest_by ===== | ||
pl/python/metawmodelach.1701427362.txt.gz · ostatnio zmienione: przez sindap
