【问题标题】:KeyError: 'id' django-import-exportKeyError:'id' django-import-export
【发布时间】:2021-11-14 11:32:06
【问题描述】:

我不知道哪里错了,就在我的代码中,请帮助我已经浪费了很多时间...谢谢_/\_

admin.py
from import_export import resources
from import_export.admin import ImportExportModelAdmin

class CapabilityResource(resources.ModelResource):
    model = Capability
    skip_unchanged = True
    report_skipped = True
    exclude = ('id',)
    import_id_fields = ('capscode', 'capsid', 'capsname', 'cfor', 'parent',)



@admin.register(Capability)
class CapabilityAdmin(ImportExportModelAdmin):
    resource_class = CapabilityResource
    fields = ['capscode', 'capsname', 'cfor', 'parent']
    list_display = ['capscode', 'capsname', 'cfor', 'parent']
    list_display_links = ['capscode', 'capsname']


models.py
class Capability(models.Model):  
    CFOR_CHOICES = [('WEB', 'WEB'), ('PORTLET', 'PORTLET'), ('REPORT', 'REPORT'), ('MOB', 'MOB')]
    capsid      = models.AutoField(primary_key=True, auto_created=True, editable=False)
    capscode    = models.CharField(_('caps'), max_length=50)
    capsname    = models.CharField(_('includes'), max_length=1000, default = None, blank=True, null=True)
    parent      = models.ForeignKey('self', on_delete=models.RESTRICT, db_column='parent', null=True, blank=True, related_name='children')
    cfor        = models.CharField(_('cfor'), max_length=10, default='WEB', choices=CFOR_CHOICES)
    clientid    = models.ForeignKey('onboarding.Bt',  null=True, blank=True, on_delete = models.RESTRICT, db_column='clientid')


csv data:
capscode    capsid  capsname        cfor    parent
NONE            1   NONE            WEB 
DASHBOARDS      2   DASHBOARDS      WEB     1
RP_MONITORING   3   RP MONITORING   WEB     2
FACILITY        4   FACILITY        WEB     2

版本:
django-import-export==2.6.0
Django==3.2.4
python=3.8.10

错误: 行号:1 - 'id' 无,1,无,网络, 回溯(最近一次通话最后): 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 650 行,在 import_row 实例,新 = self.get_or_init_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 342 行,在 get_or_init_instance instance = self.get_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 329 行,在 get_instance import_id_fields = [ 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 330 行,在 self.fields[f] for f in self.get_import_id_fields() 键错误:'id'

行号:2 - 'id' 仪表板, 2, 仪表板, WEB, 1 回溯(最近一次通话最后): 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 650 行,在 import_row 实例,新 = self.get_or_init_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 342 行,在 get_or_init_instance instance = self.get_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 329 行,在 get_instance import_id_fields = [ 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 330 行,在 self.fields[f] for f in self.get_import_id_fields() 键错误:'id'

行号:3 - 'id' RP_MONITORING, 3, RP 监控, WEB, 2 回溯(最近一次通话最后): 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 650 行,在 import_row 实例,新 = self.get_or_init_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 342 行,在 get_or_init_instance instance = self.get_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 329 行,在 get_instance import_id_fields = [ 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 330 行,在 self.fields[f] for f in self.get_import_id_fields() 键错误:'id'

行号:4 - 'id' 设施,4,设施,网络,2 回溯(最近一次通话最后): 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 650 行,在 import_row 实例,新 = self.get_or_init_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 342 行,在 get_or_init_instance instance = self.get_instance(instance_loader, row) 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 329 行,在 get_instance import_id_fields = [ 文件“/home/xyz/abc/envs/intelliwiz_env/lib/python3.8/site-packages/import_export/resources.py”,第 330 行,在 self.fields[f] for f in self.get_import_id_fields() 键错误:'id'

【问题讨论】:

  • 我看不出我的问题有什么问题,有人能解释一下投反对票的原因吗!
  • this answer 可以帮到你。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python-3.x django import-from-csv django-import-export


【解决方案1】:

尝试将您的 CapabilityResource 更改为关注

class CapabilityResource(resources.ModelResource):
  class Meta:
    model = Capability
    skip_unchanged = True
    report_skipped = True
    exclude = ('id')
    fields=('id','capscode','capsid','capsname', 'cfor', 'parent')

基本上字段列表需要包含“id”字段,用于确定现有数据库行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2020-11-09
    相关资源
    最近更新 更多