【问题标题】:Django import export Line number: 1 - u"Column 'id' not foundDjango import export Line number: 1 - u"Column 'id' not found
【发布时间】:2015-05-28 16:25:24
【问题描述】:

我正在尝试将 excel 文档导入 Django 数据库。我已将以下代码添加到admin.pymodel.py。 Django的开发似乎有错误。我已阅读有关如何修复此错误的几个不同文档。但是我仍然对如何准确实施它有点迷茫。

在跟踪中,它一直说我的 excel 文档需要一个 id 字段。我的 excel 文档中没有 id 字段,我也没有告诉我的模型寻找 id 字段。

我找到的文档表明我应该在这里使用get_or_init_instance

https://django-import-export.readthedocs.org/en/latest/import_workflow.html

你们能提供的任何帮助都会很棒。

admin.py

class VinCasesAndCampaignsResource(resources.ModelResource):
    published = fields.Field(column_name='published_date')

    def get_instance(self, instance_loaders, row):
        return False

    class Meta:
        model = VinCasesAndCampaigns
        widgets = {}
        fields = ('VIN','LatestOpenCaseID','LatestClosedCaseID', 
                  'OpenDate', 'CloseDate', 'HasCampaigns',)
        import_id_fields = ['VIN']
        export_order = ('VIN',)
        exclude = ('id')

模型.py

class VinCasesAndCampaigns(models.Model):
    VIN = models.CharField(max_length=30)
    LatestOpenCaseID = models.DateField()
    LatestClosedCaseID = models.DateField()
    OpenDate = models.DateField()
    CloseDate = models.DateField()
    HasCampaigns = models.BooleanField(default = False)
    HasOpenCampaigns = models.BooleanField(default = False)
    HasCases = models.BooleanField(default = False)
    HasEstimates = models.BooleanField(default = False)
    HasDwell = models.BooleanField(default = False)
    HasClaims = models.BooleanField(default = False)

    exclude = ('id',)

追踪:

> Line number: 1 - u"Column 'id' not found in dataset. Available columns
> are: [u'VIN', u'LatestOpenCaseID', u'LatestClosedCaseID', u'OpenDate',
> u'CloseDate', u'HasCampaigns', u'HasOpenCampaigns', u'HasCases',
> u'HasEstimates', u'HasDwell', u'HasClaims']" Traceback (most recent
> call last): File
> "/Users/USER/anaconda/lib/python2.7/site-packages/django_import_export-0.2.8.dev0-py2.7.egg/import_export/resources.py",
> line 342, in import_data instance, new =
> self.get_or_init_instance(instance_loader, row)

【问题讨论】:

  • 请修正你的缩进
  • 缩进现在应该是正确的。

标签: python django django-models django-admin django-import-export


【解决方案1】:

您可以通过以下步骤解决此问题:

第 1 步首先转到 C:/Users/am.sa18/Desktop/myenv/Lib/site-packages/import_export/resources.py

第 2 步在编辑器中打开 resources.py。

第 3 步在第 84 行进行更改,它看起来像这样

步骤 4 import_id_fields = ['id'] 其中 'id' 默认由 import_export 包设置, 您可以通过模型的主键更改“id”。 添加主键后:import_id_fields = ['primary_key']

第 5 步保存 resources.py 文件并运行服务器。

【讨论】:

    【解决方案2】:

    这是一个工作示例。我还使用了“exclude”,它可以工作,无需在 models.py 中添加 exclude = ('id',)。 我的数据集不包含“id”字段。

    Python 2.7 | Django 1.11 | Django 导入导出 1.0.0 (2018-02-13)

    模型.py

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.db import models
    from django.template.defaultfilters import slugify
    from django.contrib.auth.models import User
    
    # Create your models here.
    
    class CourseList(models.Model):
        short_code = models.CharField(max_length=10)
        course_id = models.CharField(max_length=50,null=True,blank=True,unique=True)
        title = models.CharField(max_length=100)
        status = models.CharField(max_length=10)
        count_current = models.IntegerField(default=0)
        count_cumulative = models.IntegerField(default=0)
        start_date = models.CharField(max_length=20)
        end_date = models.CharField(max_length=20)
        pacing_type = models.CharField(max_length=10)
        updated_date = models.DateTimeField(auto_now_add=True)
    
        class Meta:
            ordering = ['end_date']
    
            def __unicode__(self):
                return self.title
    

    resources.py

    from import_export import resources, fields
    from .models import CourseList
    
    class CourseListResource(resources.ModelResource):
        status = fields.Field(column_name='availability', attribute="status")
        short_code = fields.Field(column_name='catalog_course', attribute="short_code")
        title = fields.Field(column_name='catalog_course_title', attribute="title")
        count_current = fields.Field(column_name='count', attribute="count_current")
        count_cumulative = fields.Field(column_name='cumulative_count', attribute="count_cumulative")
    
    
        class Meta:
            model = CourseList
            import_id_fields = ('course_id',)
            exclude = ('id', 'updated_date',)
            skip_unchanged = True
            fields = ('status', 'short_code','course_id', 'title', 'count_current', 'count_cumulative', 'end_date', 'pacing_type', 'start_date', )
    

    admin.py

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.contrib import admin
    from import_export.admin import ImportExportModelAdmin
    
    # Register your models here.
    from import_export import resources
    from courselist.models import CourseList
    from courselist.resources import CourseListResource
    
    
    @admin.register(CourseList)
    class CourseListAdmin(ImportExportModelAdmin):
        resource_class = CourseListResource
        list_display = ('id', 'course_id', 'title', 'start_date', 'end_date')
    

    【讨论】:

      【解决方案3】:

      只需在已创建列之前创建一个空列id,然后通过 Django import_export 导入相同的文件。

      确保id 列应位于 CSV 或 Excel 文件中的第一列

      【讨论】:

        【解决方案4】:

        在 ModelResource 的字段中包含字段 id

        fields = ('id','VIN','LatestOpenCaseID','LatestClosedCaseID', 
                      'OpenDate', 'CloseDate', 'HasCampaigns',)
        

        并在您的 excel 文件中添加一个字段 id 为空值的列。这会添加一个具有自动增量的新字段。

        文件.xls

        id  VIN  OpenDate ...
            23   05-10-2018
            24   05-11-2018
        

        【讨论】:

        • 我在来这里之前尝试过,但如果我让列为空,我仍然会收到错误消息。自动增量似乎没有实现
        【解决方案5】:

        admin.py 应该是:

        class CourseListAdmin(ImportExportModelAdmin):
            resource_class = CourseListResource
            list_display = ('id', 'course_id', 'title', 'start_date', 'end_date')
        
        admin.site.register(CourseList, CourseListAdmin)
        

        我对装饰器@admin.register 也有同样的问题。我可能遵循相同的旧教程。请参阅 django-import-export 的真实文档中的 Admin Integration

        【讨论】:

          猜你喜欢
          • 2013-02-17
          • 2021-11-14
          • 1970-01-01
          • 1970-01-01
          • 2020-10-13
          • 1970-01-01
          • 2015-11-01
          • 1970-01-01
          • 2019-07-07
          相关资源
          最近更新 更多