CsvDataException:无效的字段数

时间:2016-05-11 09:28:58

标签: django csv

我在Django项目中工作,我必须创建一个应用程序,将Csv导入已经存在的模型中(我无法修改此模型)。

例如,我有一个Sates(“Pays”)模型,其中包含3个字段:名称,代码和国籍:

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

这是我的csv小便:

AFGHANISTAN;AF;Afgane
AFRIQUE DU SUD;ZA;Sud-africaine
ALBANIE;AL;Albanaise

为此,我使用了模块“django-adaptator”。这是我的第一个有效的代码,数据已导入以及:

我的应用程序的models.py名为“remplirPays”:

# coding: utf-8

from django.db import models
from adaptor.model import CsvModel
from adaptor.fields import CharField, IntegerField, FloatField

from polyc2n.models import Pays  #that is the model that already exists


class MyCSVModel(CsvModel):

    name = CharField  (match = "pays")
    abrev = CharField (match ="codeiso3166alpha2")
    nationalite = CharField (match ="nationalite")

    class Meta:
        delimiter = ";"
        has_header = True
        dbModel = Pays

这是我的views.py:

# coding: utf-8
from django.shortcuts import render
from django.http import HttpResponse
from adaptor.model import CsvModel
from remplirPays.models import MyCSVModel


path = "pays.csv"

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

然而,为了优化我的代码并且为了让somone可以轻松使用它,我想使用“CsvDbModel”而不是CsvModel,因为我不想重新声明CSV模型而Django模型已经存在。

这是问题所在,我的代码如下:

models.py:

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

class MyCSVDbModel(CsvDbModel):
    class Meta:
        dbModel = Pays
        delimiter = ";"
        has_header = True

我的views.py:

# coding: utf-8
from django.shortcuts import render
from django.db import models
from polyc2n.models import Pays
from adaptor.model import CsvDbModel
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")

当我跑步时,我收到了一个错误:

Exception Type: CsvDataException
Exception Value: Line 1: Number of fields invalid

我不明白为什么当我的第一个代码工作时我会得到这个......

我希望你能帮助我,感谢你阅读。

Ps:我为我的英语道歉,我不是母语人士而且我努力做到最好

2 个答案:

答案 0 :(得分:0)

可能在您使用自定义模型之前,您已经提供了所需的字段,第二次使用默认值(CsvDbModel)您没有在其中添加文件,建模django提供的可能不包含该字段的字段无论您需要或尝试导入数据库,都显示此异常

您可以将第二个models.py更改为

# coding: utf-8
from django.db import models
from polyc2n.models import Pays
from adaptor.model import CsvDbModel
class MyCSVDbModel(CsvDbModel):
    name = CharField  (match = "pays")
    abrev = CharField (match ="codeiso3166alpha2")
    nationalite = CharField (match ="nationalite")
    class Meta:
        dbModel = Pays
        delimiter = ";"
        has_header = True

答案 1 :(得分:0)

解决方案:即使它没有在django admin中显示," maj"来自薪酬表:

maj = models.DateTimeField(auto_now=True)

被认为。所以我不得不排除他:

class Meta:
    exclude = ['maj']