00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

Campi dei Modelli

I campi dei modelli definiscono il tipo di dato che ogni colonna della tabella del database puo contenere. Django offre una vasta gamma di campi predefiniti, ognuno con opzioni specifiche.

Campi di Testo

from django.db import models

class Profilo(models.Model):
    # Stringa con lunghezza massima (obbligatorio specificare max_length)
    nome = models.CharField(max_length=100)

    # Testo lungo senza limite di lunghezza
    biografia = models.TextField(blank=True)

    # Email con validazione automatica
    email = models.EmailField(max_length=254)

    # URL con validazione
    sito_web = models.URLField(blank=True)

    # Slug per URL leggibili (lettere, numeri, trattini)
    slug = models.SlugField(max_length=200, unique=True)

Campi Numerici

class Prodotto(models.Model):
    # Numero intero
    quantita = models.IntegerField(default=0)

    # Intero positivo
    visualizzazioni = models.PositiveIntegerField(default=0)

    # Numero decimale a virgola mobile
    peso = models.FloatField(null=True, blank=True)

    # Numero decimale preciso (ideale per prezzi)
    prezzo = models.DecimalField(max_digits=10, decimal_places=2)

    # Intero grande
    codice_fiscale_numerico = models.BigIntegerField(unique=True)

    # Intero piccolo
    valutazione = models.SmallIntegerField(default=0)

Campi Booleani

class Utente(models.Model):
    # Booleano (True/False)
    attivo = models.BooleanField(default=True)

    # Booleano che ammette anche NULL
    verificato = models.BooleanField(null=True, default=None)

Campi Data e Ora

class Evento(models.Model):
    # Solo data
    data_evento = models.DateField()

    # Data e ora
    inizio = models.DateTimeField()

    # Solo ora
    orario = models.TimeField()

    # Durata temporale
    durata = models.DurationField()

    # Data di creazione automatica (impostata solo al momento della creazione)
    creato_il = models.DateTimeField(auto_now_add=True)

    # Data di aggiornamento automatica (aggiornata a ogni save)
    aggiornato_il = models.DateTimeField(auto_now=True)

Campi File e Immagine

class Documento(models.Model):
    # Upload di file generico
    allegato = models.FileField(upload_to='documenti/%Y/%m/')

    # Upload di immagini (richiede Pillow)
    foto = models.ImageField(upload_to='foto/', blank=True)

Il parametro upload_to definisce la sottocartella all’interno di MEDIA_ROOT dove verranno salvati i file.

Campi Speciali

import uuid

class Risorsa(models.Model):
    # UUID come identificatore unico
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)

    # Campo JSON per dati strutturati (Django 5.x, supportato su tutti i database)
    metadati = models.JSONField(default=dict, blank=True)

    # Indirizzo IP
    ip_address = models.GenericIPAddressField(null=True, blank=True)

Opzioni Comuni dei Campi

Ogni campo accetta opzioni che ne configurano il comportamento:

class Articolo(models.Model):
    # null=True: ammette NULL nel database
    sottotitolo = models.CharField(max_length=200, null=True, blank=True)

    # blank=True: ammette valore vuoto nei form
    descrizione = models.TextField(blank=True)

    # default: valore predefinito
    pubblicato = models.BooleanField(default=False)

    # unique=True: il valore deve essere unico nella tabella
    slug = models.SlugField(unique=True)

    # choices: limita i valori ammessi
    STATO_CHOICES = [
        ('bozza', 'Bozza'),
        ('pubblicato', 'Pubblicato'),
        ('archiviato', 'Archiviato'),
    ]
    stato = models.CharField(max_length=20, choices=STATO_CHOICES, default='bozza')

    # help_text: testo di aiuto nei form
    titolo = models.CharField(max_length=200, help_text='Inserisci il titolo.')

    # verbose_name: etichetta leggibile
    data_pub = models.DateField(verbose_name='Data di pubblicazione')

    # db_index=True: crea un indice nel database
    codice = models.CharField(max_length=50, db_index=True)

    # editable=False: il campo non appare nei form
    uuid = models.UUIDField(default=uuid.uuid4, editable=False)

    # primary_key=True: usa questo campo come chiave primaria
    codice_id = models.CharField(max_length=20, primary_key=True)

Choices con Enumerazioni (Django 5.x)

A partire da Django 3.0, puoi usare classi di enumerazione per le choices:

class Articolo(models.Model):
    class Stato(models.TextChoices):
        BOZZA = 'bozza', 'Bozza'
        PUBBLICATO = 'pub', 'Pubblicato'
        ARCHIVIATO = 'arch', 'Archiviato'

    stato = models.CharField(
        max_length=5,
        choices=Stato.choices,
        default=Stato.BOZZA,
    )
# Utilizzo
articolo = Articolo.objects.get(pk=1)
if articolo.stato == Articolo.Stato.PUBBLICATO:
    print('Articolo pubblicato')

Conclusione

Django offre un campo per ogni tipo di dato comune. Comprendere le opzioni disponibili come null, blank, default, unique e choices ti permette di definire modelli precisi e ben validati. Scegliere il campo giusto e le opzioni corrette e essenziale per la solidita del tuo schema dati.