2012-03-10 13 views
8

Mam plik w formacie JSON, z taką strukturą:Importuj plik json do modelu Django

{ 
    "Admiralty Islands": [ 
     [ 
      "Up to 1 kg", 
      "5.00" 
     ], 
     [ 
      "1 - 10 kg", 
      "10.00" 
     ], 
    ], 
    "Afghanistan": [ 
     [ 
      "Up to 1 kg", 
      "15.00" 
     ], 
     [ 
      "1 - 10 kg", 
      "20.00" 
     ], 
    ], 
... 
} 

a trzy modele:

class Country(models.Model): 
    name = models.CharField(max_length=128, unique=True) 

class Weight(models.Model): 
    name = models.CharField(max_length=128, unique=True) 
    min_weight = models.IntegerField() 
    max_weight = models.IntegerField() 

class Shipping(models.Model): 
    country = models.ForeignKey(Country) 
    weight = models.ForeignKey(Weight) 
    price = models.DecimalField(max_digits=7, decimal_places=2) 

Jaki jest najbardziej poprawny sposób importować do baza danych przy użyciu pliku json?

Czy należy przekonwertować plik json na plik urządzenia? Ale co zrobić z relacjami między tabelami? Albo lepiej jest napisać view jak:

f = open('file.json', 'r') 
obj = simplejson.load(f) 

for o in obj: 
    record = Country(name = o) 
    record.save() 

ale też nie może dowiedzieć się, jak sprawić, by stosunki między models.

A może jest łatwiejszy sposób?

Dzięki.

Odpowiedz

3

Nie widzę bardzo jasnej struktury w twoim jsonie w tym sensie, że nie jest ona jednoznacznie zdefiniowana gdzie pole powinno iść do jakiego modelu i jak wszystko jest powiązane. Polecam więc tylko zrobić skrypt importu, w którym ręcznie przechodzę przez wszystkie json i tworzę odpowiednie instancje modelu.

Dobrym przykładem, moim zdaniem dobrze zorganizowanego jsona, jest wynik serializacji Django. Możesz spojrzeć na to here.

2

Dobrze danych w json być wypełniona do bazy danych:

  • Musisz map pól danych z json do bazy danych.

  • Najlepszym i preferowanym lub raczej zaprojektowanym sposobem wykonania tej czynności jest użycie uchwytów.

  • Do odwzorowania Serializacja Django jest drogą do GO.

10

Zastosowanie manage.py importowania urządzeń:

python manage.py loaddata fixture.json