Hur man tillhandahåller initiala data för modeller¶
Ibland är det bra att fylla på databasen med hårdkodade data när du först konfigurerar en app. Du kan tillhandahålla initiala data med migreringar eller fixturer.
Tillhandahålla initiala data med migreringar¶
För att automatiskt ladda initiala data för en app, skapa en datamigrering. Migreringar körs när testdatabasen konfigureras, så data kommer att finnas tillgängliga där, med förbehåll för vissa begränsningar.
Förse data med fixturer¶
Du kan också ange data med fixtures, men dessa data laddas inte automatiskt, förutom om du använder TransactionTestCase.fixtures
.
En fixtur är en samling data som Django vet hur man importerar till en databas. Det enklaste sättet att skapa en fixtur om du redan har en del data är att använda kommandot manage.py dumpdata
. Eller så kan du skriva fixturer för hand; fixturer kan skrivas som JSON-, XML- eller YAML-dokument (med PyYAML installerat). I serialization documentation finns mer information om vart och ett av dessa stödda serialization formats.
Men här är ett exempel på hur en fixtur för en Person
-modell kan se ut i 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"
}
}
]
Och här är samma fixtur som 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
Du lagrar dessa data i katalogen fixtures
i din app.
Du kan ladda data genom att anropa manage.py loaddata
<fixturename>
, där <fixturename>
är namnet på den fixturfil du har skapat. Varje gång du kör loaddata
kommer data att läsas från fixturen och laddas om till databasen. Observera att detta innebär att om du ändrar en av raderna som skapats av en fixtur och sedan kör loaddata
igen, kommer du att radera alla ändringar du har gjort.
Tala om för Django var de ska leta efter fixture-filer¶
Som standard letar Django efter fixturer i katalogen fixtures
i varje app, så kommandot loaddata sample
kommer att hitta filen my_app/fixtures/sample.json
. Detta fungerar även med relativa sökvägar, så loaddata my_app/sample
kommer att hitta filen my_app/fixtures/my_app/sample.json
.
Django letar också efter fixturer i listan över kataloger som anges i inställningen FIXTURE_DIRS
.
För att helt förhindra att standardsökning sker, använd en absolut sökväg för att ange platsen för din fixture-fil, t.ex. loaddata /path/to/sample
.
Namngivning av dina fixture-filer
Django kommer att använda den första fixturfilen som den hittar vars namn matchar, så om du har fixturfiler med samma namn i olika applikationer kommer du inte att kunna skilja mellan dem i dina loaddata
-kommandon. Det enklaste sättet att undvika det här problemet är att använda namnavstånd mellan fixturfilerna. Det vill säga genom att placera dem i en katalog som har samma namn som applikationen, som i exemplet med den relativa sökvägen ovan.
Se även
Fixturer används också av testramverket för att hjälpa till att skapa en konsekvent testmiljö.