Неправильный формат csv при использовании ImportExportModelAdmin

Я пытаюсь загрузить приведенный ниже файл csv, но он загружает только некоторые столбцы, а затем некоторые из этих значений оказываются пустыми. До этого я получал ошибку:

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

который я исправил, воспользовавшись советом из здесь, в котором говорится, что django import-export использует "id" по умолчанию. Итак, создайте файл resources.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)
    longitude = models.FloatField(null=True)
    latitude = models.FloatField(null=True)
    town = models.CharField(max_length=150)
    region = models.CharField(max_length=150)
    country = models.CharField(max_length=150)

#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
    list_display = ['customer_id', 'customer_name', 'longitude', 'town', 'region', 'country']

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

admin.site.register(Customer, DataImportExportAdmin)

Файл Resource.py:

from import_export import resources из .models import Customer

class PropertyAdminResource(resources.ModelResource):

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

Скриншот загруженного csv в панели администратора Django Wrongly parsed csv

Кто-нибудь видит, где я ошибаюсь?

Спасибо!

Ок, теперь понятно. Причина, по которой значения не заполняют столбцы, заключается в том, что в вашем CSV-файле имена столбцов содержат пробелы вместо знаков подчеркивания. У вас есть 2 варианта:

  1. (Быстро и просто) Измените имена столбцов CSV, чтобы отразить имена атрибутов, определенные в вашей модели. Например, Customer ID станет customer_id, а Customer Name станет customer_name.

    Вероятно, вы также захотите записать имена столбцов Latitude и Longitude в нижнем регистре.

  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',)
    
Вернуться на верх