Используйте библиотеку import_export django для импорта персонализированного экспорта CSV

В моем приложении есть два действия. Сначала я экспортирую данные в CSV, используя специальные ресурсы (см. ниже), чтобы иметь персонализированные заголовки и имя конкретного внешнего ключа вместо Id. Это нормально для экспорта CSV файла. Для импорта этого файла после модификации ... Возникает ошибка : **Integrity Error: (1048, "Column 'produit_id' cannot be null") **

Ниже приведен класс ресурсов для Greffons, позволяющий получить имя определенных колонок и упорядочить колонки в Meta.

class GreffonResource(resources.ModelResource):
    comm = fields.Field(
        column_name='Pre-Commandes',
        attribute='comm',
    )
    greffons = fields.Field(
        column_name='Greffons',
        attribute='greffons',
    )
    objectif = fields.Field(
        column_name='Objectifs',
        attribute='objectif',
    )
    realise = fields.Field(
        column_name='Realises',
        attribute='realise',
    )
    reussi = fields.Field(
        column_name='Reussis',
        attribute='reussi',
    )
    produit = fields.Field(
        column_name='Produits',
        attribute='produit',
        widget=widgets.ForeignKeyWidget(Produit, 'nom')
    )
    rang = fields.Field(
        column_name='Rangs',
        attribute='rang',
    )
    class Meta:
        model = Greffons
        fields = ('id', 'produit', 'comm', 'greffons', 'objectif', 'realise', 'reussi', 'rang')
        export_order = ['id', 'produit', 'comm', 'greffons', 'objectif', 'realise', 'reussi', 'rang']
        import_id_fields = ('id',)

После экспорта CSV файла, я изменяю данные внутри и импортирую их после, но ошибка :( Ниже приведен код для импорта данных после POST.


produit_resource = GreffonResource()
dataset = Dataset()
new_datas = request.FILES['myfile']
imported_data = dataset.load(new_datas.read().decode(), format='csv')
if categorie == "GREFFONS":
result = produit_resource.import_data(imported_data, dry_run=True, raise_errors=True)  

Скорее всего, в вашем csv есть значение Produits.nom, которое не сопоставлено ни с одним существующим экземпляром Produit. Это вызывает ошибку при создании с нулевым значением.

Вам необходимо просмотреть файл импорта и проверить все значения столбца 'Produits'. Убедитесь, что любое значение в нем может быть сопоставлено с записью nom в таблице Produit. Может быть, есть пустые значения для 'nom', которые интерпретируются как null?

Эта строка объявляет, что ваш столбец csv под названием 'Produits' будет иметь значение, которое соответствует Produit.nom:

produit = fields.Field(
    column_name='Produits',
    attribute='produit',
    widget=widgets.ForeignKeyWidget(Produit, 'nom')
)

Если вы не можете найти источник проблемы, лучше всего выполнить импорт с помощью отладчика, и вы увидите, в чем именно проблема.

Вернуться на верх