2016-05-12 59 views
-1

我必須創建一個從csv導入數據到已存在的django模型的應用程序。我使用了django-adaptator工具,它可以輕鬆完成。例如,我有一個Sates(=「Pays」)模型,其中包含3個字段:名稱,代碼和國籍。從django的csv導入數據 - Has_header屬性不會忽略第一行

我的CSV:

nom;abrev;nationalite 
AFGHANISTAN;AF;Afghane 
AFRIQUE DU SUD;ZA;Sud-africaine 

這裏是我的代碼

Models.py已經存在:

class Pays(models.Model): 
pays = models.CharField(max_length=150) 
codeiso3166alpha2 = models.CharField(max_length=2) 
nationalite = models.CharField(max_length=50, null=True, blank=True) 
maj = models.DateTimeField(auto_now=True) 
class Meta: 
    db_table = u'Pays' 
def __unicode__(self): 
    return self.pays 

Models.py從我的應用程序:

# coding: utf-8 
from django.db import models 
from polyc2n.models import Pays #the model that already exists 
from adaptor.model import CsvDbModel 

class MyCSVDbModel(CsvDbModel): 

    class Meta: 
     exclude = ['maj'] 
     dbModel = Pays 
     delimiter = ";" 
     has_header = True 
     update = {'keys': ['codeiso3166alpha2']} 

我的views.py:

# coding: utf-8 
from django.shortcuts import render 
from remplirPays.models import MyCSVDbModel 
from django.http import HttpResponse 

path = "pays.csv" 

def DataPays(request): 
    MyCSVDbModel.import_data(data = open(path)) 
    return HttpResponse("import is ok") 

這是我的問題:當我進行導入時,即使將「has_header」屬性設置爲True,第一行也不會被忽略。你們知道爲什麼,或者你知道我該如何解決我的問題?

感謝您閱讀

+0

你在說哪個位? 這是我的models.py中的「has_header = True」,不起作用 – Lydia

+0

你打了個什麼? 我沒有什麼比這些代碼+ csv – Lydia

+0

我不明白你的句子 實際上,「has_header = True」這一行必須忽略我的csv的第一行(即nom; abrev; nationalite)。所以這行不應該被導入到我的數據庫中。 問題是這行不會被忽略,並在我的數據庫中的數字 – Lydia

回答

0

你爲什麼不更好嘗試使用的DataReader和load.py文件,在這裏,我給你一個示例代碼我使用:

import csv,sys,os 
import django 

pathproject = "/home/yourfolder" 
base_csv_filepath = "/home/yourfolder/yourcsvfile" 
sys.path.append(pathproject) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings.local' 
django.setup() 

from yourapp.models import yourmodel 

def load_your_data(): 
    print ("Entering...") 
    csv_file = base_csv_filepath + "/yourcsvfile.csv" 
    dataReader = csv.reader(open(csv_file, encoding='utf-8'),delimiter=',',quotechar='"') 
    for row in dataReader: 
     if row[0] != 'ID': 
      yourmodel.objects.create(
       field1=row[0], 
       field2=row[1] 
      ) 
    print ("Imported correctly") 


if __name__ == "__main__": 
    load_your_data() 

編輯:「 ID'將是標題欄文本,並假設它是一個2行數據,你當然可以修改它,因爲你希望覆蓋更大的參數。