使用 ImportExportModelAdmin 时 csv 格式不正确

Incorrect csv format when using ImportExportModelAdmin

我正在尝试上传下面的 csv 文件,但它只上传了一些列,然后其中一些值是空的。在此之前,我收到一个错误:

```  self.fields[f] for f in self.get_import_id_fields()
KeyError: 'id'``` 

我通过使用 here 的建议修复了这个问题,基本上是说 django import-export 默认使用“id”。因此,创建一个 resources.py 文件 - 我在其中声明导入和导出设置。作为例外,在 resouse.py 文件中声明“id”,这是我所做的并且上传有效...但现在它的格式不正确。

CSV 的一部分

Customer ID,Customer Name,Latitude,Longitude,town,region,country
C00001,Valentino Solomon,57.13514,-2.11731,Aberdeen,Aberdeen City,Scotland
C00002,Luna Armstrong,57.13875,-2.09089,Aberdeen,Aberdeen City,Scotland
C00003,Jaylen Crane,57.101,-2.1106,Aberdeen,Aberdeen City,Scotland
C00004,Christopher Fritz,57.10801,-2.23776,Milltimber,Aberdeen City,Scotland

客户模型

class Customer(models.Model):
    customer_id = models.CharField(primary_key=True, max_length=150)
    customer_name = models.CharField(max_length=150, null=True)
    Latitude= models.FloatField(null=True)
    longitude= models.FloatField(null=True)
    town = models.CharField(max_length=150, null=True)
    region = models.CharField(max_length=150,null=True)
    country = models.CharField(max_length=150, null=True)

Admin.py 文件:

from django.contrib import admin
from systemx.models import Customer, Demand, Product
from import_export.admin import ImportExportModelAdmin
from systemx.resources import *


class DataImportExportAdmin(ImportExportModelAdmin):
    resource_class  =   PropertyAdminResource
    ist_display = ['customer_id', 'customer_name', 'latitude', 'longitude', 'town', 'region', 'country']

# class DataImportExportAdmin(ImportExportModelAdmin):
#     list_display = ['customer_id', 'customer_name', 'latitude', 'longitude', 'town', 'region', 'country']

admin.site.register(Customer, DataImportExportAdmin)

Resources.py 文件:

from import_export import resources
from .models import Customer

class PropertyAdminResource(resources.ModelResource):

    class Meta:
        model = Customer
        # exclude = ('id',)
        import_id_fields = ('customer_id',)

谁能看出我哪里搞砸了?

谢谢!

导入后管理员 table 的屏幕截图:

好的,我现在明白了。值未填充列的原因是因为您的 CSV 文件的列名包含空格而不是下划线。您有 2 个选择:

  1. (快速简单)更改 CSV 列名称以反映模型中定义的属性名称。例如。 Customer ID 会变成 customer_idCustomer Name 会变成 customer_name.

    您可能还想将 LatitudeLongitude 列名称小写。

  2. (需要一些额外的代码)通过将模型的属性映射到 CSV 中的列来手动定义资源中的列名称。例如:

    from import_export.fields import Field
    
    class PropertyAdminResource(resources.ModelResource):
    
        customer_id = Field(
            attribute="customer_id",
            column_name="Customer ID",
        )
        customer_name = Field(
            attribute="customer_name",
            column_name="Customer Name"
        )
    
        class Meta:
            model = Customer
            fields = (
                'customer_id',
                'customer_name',
                'latitude',
                'longitude',
                'town',
                'region',
                'country',
            )
            import_id_fields = ('customer_id',)