我在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:我为我的英语道歉,我不是母语人士而且我努力做到最好
答案 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']