#django #django-import-export
Вопрос:
Я хотел бы использовать пакет django-импорт-экспорт для импорта некоторых файлов TSV, но у меня возникли некоторые проблемы.
В файле у меня есть имена столбцов в верхнем регистре, такие как: INDUSTRYGROUPTYPE, TOTALOFFERINGAMOUNT, TOTALREMAINING
В модели у меня то же имя, но в нижнем регистре и ниже, вот так:
class Offering(models.Model):
industry_group_type = models.CharField(max_length=260)
total_offering_amount = models.CharField(max_length=17)
total_remaining = models.CharField(max_length=17)
Класс ресурсов выглядит следующим образом:
class OfferingResource(ModelResource):
industry_group_type = Field(attribute='INDUSTRYGROUPTYPE')
total_offering_amount = Field(attribute='TOTALOFFERINGAMOUNT')
total_remaining = Field(attribute='TOTALREMAINING')
class Meta:
model = Offering
fields = ('id', 'industry_group_type', 'total_offering_amount', 'total_remaining')
При импорте файла создаются пустые строки, содержащие только пустую строку ''
, и в них нет данных.
Мне нужна помощь, чтобы исправить это, пожалуйста.
Ответ №1:
Я нашел решение, я должен использовать имена столбцов файла в качестве имени переменной атрибута класса, а не в качестве значения attribute
аргумента Field
класса.
Итак, класс ресурсов должен быть таким:
class OfferingResource(ModelResource):
INDUSTRYGROUPTYPE = Field(attribute='industry_group_type')
TOTALOFFERINGAMOUNT = Field(attribute='total_offering_amount')
TOTALREMAINING = Field(attribute='total_remaining')
class Meta:
model = Offering
fields = ('id', 'INDUSTRYGROUPTYPE', 'TOTALOFFERINGAMOUNT', 'TOTALREMAINING')
Ответ №2:
Как вы сказали, объявление поля ресурса в соответствии с именем атрибута будет работать, но вы также можете использовать column_name
параметр для объявления имени поля в tsv. Вы можете использовать «атрибут» для объявления соответствующего атрибута в объекте модели
class OfferingResource(ModelResource):
industry_group_type = Field(attribute='industry_group_type', column_name='INDUSTRYGROUPTYPE')
total_offering_amount = Field(attribute='total_offering_amount', column_name='TOTALOFFERINGAMOUNT')
total_remaining = Field(attribute='total_remaining', column_name='TOTALREMAINING')
class Meta:
model = Offering
fields = ('id', 'industry_group_type', 'total_offering_amount', 'total_remaining')