我使用django import-export,我无法导入excel文件 我收到错误:
Line number: 1 - 'id'
Traceback (most recent call last):
File "C: \ mat4 \ env \ lib \ site-packages \ import_export \ resources.py", line 317, in import_data
instance = new self.get_or_init_instance (instance_loader, row)
File "C: \ mat4 \ env \ lib \ site-packages \ import_export \ resources.py", line 149, in get_or_init_instance
instance = self.get_instance (instance_loader, row)
KeyError: 'id'
Line number: 2 - 'id'
Traceback (most recent call last):
File "C: \ mat4 \ env \ lib \ site-packages \ import_export \ resources.py", line 317, in import_data
instance = new self.get_or_init_instance (instance_loader, row)
File "C: \ mat4 \ env \ lib \ site-packages \ import_export \ resources.py", line 149, in get_or_init_instance
instance = self.get_instance (instance_loader, row)
KeyError: 'id'
我的模特:
class Essai_Temperature(models.Model):
name = models.ForeignKey(Material, verbose_name=_('name'))
nature_unit = models.ForeignKey(Property, verbose_name=_('category'))
choix = ChainedForeignKey(Physic, verbose_name=_('properties'), null=True, blank=True,
related_name='Essai_Temperature_choix',
chained_field="nature_unit",
chained_model_field="name",
show_all=False,
auto_choose=True)
valT= models.FloatField(_('temperature'),blank=True, null=False)
val10= models.FloatField(_('value'), blank=True, null=False)
val_ref= models.CharField(_('reference of the data'), max_length=50, default='0')
resources.py
class Essai_Temperature_Resource(resources.ModelResource):
class Meta(object):
model = Essai_Temperature
admin.py
class Essai_TemperatureAdmin(ImportExportModelAdmin):
resource_class = Essai_Temperature_Resource
list_display = ('name', 'nature_unit', 'choix', 'valT', 'val10', 'val_ref')
ordering = ('name__name', 'nature_unit__name', 'choix__lapropriete', 'valT',)
list_filter = ('name', 'nature_unit', 'choix')
和excel文件
1 CT55 Mechanical Hardness - Vickers (Mpa) 44 125 EF-01
2 CT55 Mechanical Hardness - Vickers (Mpa) 44 127 EF-02
我不明白' id' ?
答案 0 :(得分:0)
django-import-export期望标题行知道如何将列映射到字段。
答案 1 :(得分:0)
默认情况下,django import export需要主键' id'在列标题上。
您可以通过changinf the resources.py to
来更改此行为class Essai_Temperature_Resource(resources.ModelResource):
class Meta(object):
model = Essai_Temperature
import_id_fields = ('<your key field here>',)
答案 2 :(得分:0)
这是一个较老的问题,但我对这件事情感到困惑,并没有找到一个明确的答案,所以我现在就试着这样做了。
您没有共享用于执行实际导入的代码,因此为了这个答案,我假设您有一个名为c:\ import \ data.xls的文件。您的文件也必须有一个标题行。
import os
import tablib
from import_export import resources
dataset = tablib.Dataset() # We need a dataset object
Essai_Temperature_Resource = resources.modelresource_factory(model=Essai_Temperature)()
file = 'c:\import\data.xls'
dataset.xls = open(file).read()
# Add a blank ID column to each row.
dataset.insert_col(0, col=[None,], header="id")
# Do a Dry-Run and see if anything fails
result = Essai_Temperature_Resource.import_data(dataset, dry_run=True)
if (result.has_errors()):
print(result) # What is the error?
else:
# If there were no errors do the import for real
result = Essai_Temperature_Resource.import_data(dataset, dry_run=False)
当我这样做时,我使用的是CSV文件而且我不确定100%肯定xls的工作原理是相同的,但我假设它是。
另外,对我来说,当我第一次跑这个时,我得到了一个&#34;无效的尺寸&#34;错误。原因(对我来说)是我的文件末尾有一个空白行。当我剥离它时,一切都很好。
我希望能帮助那些接下来寻找同样答案的人。
答案 3 :(得分:0)
“无法导入格式无。” CSV文件错误已修复,如下所示:
imported_data = dataset.load(inventory.read().decode('utf-8'),format='csv')