Django
Riferimento del campo del modello
Ricerca…
Parametri
Parametro | Dettagli |
---|---|
nullo | Se vero, i valori vuoti possono essere memorizzati come null nel database |
vuoto | Se è vero, il campo non sarà richiesto nei moduli. Se i campi vengono lasciati vuoti, Django utilizzerà il valore di campo predefinito. |
scelte | Un iterable di iterables a 2 elementi da utilizzare come scelte per questo campo. Se impostato, il campo viene visualizzato come un elenco a discesa nell'amministratore. [('m', 'Male'),('f','Female'),('z','Prefer Not to Disclose')] . Per raggruppare le opzioni, annidare semplicemente i valori: [('Video Source',((1,'YouTube'),(2,'Facebook')),('Audio Source',((3, 'Soundcloud'),(4, 'Spotify'))] |
db_column | Per impostazione predefinita, django utilizza il nome del campo per la colonna del database. Usalo per fornire un nome personalizzato |
db_index | Se True , verrà creato un indice su questo campo nel database |
db_tablespace | Lo spazio tabella da utilizzare per l'indice di questo campo. Questo campo viene utilizzato solo se il motore del database lo supporta, altrimenti viene ignorato . |
predefinito | Il valore predefinito per questo campo. Può essere un valore o un oggetto callable. Per i valori predefiniti mutabili (una lista, un set, un dizionario) devi usare un callable. A causa della compatibilità con le migrazioni, non è possibile utilizzare lambda. |
modificabile | Se False , il campo non viene mostrato ModelForm del modello o in ModelForm . L'impostazione predefinita è True . |
messaggio di errore | Utilizzato per personalizzare i messaggi di errore predefiniti visualizzati per questo campo. Il valore è un dizionario, con le chiavi che rappresentano l'errore e il valore è il messaggio. Le chiavi predefinite (per i messaggi di errore) sono null , blank , invalid , invalid_choice , unique e unique_for_date ; ulteriori messaggi di errore possono essere definiti da campi personalizzati. |
Testo guida | Testo da visualizzare con il campo, per assistere gli utenti. HTML è permesso. |
on_delete | Quando viene eliminato un oggetto a cui fa riferimento un ForeignKey, Django emula il comportamento del vincolo SQL specificato dall'argomento on_delete. Questo è il secondo argomento posizionale per i campi ForeignKey e OneToOneField . Altri campi non hanno questo argomento. |
chiave primaria | Se True , questo campo sarà la chiave primaria. Django aggiunge automaticamente una chiave primaria; quindi questo è richiesto solo se si desidera creare una chiave primaria personalizzata. Puoi avere solo una chiave primaria per modello. |
unico | Se True , gli errori vengono generati se vengono immessi valori duplicati per questo campo. Questa è una restrizione a livello di database e non semplicemente un blocco dell'interfaccia utente. |
unique_for_date | Impostare il valore su DateField o DateTimeField e gli errori verranno DateField se vi sono valori duplicati per la stessa data o la stessa data . |
unique_for_month | Simile a unique_for_date , tranne che i controlli sono limitati per il mese. |
unique_for_year | Simile a unique_for_date , tranne che i controlli sono limitati all'anno. |
verbose_name | Un nome descrittivo per il campo, utilizzato da Django in vari luoghi (come la creazione di etichette nei moduli di amministrazione e di modello). |
validatori | Un elenco di validatori per questo campo. |
Osservazioni
- Puoi scrivere i tuoi campi se lo ritieni necessario
- È possibile sovrascrivere le funzioni della classe del modello di base, più comunemente la funzione
save()
Campi numerici
Esempi di campi numerici sono dati:
AutoField
Un numero intero a incremento automatico generalmente utilizzato per le chiavi primarie.
from django.db import models
class MyModel(models.Model):
pk = models.AutoField()
Per impostazione predefinita, ogni modello riceve un campo chiave primaria (chiamato
id
). Pertanto, non è necessario duplicare un campo id nel modello ai fini di una chiave primaria.
BigIntegerField
Un numero intero con numeri da -9223372036854775808
a 9223372036854775807
( 8 Bytes
).
from django.db import models
class MyModel(models.Model):
number_of_seconds = models.BigIntegerField()
IntegerField
IntegerField viene utilizzato per memorizzare valori interi da -2147483648 a 2147483647 ( 4 Bytes
).
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.IntegerField(default=0)
default
parametrodefault
non è obbligatorio. Ma è utile impostare un valore predefinito.
PositiveIntegerField
Come un campo intero, ma deve essere positivo o uguale a zero (0). Il campo PositiveInteger viene utilizzato per memorizzare valori interi da 0 a 2147483647 ( 4 Bytes
). Questo può essere utile in campo che dovrebbe essere semanticamente positivo. Ad esempio se stai registrando cibi con le sue calorie, non dovrebbe essere negativo. Questo campo impedisce i valori negativi tramite le sue convalide.
from django.db import models
class Food(models.Model):
name = models.CharField(max_length=255)
calorie = models.PositiveIntegerField(default=0)
default
parametrodefault
non è obbligatorio. Ma è utile impostare un valore predefinito.
SmallIntegerField
SmallIntegerField viene utilizzato per memorizzare valori interi da -32768 a 32767 ( 2 Bytes
). Questo campo è utile per valori non non estremi.
from django.db import models
class Place(models.Model):
name = models.CharField(max_length=255)
temperature = models.SmallIntegerField(null=True)
PositiveSmallIntegerField
SmallIntegerField viene utilizzato per memorizzare valori interi da 0 a 32767 ( 2 Bytes
). Proprio come SmallIntegerField questo campo è utile per valori che non vanno così alti e dovrebbero essere semanticamente positivi. Ad esempio, può memorizzare l'età che non può essere negativa.
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)
Oltre a PositiveSmallIntegerField è utile per le scelte, questo è il modo Djangoic di implementare Enum:
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
)
...
La definizione delle scelte come variabili di classe o variabili del modulo in base alla situazione è un buon modo per usarle. Se le scelte sono passate al campo senza nomi amiche di quanto creerà confusione.
DecimalField
Un numero decimale a precisione fissa, rappresentato in Python da un'istanza decimale. A differenza di IntegerField e dei suoi derivati questo campo ha 2 argomenti richiesti:
- DecimalField.max_digits : il numero massimo di cifre consentito nel numero. Si noti che questo numero deve essere maggiore o uguale a decimal_places.
- DecimalField.decimal_places : il numero di posizioni decimali da memorizzare con il numero.
Se si desidera memorizzare numeri fino a 99 con 3 posizioni decimali, è necessario utilizzare max_digits=5
e decimal_places=3
:
class Place(models.Model):
name = models.CharField(max_length=255)
atmospheric_pressure = models.DecimalField(max_digits=5, decimal_places=3)
BinaryField
Questo è un campo specializzato, usato per memorizzare dati binari. Accetta solo byte . I dati sono serializzati in base64 su storage.
Poiché si stanno memorizzando dati binari, questo campo non può essere utilizzato in un filtro.
from django.db import models
class MyModel(models.Model):
my_binary_data = models.BinaryField()
CharField
Il CharField viene utilizzato per memorizzare lunghezze di testo definite. Nell'esempio seguente possono essere memorizzati fino a 128 caratteri di testo nel campo. L'inserimento di una stringa più lunga comporterà l'innalzamento di un errore di convalida.
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=128, blank=True)
DateTimeField
DateTimeField viene utilizzato per memorizzare i valori di data e ora.
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)
Un DateTimeField
ha due parametri facoltativi:
auto_now_add
imposta il valore del campo sul datetime corrente al momento della creazione dell'oggetto.auto_now
imposta il valore del campo sul datetime corrente ogni volta che viene salvato il campo.
Queste opzioni e il parametro default
si escludono a vicenda.
ForeignKey
Il campo ForeignKey viene utilizzato per creare una relazione many-to-one
tra i modelli. Non come la maggior parte degli altri campi richiede argomenti posizionali. L'esempio seguente dimostra la relazione tra auto e proprietario:
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)
Il primo argomento del campo è la classe a cui è correlato il modello. Il secondo argomento posizionale è on_delete
argomento on_delete
. Nelle versioni attuali questo argomento non è richiesto, ma sarà richiesto in Django 2.0. La funzionalità predefinita dell'argomento è mostrata come segue:
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.CASCADE)
...
Ciò causerà l'eliminazione degli oggetti Car dal modello quando il relativo proprietario viene eliminato dal modello Persona. Questa è la funzionalità predefinita.
class Car(model.Model)
owner = models.ForeignKey('Person', on_delete=models.PROTECT)
...
Ciò impedirà l'eliminazione degli oggetti Person se sono collegati ad almeno un oggetto Car. Tutti gli oggetti Car che fanno riferimento a un oggetto Persona devono essere prima eliminati. E poi l'oggetto Persona può essere cancellato.