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.