Le champ des modèles Django

Les champs des modèles sont définis dans le module suivant: django.db.models.fields

Il est donc possible de voir tous les champs existants en exécutant la commande help(django.db.models.fields)

AutoField              → incrémente automatiquement sa valeur
BinaryField            → stocke des données binaires brutes en octets (bytes)
BooleanField           → un champ True / False
CharField              → un champ pour une chaine de caractères assez courte
TextField              → pour du texte long
CommaSeparatedIntegerField → entiers séparés par un virgule
EmailField             → vérifie une valeur d'adresse valide
SlugField              → format slug (alphanumérique + tirets)
URLField               → format URL
DateField              → une date, instance de datetime.date en python
DateTimeField          → une date et une heure, instance python de datetime.datetime
DecimalField           → un nombre décimal de taille fixe, instance python de Decimal
FileField              → un champ de fichier à téléverser (paramètre upload_to est obligatoire)
ImageField             → idem que FileField mais vérifie qu'il s'agit d'une image
FilePathField          → un path de fichier (paramètre path est obligatoire)
FloatField             → une instance de float en python
GenericIPAddressField  → une adresse ip valide IPV4 / IPV6
IPAddressField         → une adresse ip textuel type 192.168.0.1
IntegerField           → valeurs comprises entre -2147483648 à 2147483647 
BigIntegerField        → Un entier 64 bits
PositiveIntegerField   → valeurs comprises entre 0 et 2147483647 
PositiveSmallIntegerField → valeurs comprises entre 0 et 32767
SmallIntegerField      → valeurs comprises entre -32768 et 32767 
NullBooleanField       → un champ booléen qui accepte le Null
TimeField              → format heure instance de datetime.time

Il existe des champs qui lient les tables entre elles. Ces champs sont définis dans django.db.models

ForeignKey       → relation plusieurs-à-un
ManyToManyField  → relation plusieurs-à-plusieurs 
OneToOneField    → relation un-à-un 

Paramètres pour les champs

------------ paramètres communs -------------------------------

db_column         → nom de la colonne dans la base de données
db_index          → créer un index pour la colonne
default           → la valeur par défaut du champ
editable          → Si False le champ n'est pas éditable dans admin
help_text         → texte d'aide affiché dans le formulaire
primary_key       → si True devient la clé primaire
unique            → si True impossible d'avoir des doublons de valeur
verbose_name      → un nom plus explicite
validators        → une liste de validateurs à exécuter

------------ paramètres spécifiques ---------------------------

primary_key       → renseigner la clé primaire
blank             → autoriser la soumission d'un champ vide
null              → autoriser d'enregistrer en base une valeur nulle 
unique_for_date   → unique pour une date 
unique_for_month  → unique pour un mois 
unique_for_year   → unique pour un an 
choices           → choix possibles 

Exemples d'utilisation

backoffice/models.py

class Product(models.Model): 
    name       = models.CharField(max_length=100)
    code       = models.CharField(max_length=10, null=True, blank=True, unique=True)
    price_ht   = models.DecimalField(max_digits=8, decimal_places=2, verbose_name="Prix unitaire HT")
    price_ttc  = models.DecimalField(max_digits=8, decimal_places=2, verbose_name="Prix unitaire TTC")

Les dates

Pour les dates vous pouvez importer le module timezone pour entrer des dates automatiquement

backoffice/models.py

from django.utils import timezone

class Product(models.Model):
    date_creation  =  models.DateTimeField(default=timezone.now(), blank=True, verbose_name="Date création") 

Les clés étrangères

backoffice/models.py

class ProductItem(models.Model):
    product  = models.ForeignKey('Product', verbose_name="Produit")

Le champ Many-To-Many

backoffice/models.py

class ProductItem(models.Model):
    attributes  = models.ManyToManyField("ProductAttributeValue", related_name="product_item")

Conseils de lecture:
Documentation sur les champs: djangoproject.com