簡體   English   中英

如何使用django import-export導入Excel文件

[英]how to import excel file with django import-export

我使用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”的問題?

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>',)

這是一個比較老的問題,但是我對同樣的事情掛了電話,卻沒有找到明確的答案,所以我現在嘗試一下。

您沒有共享用於執行實際導入的代碼,因此出於這個答案的考慮,我假設您有一個名為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可以正常工作,但是我假設它可以。

另外,對我來說,當我第一次運行此程序時,出現了“無效尺寸”錯誤。 (對我而言)這樣做的原因是,文件末尾有一個空白行。 當我將其剝離時,一切都很好。

我希望這對下一個尋找相同答案的人有所幫助。

“無法導入格式無。” CSV文件錯誤已修復,如下所示:

imported_data = dataset.load(inventory.read().decode('utf-8'),format='csv')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM