# Documentation Django 6.0.7

# Données initiales pour les modèles

Il est parfois utile de pré-remplir la base de données avec des données fixes au moment de la première configuration d’une application. Vous pouvez fournir des données initiales au moyen de migrations ou d’instantanés.

## Données initiales par les migrations

Pour charger automatiquement des données initiales pour une application, créez une migration de données. Les migrations sont exécutées lors de la mise en place de la base de données, les données y seront donc disponibles, sujettes à certaines restrictions.

## Ajout de données par des instantanés

Il est aussi possible de fournir des données à l’aide d”instantanés. Cependant, ces données ne sont pas chargées automatiquement, sauf si vous utilisez `TransactionTestCase.fixtures`.

Un instantané (fixture en anglais) est un ensemble de données que Django peut importer dans une base de données. La façon la plus directe de créer un instantané si vous avez déjà les données dans votre base est d’utiliser la commande `manage.py dumpdata`. Sinon, vous pouvez aussi créer des instantanés manuellement ; ils peuvent être écrits sous forme de documents JSON, XML ou YAML (si PyYAML est installée). La documentation sur la sérialisation contient plus de détails sur chacun de ces formats de sérialisation.

Comme exemple, voici à quoi pourrait ressembler un instantané pour un modèle `Person` en JSON :

    [
      {
        "model": "myapp.person",
        "pk": 1,
        "fields": {
          "first_name": "John",
          "last_name": "Lennon"
        }
      },
      {
        "model": "myapp.person",
        "pk": 2,
        "fields": {
          "first_name": "Paul",
          "last_name": "McCartney"
        }
      }
    ]

Et voici le même instantané en YAML :

    - model: myapp.person
      pk: 1
      fields:
        first_name: John
        last_name: Lennon
    - model: myapp.person
      pk: 2
      fields:
        first_name: Paul
        last_name: McCartney

Ces données doivent se trouver dans un répertoire `fixtures` à l’intérieur de votre application.

Il est possible de charger des données en appelant `manage.py loaddata` `<nom_instantané>`, où `<nom_instantané>` est le nom du fichier instantané que vous avez créé. Lors de chaque lancement de `loaddata`, les données de l’instantané sont lues et rechargées dans la base de données. Notez que cela signifie que si vous modifiez l’un des objets créés par l’instantané et que vous relancez `loaddata`, vous écraserez toute modification effectuée en base de données.

### Indiquer à Django les emplacements des fichiers d’instantanés

Par défaut, Django recherche les instantanés dans le répertoire `fixtures` de chaque application. Ainsi, la commande `loaddata sample` trouvera le fichier `mon_app/fixtures/sample.json`. Cela fonctionne aussi avec les chemins relatifs, ainsi `loaddata mon_app/sample` trouvera aussi `mon_app/fixtures/mon_app/sample.json`.

Django recherche aussi les instantanés dans la liste des répertoires indiqués dans le réglage `FIXTURE_DIRS`.

Pour empêcher totalement la recherche par défaut, utilisez un chemin absolu pour indiquer l’emplacement du fichier d’instantané, par ex. `loaddata /chemin/vers/fichier`.

Fichiers d’instantanés et espaces de noms

Django utilise le premier fichier d’instantané qu’il trouve avec le nom correspondant, ce qui implique que si vous avez plusieurs fichiers d’instantanés ayant le même nom dans différentes applications, vous ne pourrez pas les distinguer dans vos commandes `loaddata`. La manière la plus simple d’éviter ce problème est de placer vos fichiers dans des espaces de noms, c’est-à-dire de les placer dans un répertoire nommé d’après le nom de l’application, comme dans l’exemple du chemin relatif ci-dessus.

Voir aussi

Les instantanés sont aussi employés par l’infrastructure de test pour aider à la préparation d’environnements de tests cohérents.