使用 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 个选择:
(快速简单)更改 CSV 列名称以反映模型中定义的属性名称。例如。 Customer ID
会变成 customer_id
而 Customer Name
会变成 customer_name
.
您可能还想将 Latitude
和 Longitude
列名称小写。
(需要一些额外的代码)通过将模型的属性映射到 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',)
我正在尝试上传下面的 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 个选择:
(快速简单)更改 CSV 列名称以反映模型中定义的属性名称。例如。
Customer ID
会变成customer_id
而Customer Name
会变成customer_name
.您可能还想将
Latitude
和Longitude
列名称小写。(需要一些额外的代码)通过将模型的属性映射到 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',)