2012-03-10 14 views
8

Tengo un archivo en formato JSON, con una estructura de este tipo:importación de modelo de 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" 
     ], 
    ], 
... 
} 

Y unos tres modelos:

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) 

¿Cuál es la forma más correcta para importar a la base de datos usando un archivo json?

¿Debo convertir el archivo json en un archivo de dispositivo? Pero, ¿qué hacer con las relaciones entre tablas? o es mejor para escribir el view como:

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

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

Pero también no puede encontrar la manera de hacer que las relaciones entre el models.

¿O hay una manera más fácil?

Gracias.

Respuesta

3

No veo una estructura muy clara en su JSON en un sentido que no está explícitamente definida en ningún lado qué campo debe entrar en qué modelo y cómo se relaciona todo. Así que lo recomendaría solo para hacer un script de importación en el que pasar manualmente a través de todo el JSON y crear las instancias de modelo adecuadas.

Un buen ejemplo en mi opinión de json bien estructurado es el resultado de la serialización de Django. Puedes echarle un vistazo here.

2

Bueno para los datos en json a poblarse a la base de datos:

  • tendrá que asignar los campos de datos de JSON a la base de datos.

  • La mejor y la mejor o más pretendida forma de hacerlo es utilizar accesorios.

  • Para mapeo La serialización de Django es el camino para GO.

10

Uso manage.py para importar accesorios:

python manage.py loaddata fixture.json