如何用django导入导出导入excel文件

我使用django导入导出,我不能导入一个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'的问题?

django-import-export期望标题行知道如何将列映射到字段。

默认情况下,django import export需要在列标题上使用主键'id'。

你可以通过改变你的resources.py来改变这个行为

 class Essai_Temperature_Resource(resources.ModelResource): class Meta(object): model = Essai_Temperature import_id_fields = ('<your key field here>',) 

这是一个较老的问题,但是我挂断了这个同样的事情,没有find明确的答案,所以我现在就去尝试。

你没有共享你用来做实际导入的代码,所以我会假设为了这个答案,你有一个名为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的工作原理是相同的,但我假设它。

另外,对于我来说,当我第一次跑这个,我得到了一个“无效的尺寸”的错误。 原因(对我来说)是我的文件末尾有一个空行。 当我剥离这一切都运作良好。

我希望能帮助那些接下来find同样答案的人。