Données initiales pour les modèles

It’s sometimes useful to prepopulate your database with hard-coded data when you’re first setting up an app. You can provide initial data with migrations or fixtures.

Données initiales par les migrations

Si vous souhaitez 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.

You can load data by calling manage.py loaddata <fixturename>, where <fixturename> is the name of the fixture file you’ve created. Each time you run loaddata, the data will be read from the fixture and reloaded into the database. Note this means that if you change one of the rows created by a fixture and then run loaddata again, you’ll wipe out any changes you’ve made.

Emplacements de recherche des instantanés

Par défaut, Django recherche des instantanés dans un répertoire fixtures pour chaque application. Vous pouvez définir le réglage FIXTURE_DIRS à une liste de répertoires supplémentaires dans lesquels Django doit chercher.

Quand vous lancez manage.py loaddata, vous pouvez aussi indiquer un chemin vers un fichier d’instantané, ce qui remplace la recherche dans les répertoires habituels.

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.

Back to Top