Django
Odniesienie do pola modelu
Szukaj…
Parametry
Parametr | Detale |
---|---|
zero | Jeśli true, puste wartości mogą być przechowywane w bazie danych jako null |
pusty | Jeśli to prawda, to pole nie będzie wymagane w formularzach. Jeśli pola pozostaną puste, Django użyje domyślnej wartości pola. |
wybory | Iterowalna 2-elementowa iteracja, która ma być używana jako wybór dla tego pola. Jeśli ustawione, pole jest renderowane jako administrator w menu rozwijanym. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Aby pogrupować opcje, po prostu zagnieżdż wartości: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Domyślnie django używa nazwy pola dla kolumny bazy danych. Użyj tego, aby podać niestandardową nazwę |
db_index | W przypadku wartości True w tym polu w bazie danych zostanie utworzony indeks |
db_tablespace | Obszar tabel używany dla indeksu tego pola. To pole jest używane tylko wtedy, gdy silnik bazy danych je obsługuje, w przeciwnym razie zostanie zignorowane . |
domyślna | Wartość domyślna dla tego pola. Może być wartością lub obiektem na żądanie. W przypadku zmiennych domyślnych (lista, zestaw, słownik) należy użyć funkcji wywoływania. Ze względu na zgodność z migracjami nie można używać lambd. |
edytowalne | Jeśli ma wartość False , pole nie jest pokazywane w modelu administracyjnym ani żadnym ModelForm . Domyślna wartość to True . |
komunikaty o błędach | Służy do dostosowywania domyślnych komunikatów o błędach wyświetlanych dla tego pola. Wartością jest słownik, w którym klucze reprezentują błąd, a wartością jest komunikat. Domyślne przyciski (komunikaty o błędach) jest null , blank , invalid , invalid_choice , unique i unique_for_date ; dodatkowe komunikaty o błędach mogą być zdefiniowane przez pola niestandardowe. |
Tekst pomocy | Tekst wyświetlany z polem, aby pomóc użytkownikom. HTML jest dozwolony. |
on_delete | Po usunięciu obiektu, do którego odwołuje się ForeignKey, Django będzie emulować zachowanie ograniczenia SQL określonego przez argument on_delete. Jest to drugi argument pozycyjny dla pól ForeignKey i OneToOneField . Inne pola nie mają tego argumentu. |
klucz podstawowy | Jeśli True , to pole będzie kluczem podstawowym. Django automatycznie dodaje klucz podstawowy; jest to wymagane tylko wtedy, gdy chcesz utworzyć niestandardowy klucz podstawowy. Możesz mieć tylko jeden klucz podstawowy na model. |
wyjątkowy | Jeśli ma wartość True , błędy są zgłaszane, jeśli dla tego pola zostaną wprowadzone zduplikowane wartości. Jest to ograniczenie na poziomie bazy danych, a nie tylko blok interfejsu użytkownika. |
unikatowa_data | Ustaw wartość na DateField lub DateTimeField , a błędy będą zgłaszane, jeśli będą zduplikowane wartości dla tej samej daty lub godziny . |
Unique_for_month | Podobnie jak w przypadku unique_for_date , z tym że czeki są ograniczone w danym miesiącu. |
niepowtarzalny_do_roku | Podobnie jak w przypadku unique_for_date , z tym że czeki są ograniczone do roku. |
pełna nazwa | Przyjazna nazwa pola, używana przez django w różnych miejscach (np. Tworzenie etykiet w formularzach administratora i modelu). |
walidatory | Lista walidatorów dla tego pola. |
Uwagi
- Możesz napisać własne pola, jeśli uznasz to za konieczne
- Możesz zastąpić funkcje klasy modelu podstawowego, najczęściej funkcję
save()
Pola liczbowe
Podano przykłady pól numerycznych:
AutoField
Automatycznie zwiększająca się liczba całkowita stosowana zwykle do kluczy podstawowych.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Każdy model domyślnie otrzymuje pole klucza podstawowego (zwane
id
). Dlatego nie jest konieczne duplikowanie pola identyfikatora w modelu dla celów klucza podstawowego.
BigIntegerField
Liczbą całkowitą dopasowanie liczby od -9223372036854775808
do 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
IntegerField
Pole IntegerField służy do przechowywania wartości całkowitych od -2147483648 do 2147483647 ( 4 Bytes
).
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
parametr
default
nie jest obowiązkowy. Ale warto ustawić wartość domyślną.
PositiveIntegerField
Podobnie jak IntegerField, ale musi być dodatni lub zerowy (0). PositiveIntegerField służy do przechowywania wartości całkowitych od 0 do 2147483647 ( 4 Bytes
). Może to być przydatne w polu, które powinno być semantycznie dodatnie. Na przykład, jeśli rejestrujesz żywność z jej kaloriami, nie powinna być ujemna. To pole zapobiegnie ujemnym wartościom poprzez swoje walidacje.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
parametr
default
nie jest obowiązkowy. Ale warto ustawić wartość domyślną.
SmallIntegerField
SmallIntegerField służy do przechowywania wartości całkowitych od -32768 do 32767 ( 2 Bytes
). To pole jest przydatne, gdy wartości nie są skrajnościami.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
SmallIntegerField służy do przechowywania wartości całkowitych od 0 do 32767 ( 2 Bytes
). Podobnie jak SmallIntegerField, to pole jest przydatne w przypadku wartości, które nie są tak wysokie i powinny być semantycznie dodatnie. Na przykład może przechowywać wiek, który nie może być ujemny.
from django.db import models
class Staff(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
age = models.PositiveSmallIntegerField(null=True)
Oprócz PositiveSmallIntegerField jest przydatny do wyboru, jest to sposób implementacji Enum w Djangoic:
from django.db import models
from django.utils.translation import gettext as _
APPLICATION_NEW = 1
APPLICATION_RECEIVED = 2
APPLICATION_APPROVED = 3
APPLICATION_REJECTED = 4
APLICATION_CHOICES = (
(APPLICATION_NEW, _('New')),
(APPLICATION_RECEIVED, _('Received')),
(APPLICATION_APPROVED, _('Approved')),
(APPLICATION_REJECTED, _('Rejected')),
)
class JobApplication(models.Model):
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
status = models.PositiveSmallIntegerField(
choices=APLICATION_CHOICES,
default=APPLICATION_NEW
)
...
Dobrym sposobem na ich wykorzystanie jest zdefiniowanie wyborów jako zmiennych klas lub zmiennych modułów w zależności od sytuacji. Jeśli opcje zostaną przekazane do pola bez przyjaznych nazw, spowoduje to zamieszanie.
DecimalField
Liczba dziesiętna o stałej precyzji, reprezentowana w Pythonie przez instancję dziesiętną. W przeciwieństwie do IntegerField i jego pochodnych, w tym polu znajdują się 2 wymagane argumenty:
- DecimalField.max_digits : Maksymalna dozwolona liczba cyfr w liczbie. Zauważ, że liczba ta musi być większa lub równa dziesiętnym.
- DecimalField.decimal_places : liczba miejsc dziesiętnych do przechowywania wraz z liczbą.
Jeśli chcesz przechowywać liczby do 99 z 3 miejscami po przecinku, musisz użyć max_digits=5
i decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
BinaryField
Jest to wyspecjalizowana dziedzina służąca do przechowywania danych binarnych. Akceptuje tylko bajty . Dane są serializowane base64 podczas przechowywania.
Ponieważ są to dane binarne, tego pola nie można użyć w filtrze.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
CharField
CharField służy do przechowywania określonych długości tekstu. W poniższym przykładzie w polu można zapisać do 128 znaków tekstu. Wprowadzenie dłuższego ciągu spowoduje zgłoszenie błędu sprawdzania poprawności.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField służy do przechowywania wartości daty i godziny.
class MyModel(models.Model):
start_time = models.DateFimeField(null=True, blank=True)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
DateTimeField
ma dwa opcjonalne parametry:
auto_now_add
ustawia wartość pola na bieżącąauto_now_add
kiedy obiekt jest tworzony.auto_now
ustawia wartość pola na bieżącą datę za każdym razem, gdy pole jest zapisywane.
Te opcje i parametr default
wykluczają się wzajemnie.
ForeignKey
Pole ForeignKey służy do tworzenia relacji „ many-to-one
między modelami. Nie tak, jak większość innych pól wymaga argumentów pozycyjnych. Poniższy przykład pokazuje relację samochodu i właściciela:
from django.db import models
class Person(models.Model):
GENDER_FEMALE = 'F'
GENDER_MALE = 'M'
GENDER_CHOICES = (
(GENDER_FEMALE, 'Female'),
(GENDER_MALE, 'Male'),
)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
age = models.SmallIntegerField()
class Car(model.Model)
owner = models.ForeignKey('Person')
plate = models.CharField(max_length=15)
brand = models.CharField(max_length=50)
model = models.CharField(max_length=50)
color = models.CharField(max_length=50)
Pierwszym argumentem pola jest klasa, z którą powiązany jest model. Drugi argument pozycyjny to argument on_delete
. W bieżących wersjach ten argument nie jest wymagany, ale będzie wymagany w Django 2.0. Domyślna funkcjonalność argumentu jest pokazana następująco:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Spowoduje to usunięcie obiektów Car z modelu, gdy jego właściciel usunie z modelu Person. To jest domyślna funkcjonalność.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Zapobiegnie to usunięciu obiektów Person, jeśli są one powiązane z co najmniej jednym obiektem Car. Wszystkie obiekty Car, które odwołują się do obiektu Person, należy najpierw usunąć. Następnie obiekt osoby można usunąć.