2015-12-31 22 views
11

Ben, aşağıda verildiği gibiDjango loaddata'da json formatı için hatalar atıyor, ancak yaml formatı için düzgün çalışıyor, Herkes bana nedenini söyleyebilir mi?

from django.db import models 

class Person(models.Model): 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=30) 

bundan sonra, .json formatta armatürleri kullanmak, ben modelleri yarattı veritabanında ilk veri almak öğrenmek için, django yeni am

[ 
    { 
     "model": "myapp.person", 
     "pk": 1, 
     "fields": { 
      "first_name": "John", 
      "last_name": "Lennon" 
     } 
    }, 
    { 
     "model": "myapp.person", 
     "pk": 2, 
     "fields": { 
      "first_name": "Paul", 
      "last_name": "McCartney" 
     } 
    } 
] 

Bu LoadData

File "C:\Python27\lib\site-packages\django\core\serializers\python.py", line 96, in Deserializer 

Model = _get_model(d["model"]) 

django.core.serializers.base.DeserializationError: Problem installing fixture 'I:\DJANGO\library\myapp\fixtures 
\bookdata.json': string indices must be integers 

hatayı atar Ama YAML formatında fikstür kullandığınızda, aşağıda verildiği gibi

- model: myapp.person 
    pk: 1 
    fields: 
    first_name: John 
    last_name: Lennon 
- model: myapp.person 
    pk: 2 
    fields: 
    first_name: Paul 
    last_name: McCartney 

Bir çekicilik gibi çalışır.

Artık her şeyin belgelerinden kopyalandığı için yanlış olanın kafam karıştı. windows 32bit, Django 1.9, python 2.7 kullanıyorum.

+0

Lütfen .json' dosyanızın nesne listesi sarıcı için hem başlangıç ​​hem de bitiş etiketi içerdiğinden emin olun: '[', ']' – kia

+0

Hangi veritabanı arka uçını kullanıyorsunuz? – acmisiti

+0

veritabanı arka planı sqlite'dir. @kia Başlangıç ​​ve bitiş etiketini kullanarak json dosyam. –

cevap

1

Kodunuzu linux mint/django 1.9/python 2.7 ile kontrol ettim ve iyi çalışıyor.

Sorun, dosyalarınızda kullandığınız kodlama olabilir. Lütfen json dosyasının UTF-8 kodlamasını kullandığını ve BOM'u kullanmama konusunda dikkatli olmanızın olduğundan emin olun. Notepad ++ editörü, dosyanın bir BOM içerip içermediğini belirleyip kaldırabilir.

+0

Cevabınız için teşekkür ederiz. –