Ecco un elenco di tutti i tipi di campo utilizzabili in un modello di Django
Un IntegerField che incrmeenta automaticamente secondo gli ID disponibili. Normalmente non c'è bisogno di utilizzarlo direttamente, in quanto un campo chiave primaria verrà automaticamente aggiunto al modello se non si specifica diversamente.
Un integer a 64-bit, simile a AutoField con la differenza che è garantito per numeri da 1 a 9223372036854775807.
Un integer a 64-bit, simile a IntegerField con la differenza che è garantito per numeri da -9223372036854775808 to 9223372036854775807. Il widget per form di default per questo campo è un TextInput.
Un campo per dati binari. Possono essere assegnati bytes, bytearray o memoryview. Di default BinaryField imposta editable a False, in questo caso non può essere incluso in un ModelForm.
BinaryField ha un argomento extra opzionale:
Binaryfield.max_length
La lunghezza massima (in caratteri) del campo. La lunghezza massima è fatta rispettare dalla validazione di Django utilizzando MaxLengthValidator.
Abusare del campo BinaryField
Nel 99% dei casi, immagazzinare file nel database è una pratica sbagliata. Questo campo non è fatto per sostituire una propria gestione dei file statici.
Un campo vero/falso.
Il form widget di default per questo campo è CheckboxInput, oppure NullBooleanSelect se null=True
Il valore di default del campo BooleanField è None quando Field.default non è definito.
Un campo per stringhe, da piccole a grandi.
Per un più grande ammontare di testo, utilizzare Textfield.
Il form widget di default per questo campo è TextInput
CharField ha un argomento obbligatorio extra:
CharField.max_length
La lunghezza massima (in caratteri) del campo.La lunghezza massima è fatta rispettare dalla validazione di Django utilizzando MaxLengthValidator.
Nota
Se si sta scrivendo un'applicazione che deve essere portabile su vari database, è necessario tenere in considerazione che alcuni database hanno delle restrizioni su max_length.
Una data, rappresentata in Python da una istanza di datetime.date. Ha alcuni argomenti extra opzionali:
DateField.auto_now
Imposta automaticamente il campo ad "adesso" ogni volta che l'oggetto viene salvato. Utile per timestamps "modificato il...". Da notare che viene utilizzata sempre la data attuale, non è un valore di default che si possa sovrascrivere.
Questo campo viene aggiornato automaticamente solo quando viene chiamata la funzione Model.save(). Il campo non è aggiornato quando si fanno update ad altri campi in altri modi, come ad esempio QuerySet.update(), ma è possibile specificare un valore custom per il campo in un update come quello.
DateField.auto_now_add
Imposta automaticamente il campo ad "adesso" quando l'oggetto è creato la prima volta. Utile per la creazione di timestamps. Da notare che viene utilizzata sempre la data attuale, non è un valore di default che si possa sovrascrivere. Quindi, se anche impostate un valore per questo campo quando create l'oggetto, il valore verrà ignorato. Se si vuole modificare questo campo, invece di auto_now_add=True utilizzate:
Il form widget di default per questo campo è TextInput. L'admin aggiunge un calendario JavaScript e una shortcut per "Oggi". Include un messaggio di errore aggiuntivo invalid_date.
Le opzioni auto:now_add, auto_now e default sono mutualmente esclusive. Qualsiasi combinazione di queste opzioni risulterà in un errore.
Nota
Come implementato al momento, impostare auto_now o auto_now_add come True farà sì che il campo abbia impostato editable=False e blank=True.
Nota
Le opzioni auto_now e auto_now_add utilizzano sempre la data nella timezone di default al momento della creazione o dell'update. Se si necessita di qualcosa di diverso, si consideri l'utilizzo di un proprio default chiamabile, o si consideri di sovrascrivere save() invece di utilizzare auto_now o auto_now_add; oppure si può utilizzare DateTimeField invece di DateField e decidere come gestire la conversione da datetime a date al momento della visualizzazione
Data e ora, rappresentata in Python da un'istanza di datetime.datetime. Ha alcuni argomenti extra come DateField.
Il form widget di default per questo campo è un TextInput singolo. L'admin utilizza due TextInput separati con JavaScript
Un numero decimale rappresentato in Python da un'istanza di Decimal. L'input viene validato utilizzando DecimalValidator.
Ha due argomenti obbligatori:
DecimalField.max_digits
Il massimo numero di cifre permesse nel numero. Da notare che questo numero deve essere più grande o uguale a deciaml_places.
DecimalField.decimal_places
Il numero di cifre decimali da permettere nel numero
Per esempio, per salvare numeri fino al 999 con una risoluzione di due decimali, si utilizzerà:
models.DecimalField(..., max_digits=5, decimal_places=2)
E per salvare numeri fino a circa un miliardo con una risoluzione di dieci decimali, si utilizzerà:
models.DecimalField(..., max_digits=19, decimal_places=10)
Il form widget di default per questo campo è NumberInput se localize è False, altrimenti è TextInput
Nota
Per ulteriori informazioni riguardo le differenze tra Floatfield e DecimalField, vedere FloatField vs. DecimalField.Fare anche attenzione alle limitazioni di SQLite per quanto riguarda i campi decimali