Model

Déclarer un modèle

Clé primaire par défaut


Options des champs

verbose_name

help_text

null

blank

choices

unique

error_messages

validators

editable

auto_now

auto_now_add

default

primary_key

db_column

db_index


Champs simples

Outre les options, le type de champ utilisé va permettre de convertir les valeurs de la BDD en valeurs Python et inversemment

Date

Text

Boolean

Integer

Float

Champs spéciaux

UUID

IP

Array

JSON

File

Binary


Relations

Relation 1-n

Relation n-n

1-1

Options des relations

on_delete

L’attribut on_delete définit ce que la relation devient quand on supprime l’entité qu’elle référence

to

Il y a différentes manière de déclarer le modèle cible:

  1. passer directement passer la classe
  from lib.patient.models import Patient

  class AIDecision(models.Model):

    patient = models.ForeignKey(
        Patient,
        on_delete=models.PROTECT,
        editable=False,
    )
  1. passer son nom — ce qui évite ainsi d’importer la classe et d’avoir un import circulaire
  class PatientACL(models.Model):

      patient = models.ForeignKey(
          'patient',
          on_delete=models.CASCADE,
          blank=True,
          null=True,
      )

Si le modèle est dans un module différent, alors il faut préfixer le nom du modèle par le label du module dans lequel il se situe

``` python
class AIDecision(models.Model):

  patient = models.ForeignKey(
      'patient.Patient',
      on_delete=models.PROTECT,
      editable=False,
  )
```
``` python
from django.apps import AppConfig


class LibPatientConfig(AppConfig):
    """
    Handles everything about patients
    """
    name = 'lib.patient'
    label = 'patient'
```

reverse

through

Pour aller plus loin: limit_choices_to